如何在jtextcomponent中拟合文本

时间:2012-01-15 01:45:49

标签: java swing editor jtextcomponent

我正在尝试使用jtextarea开发一个没有滚动条的编辑器,所以如果文本太长而不适合jtextarea,它应该被拆分成更小的子串,可以在jtextarea中编辑而不显示垂直滚动条,因为它很容易获得使用setLineWrap和setWrapStyleWord去掉水平的一个。我试图使用垂直滚动条adjusmentListener来监听它的更改,但它不起作用,因为jtextarea append和setText方法在业务逻辑结束时激活,所以我尝试使用多线程和SwingWorker来调用这些方法,但也无法工作。我也试图调用重绘,重新验证和更新方法,没有希望。请帮我通过这个问题并提前感谢。

3 个答案:

答案 0 :(得分:1)

  

我正在尝试使用jtextarea开发一个没有滚动条的编辑器,所以如果文本太长而不适合jtextarea,它应该被拆分成更小的子串,可以在jtextarea中编辑而不显示垂直滚动条,因为它很容易获得使用setLineWrap和setWrapStyleWord去掉水平的。

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

  

我尝试使用垂直滚动条adjusmentListener来监听它的更改,但它不起作用,因为jtextarea append和setText方法在业务逻辑结束时被激活,所以我尝试使用多线程和SwingWorker来调用这些方法但是也不起作用。我也试图调用重绘,重新验证和更新方法,没有希望。

如果要在将输入的文本提交到文本组件之前捕获它,请考虑将DocumentFilter设置为JTextArea的关联文档(PlainDocument)。

答案 1 :(得分:1)

由于Hovercraft Full Of Eels已经建议,您必须查看DocumentDocumentFilter和/或DocumentListener界面。

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

Swing tutorial about textcomponents包含Implementing a DocumentFilter部分中的这样一个示例,其中DocumentSizeFilter类是您要查找的类(不是JDK的一部分,是Swing教程代码的一部分) )。正如已经建议作为示例代码中的注释,可以选择在附加会使内容过长的新文本时删除文档的第一部分,但我将其留给您,因为它被标记为作业。

答案 2 :(得分:0)

非常感谢Hovercraft和Robin我得到了它,你的回答让我想到了正确的方法,我通过使用JTextArea.modelToView()传递JTextArea文档长度作为参数,在“Core Swing:高级编程”一书中找到了准确答案此方法返回一个Rectangle对象,其协调表示最终的字符坐标,然后将这些坐标与JTextArea的底角进行比较,以查看此最终字符是否到达此底部。