java - 如何创建具有指定宽度和显示所有文本所需的尽可能小的高度的 JTextArea?

标签 java swing jtextarea jtextcomponent

在我能找到的所有使用 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/

相关文章:

java - 如何使溢出的TextArea截断文本并在最后显示省略号?

java - JTextArea 中特定文本的 ActionListener?

java - 如何使用变量定义按钮的命令

java - java中的登录代码

java - JTextArea 中 setText() 的机制?

java - 在 JButton OnclickListener 中编辑 JLabel 文本

java - 你能在 CardLayout 上放置 SpringLayout "esque"约束吗?

java - JOOQ 如何从表中选择最小值 'id'

java - 哪个 java http 客户端库易于用于以编程方式发布帖子、设置 cookie 和 ajax?

java - 请求 Web API 的 GET 方法