这个问题看起来微不足道,但我找不到解决方案。
创建表单时,它包含JTextArea
。我想在其中放入大的常量文本。如果文本长1000行,我希望我的JTextArea
高1000行(足够大以显示没有滚动条的整个文本)。 JTextArea
位于一个可以有滚动条的面板中,因此当它变得太大时就不会有问题(该面板中有两个JTextArea
...就像在diff工具中一样。有谁知道我怎么能做到这一点?感谢。
答案 0 :(得分:5)
BorderLayout
只需将JTextArea
放在JScrollPane
中,然后再将JPanel
添加到FlowLayout
中,即可开箱即用。另一方面,setPreferedSize()
没有。它不会显示滚动条,除非@Xorty暗示,您在JScrollPane
上调用{{1}}并为其提供您想要的维度。
答案 1 :(得分:4)
你也可以使用这样的东西(有限的宽度,高度取决于文字,在显示信息时很有用):
public JTextArea createTextAreaFitToText(String message, Dimension minimalSize){
JTextArea aMessagePanel = new JTextArea();
aMessagePanel.setText(message);
/*for modelToView to work, the text area has to be sized. It doesn't matter if it's visible or not.*/
aMessagePanel.setPreferredSize(minimalSize);
aMessagePanel.setSize(minimalSize);
Rectangle r = aMessagePanel.modelToView(aMessagePanel.getDocument().getLength());
Dimension d = new Dimension(minimalSize.width, r.y + r.height);
aMessagePanel.setPreferredSize(d);
return aMessagePanel;
}
答案 2 :(得分:1)
增加或减少JTextArea的高度。输入文本后,调用JTextArea的getPreferredSize() - 它将为您提供显示整个文本所需的大小。 之后使用JScrollPane的setPrefferedSize()来设置JTextArea的大小
答案 3 :(得分:0)
嗯,首先:它是JTextArea而不是jTextArea。
现在 - 将JTextArea放入JScrollPane。输入文本后,调用JScrollPane的getPreferedSize()
- 它将为您提供显示整个文本所需的精确大小。另外,我从不使用其他LayoutManager而不是NetBeans Swing构建器中的“Free Design” - 所以我不确定其他LayoutManagers在那里的行为。