2010-04-08 112 views
3

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

我有一个想法,使用getLineCount()并确定(如有必要)JTextArea的新高度。你有没有,或知道更好的方法来实现呢?

回答

8

实际上,JTextArea总是具有正确的大小,因此所有文本行都可见。您遇到的情况可能是您将文本区域封装在JScrollPane中。只需省略滚动窗格并将文本区域作为容器的直接子元素。

另一种解决方案是侦听调整文本区域的事件大小并相应地调整滚动窗格的大小。这样,您可以增长到一定的大小,然后开始显示滚动条(例如,当有人将500KB的文本粘贴到文本区域时)。

+0

我只是将JTextArea添加到JPanel。是否设置大小?但如果我没有设置大小,那么它不会显示出来。 – Halo 2010-04-08 15:35:41

+0

您只需设置JPanel的大小,以便文本区域可以增长。文本区域应自动调整以适应文本内部的大小。 – 2010-04-09 07:22:14

+0

好吧,它没有工作。顺便说一句,我切换到使用JTextPane,但仍然与扩展问题继续 – Halo 2010-04-09 07:33:40

1

我有同样的问题。从我的测试中,我不相信JTextArea会动态设置其大小。相反,它的大小似乎受限于它的容器(在我的例子中是一个JPanel)。但是,JTextArea会根据其包含的文本更改其首选大小。从文档:

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

0

我有同样的问题,我把JTextArea放入一个JScrollPane,并设置JTextArea的首选大小,我相信这是问题的原因。

所以正确的解决方案是将JTextArea放入JScrollPane中,并且不要触摸JTextArea的首选大小,而是设置JScrollPane。