在我能找到的所有使用 JTextArea
的示例中,高度和宽度在构造 JTextArea
之前是已知的,如果 JTextArea
需要更高的高度,然后将其放在 JScrollPane
中。显然,JTextArea
的高度取决于宽度和文本内容。
现在,我的情况要求我不使用 JScrollPane
,而是 JTextArea
的高度足以显示所有文本。当我创建 JTextArea
时,我知道文本内容以及它必须使用的宽度;我不知道高度 - 我希望在不切断任何文本的情况下尽可能小。这似乎很难实现。
作为旁注,JTextArea
将添加到没有布局管理器的 JPanel
- 它使用基于添加组件的首选大小的绝对定位。这要求我的 JTextArea
会在 getPreferredSize()
上返回正确的尺寸。正确的尺寸应该是我在构造它时提供的宽度,以及以提供的宽度显示所有文本所需的最小高度。
我发现了一些类似的线程,它们讨论了与 JTextArea
相关的奇怪之处/错误,有时可以通过在父容器上调用两次 pack()
来解决这些问题。这不是我的选择。我很想基本上创建自己的 JTextArea
,它采用宽度和字符串并根据宽度和字体设置计算必要的最小高度,但我想我会先问问周围再花时间这样做。
希望我的问题很清楚。谢谢大家的帮助!
最佳答案
it uses absolute positioning based on the added component's preferred size.
听起来像是布局管理器的工作。
This requires that my JTextArea would return the correct dimensions on getPreferredSize().
JTextArea textArea = new JTextArea();
textArea.setLineWrap( true );
textArea.setWrapStyleWord( true );
textArea.setText("one two three four five six seven eight nine ten");
System.out.println("000: " + textArea.getPreferredSize());
textArea.setSize(100, 1);
System.out.println("100: " + textArea.getPreferredSize());
textArea.setSize( textArea.getPreferredSize() );
关于java - 如何创建具有指定宽度和显示所有文本所需的尽可能小的高度的 JTextArea?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4083322/