我正在使用JTextArea来显示长文本
JTextArea _definition = new JTextArea(5, 50);
使用自动换行
_definition.setLineWrap(true);
_definition.setWrapStyleWord(true);
嵌入在JScrollPane
中add(new JScrollPane(_definition), gbc);
所有这些都是带有GridBagLayout的JPanel的一部分。
使用较短的文本,一切都工作正常,但是当我添加带有换行符的长文本并且需要滚动条时,pack()向南移动,所有组件只有最小尺寸,对话框不可用(它不仅仅是受影响的TextArea。
我试图找出发生了什么,但我能想到的只是与TextArea中的文本有关。我被卡住了......任何想法?谢谢!
答案 0 :(得分:4)
尝试两次调用pack()
。 JTextArea有一些奇怪的行为as described in this entry in the Java bug database。它最初将其首选大小报告为非常宽的单行条目(例如,一行,一千列)。一旦它意识到它是一定宽度,它就会报告所需行数的正确首选大小。
我不得不做很多不同的事情来解决这个问题,包括继承JTextArea并修改它的行为要聪明一些。在这种情况下,双pack()
可能适合您,或者您可能不得不采用更复杂的调整,具体取决于布局中的所有内容如何组合在一起。
答案 1 :(得分:2)
让它发挥作用..罗斯的答案给了我一些更好的搜索条件,所以感谢帮助我指出正确的方向!
pack();
_definition.setSize(_definition.getPreferredSize());
pack();
所以双重包装加上一些额外的......奇怪的行为。