有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在jtextcomponent中适应文本

我正在尝试使用jtextarea开发一个没有滚动条的编辑器,因此如果文本太长,无法放入jtextarea,则应将其拆分为较小的子字符串,这些子字符串可以在jtextarea中编辑,而不显示垂直滚动条,因为使用setLineWrap和setWrapStyleWord很容易摆脱水平滚动条。我曾尝试使用垂直滚动条AdjustmentListener来侦听其更改,但它不起作用,因为jtextarea append和setText方法在业务逻辑结束时被激活,所以我尝试使用多线程和SwingWorker来调用这些方法,但也不起作用。我还尝试调用repait、revalidate和update方法,但毫无希望。请帮我通过这个问题,并提前感谢


共 (3) 个答案

  1. # 1 楼答案

    正如满是鳗鱼的气垫船已经建议的那样,您必须查看DocumentDocumentFilter和/或DocumentListener接口

    通过调整这些参数,当有人想要添加文本时,你可以完全控制文本的显示。例如,可以在添加新文本之前/之后删除文本的第一部分,从而限制文档中的行数/字符数

    Swing tutorial about textcomponentsImplementing a DocumentFilter部分包含这样一个例子,其中^{}类是您正在寻找的类(不是JDK的一部分,是Swing教程代码的一部分)。正如该示例代码中的注释所建议的那样,在添加新文本时删除文档的第一部分是一个选项,这会使内容过长,但我将其留给您,因为它被标记为家庭作业

  2. # 2 楼答案

    感谢气垫船和罗宾,我明白了,你们的答案让我找到了正确的方法,我在《Core Swing:高级编程》一书中通过使用JTextArea找到了正确的答案。modelToView()将JTextArea文档长度作为参数传递此方法返回一个矩形对象,其坐标表示最终字符坐标,然后将这些坐标与JTextArea的下角进行比较,查看最终字符是否到达底部

  3. # 3 楼答案

    I am trying to develop an editor without scrollbars using jtextarea, so if the text is too long to fit within jtextarea it should be splitted into smaller substrings which could be edited within the jtextarea without showing vertical scrollbar because it is easy to get rid of horizontal one by using setLineWrap and setWrapStyleWord.

    我不确定我是否完全理解这一点。也许你可以进一步解释?为什么不把JTextarea放在JScrollPane中呢?如果所包含的文本大于JTextArea可以显示的文本,您希望的行为是什么

    I have tried to use vertical scrollbar adjusmentListener to listen to its changes but it doesnt work because jtextarea append and setText methods activated at the end of business logic, so I tried to use multithreaded and SwingWorker to invoke these methods but also doesnt work. I also tried to invoke repaint, revalidate and update methods with no hope.

    如果您想在提交到文本组件之前捕获输入的文本,请考虑将文档过滤器设置为JTestTaReA的关联文档(PLAN文档)。p>