JTextArea - 非常小的文本长文本

时间:2009-01-18 19:28:24

标签: java swing textarea sizing

我正在使用JTextArea来显示长文本

JTextArea _definition = new JTextArea(5, 50);

使用自动换行

_definition.setLineWrap(true);
_definition.setWrapStyleWord(true);

嵌入在JScrollPane

add(new JScrollPane(_definition), gbc);

所有这些都是带有GridBagLayout的JPanel的一部分。

使用较短的文本,一切都工作正常,但是当我添加带有换行符的长文本并且需要滚动条时,pack()向南移动,所有组件只有最小尺寸,对话框不可用(它不仅仅是受影响的TextArea。

我试图找出发生了什么,但我能想到的只是与TextArea中的文本有关。我被卡住了......任何想法?谢谢!

2 个答案:

答案 0 :(得分:4)

尝试两次调用pack()。 JTextArea有一些奇怪的行为as described in this entry in the Java bug database。它最初将其首选大小报告为非常宽的单行条目(例如,一行,一千列)。一旦它意识到它是一定宽度,它就会报告所需行数的正确首选大小。

我不得不做很多不同的事情来解决这个问题,包括继承JTextArea并修改它的行为要聪明一些。在这种情况下,双pack()可能适合您,或者您可能不得不采用更复杂的调整,具体取决于布局中的所有内容如何组合在一起。

答案 1 :(得分:2)

让它发挥作用..罗斯的答案给了我一些更好的搜索条件,所以感谢帮助我指出正确的方向!

 pack();
 _definition.setSize(_definition.getPreferredSize());
 pack();

所以双重包装加上一些额外的......奇怪的行为。