java如何在jtextcomponent中适应文本
我正在尝试使用jtextarea开发一个没有滚动条的编辑器,因此如果文本太长,无法放入jtextarea,则应将其拆分为较小的子字符串,这些子字符串可以在jtextarea中编辑,而不显示垂直滚动条,因为使用setLineWrap和setWrapStyleWord很容易摆脱水平滚动条。我曾尝试使用垂直滚动条AdjustmentListener来侦听其更改,但它不起作用,因为jtextarea append和setText方法在业务逻辑结束时被激活,所以我尝试使用多线程和SwingWorker来调用这些方法,但也不起作用。我还尝试调用repait、revalidate和update方法,但毫无希望。请帮我通过这个问题,并提前感谢
# 1 楼答案
正如满是鳗鱼的气垫船已经建议的那样,您必须查看
Document
、DocumentFilter
和/或DocumentListener
接口通过调整这些参数,当有人想要添加文本时,你可以完全控制文本的显示。例如,可以在添加新文本之前/之后删除文本的第一部分,从而限制文档中的行数/字符数
Swing tutorial about textcomponents在Implementing a DocumentFilter部分包含这样一个例子,其中^{} 类是您正在寻找的类(不是JDK的一部分,是Swing教程代码的一部分)。正如该示例代码中的注释所建议的那样,在添加新文本时删除文档的第一部分是一个选项,这会使内容过长,但我将其留给您,因为它被标记为家庭作业
# 2 楼答案
感谢气垫船和罗宾,我明白了,你们的答案让我找到了正确的方法,我在《Core Swing:高级编程》一书中通过使用JTextArea找到了正确的答案。modelToView()将JTextArea文档长度作为参数传递此方法返回一个矩形对象,其坐标表示最终字符坐标,然后将这些坐标与JTextArea的下角进行比较,查看最终字符是否到达底部
# 3 楼答案
我不确定我是否完全理解这一点。也许你可以进一步解释?为什么不把JTextarea放在JScrollPane中呢?如果所包含的文本大于JTextArea可以显示的文本,您希望的行为是什么
如果您想在提交到文本组件之前捕获输入的文本,请考虑将文档过滤器设置为JTestTaReA的关联文档(PLAN文档)。p>