自动调整大小的JTextArea

4

我希望我的JTextArea在达到最后一行(文本区域高度可以提供的最后一行)并且用户想要开始新行时,能够自动调整大小(垂直扩展)。就像MSWord中的文本框一样。

我有一个想法,使用getLineCount()来确定JTextArea的新高度(如果需要)。您是否有更好的实现方法?

4个回答

9
实际上,JTextArea 总是具有正确的大小,以便所有文本行都可见。您所遇到的可能是将文本区域包装在 JScrollPane 中。只需省略滚动窗格并使文本区域成为容器的直接子级即可。
另一种解决方案是监听文本区域的调整大小事件,并相应地调整滚动窗格的大小。这样,您可以增长到一定大小,然后开始显示滚动条(例如,当某人将 500KB 的文本粘贴到文本区域中)。

我只是将JTextArea添加到JPanel中。是否与设置大小有关?但如果我不设置大小,它就不会显示出来。 - Halo
你只需要设置JPanel的大小,以便文本区域可以增长。文本区域应自动调整以适应内部文本的大小。 - Aaron Digulla
好的,它没有起作用。顺便说一下,我已经切换到使用JTextPane了,但是扩展问题仍然存在。 - Halo
嗯,我觉得这可能是设置文本的问题。我使用了setText(),但可能应该使用insertString()。我会尝试一下。 - Halo

1
我曾经遇到过同样的问题。从我的测试来看,我不认为JTextArea会动态设置其大小。相反,它的大小似乎受到其容器(在我的情况下是JPanel)的限制。然而,JTextArea确实根据其包含的文本更改其首选大小。从文档中可以看出:

java.awt.TextArea有两个属性行和列,用于确定首选大小。当将JTextArea放置在JScrollPane中以匹配java.awt.TextArea提供的功能时,JTextArea使用这些属性来指示视口的首选大小。JTextArea的首选大小是显示所有文本所需的大小,因此它在JScrollPane内部正常工作。如果行或列的值等于零,则沿着该轴的首选大小用于沿着相同轴的视口首选大小。


1

请前往JTextArea的“属性” - “lineWrap”复选框。


0

我曾经遇到过同样的问题,我将JTextArea放入了JScrollPane中,并设置了JTextArea的首选大小,我相信这就是问题的原因。

因此,正确的解决方案是将JTextArea放入JScrollPane中,不要触碰JTextArea的首选大小,而是设置JScrollPane的首选大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接