2012-01-15 19 views
-1

我试图开发不使用JTextArea的滚动条的编辑器,因此内的文本,如果文本太长,以适应JTextArea中应该分裂成更小的子可能在JTextArea中内编辑中没有显示垂直滚动条因为通过使用setLineWrap和setWrapStyleWord很容易摆脱水平方向。我曾尝试使用垂直滚动条adjusmentListener来监听其更改,但它不起作用,因为在业务逻辑结束时激活了jtextarea append和setText方法,所以我尝试使用多线程和SwingWorker来调用这些方法,但也不起作用。我也试图调用重绘,重新验证和更新方法,没有希望。请帮助我通过此问题并提前致谢。如何适应的JTextComponent

回答

0

谢谢Hovercraft和Robin我知道了,你的回答让我趋向于正确的方式,通过使用JTextArea文档长度传递JTextArea Document Length作为JTextArea.modelToView(),我在“Core Swing:高级编程”参数此方法返回一个Rectangle对象,其协调代表最终的字符协调,然后将这些协调与JTextArea的底角进行比较,以查看最终字符是否达到此底部。

1

我试图开发不使用JTextArea的滚动条的编辑器,因此如果文本太长的JTextArea应该分裂成更小的子可能在JTextArea中内被编辑内没有表现出垂直滚动条,因为它是通过使用setLineWrap和setWrapStyleWord很容易摆脱水平。

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

我曾尝试使用垂直滚动条adjusmentListener听它的变化,但它不工作,因为JTextArea中追加和的setText方法在业务逻辑年底启动,所以我试图用多线程和SwingWorker的调用这些方法,但也没有工作。我也试图调用重绘,重新验证和更新方法,没有希望。

如果要在输入的文本提交到文本组件之前进行陷阱输入,请考虑将DocumentFilter设置为与JTextArea关联的Document(PlainDocument)。

+0

非常感谢你*气垫船充满鳗鱼*为回答道:亲爱的我不想要显示JScrollPane的,因为它是家庭作业的前期要求。 – muaz 2012-01-15 03:05:13

+0

但是;要清楚我的问题,如果我需要设置或追加到JTextArea的字符串太长,并且会导致显示垂直滚动条,则此字符串必须分为更短的子字符串 – muaz 2012-01-15 03:06:06

+0

,它们每个都可以设置为JTextArea而不显示垂直ScrollBar,并在JTextArea中连续显示它们以响应诸如按下按钮之类的事件,所以DocumentFilter对此有何帮助?谢谢 – muaz 2012-01-15 03:06:27

1

作为气垫船已经建议的鳗鱼,你必须看看Document,DocumentFilter和/或DocumentListener接口。

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

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

+0

谢谢你回复Robin,但是DocumentSizeFilter需要手动指定最大字符数,所以如果窗口被改变大小或改变了字体大小,ScrollBar会再次出现,我需要得到允许的最大字符数而不显示ScrollBar并且所有的问题都会消失,非常感谢 – muaz 2012-01-15 20:19:39

+0

顺便说一句,这是一个文档阅读器作为术语的项目,而不是作业;)谢谢你Robin – muaz 2012-01-15 20:24:36

+0

我建议看看'JTextArea'('getRows','getColumns', ...)。我很肯定你可以找出一些东西来避免硬编码的最大字符数,并支持动态大小的文本区域 – Robin 2012-01-15 21:13:02