1

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

JTextArea _definition = new JTextArea(5, 50);

带自动换行

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

嵌入在 JScrollPane 中

add(new JScrollPane(_definition), gbc);

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

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

我试图弄清楚发生了什么,但我只能弄清楚这与 TextArea 中的文本有关。我被困住了..有什么想法吗?谢谢!

4

2 回答 2

4

尝试调用pack()两次。JTextArea 有一些奇怪的行为,如 Java 错误数据库中的此条目所述。它最初将其首选大小报告为非常宽的单行条目(例如,一行,一千列)。一旦它意识到它是一个特定的宽度,它就会为它需要的行数报告一个正确的首选大小。

我不得不做很多不同的事情来解决这种行为,包括继承 JTextArea 并将其行为修改为更智能一些。在这种情况下, Doublepack()可能对您有用,或者您可能不得不根据布局中的所有内容如何组合在一起进行更复杂的调整。

于 2009-01-18T19:46:59.927 回答
2

让它工作..罗斯的回答给了我一些更好的搜索条件,所以感谢您通过指出正确的方向来帮助我!

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

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

于 2009-01-18T21:04:53.530 回答