【发布时间】:2011-05-04 06:09:10
【问题描述】:
在我能找到的所有使用JTextArea 的示例中,高度和宽度在构造JTextArea 之前是已知的,如果JTextArea 需要更多高度,则将其放在@ 内987654324@。显然,JTextArea 的高度取决于宽度和文本内容。
现在,我的情况要求我不使用JScrollPane,而是让JTextArea 足够高以显示所有文本。当我创建JTextArea 时,我知道文本内容以及它必须使用的宽度;我不知道高度 - 我希望它尽可能小而不切断任何文本。这似乎很难实现。
附带说明,JTextArea 将添加到没有布局管理器的 JPanel - 它使用基于添加组件的首选大小的绝对定位。这要求我的JTextArea 将在getPreferredSize() 上返回正确的尺寸。正确的尺寸应该是我在构建它时提供的宽度,以及以提供的宽度显示所有文本所需的最小高度。
我发现了一些类似的线程来讨论与 JTextArea 相关的奇怪/错误,有时可以通过在父容器上调用两次 pack() 来解决这些问题。这不是我的选择。我很想创建自己的JTextArea,它采用宽度和字符串,并根据宽度和字体设置计算必要的最小高度,但我想在花时间这样做之前我会先询问一下。
希望我的问题很清楚。谢谢大家的帮助!
【问题讨论】:
-
JLabel 会代替 JTextArea 吗?
-
@Andrew Thompson 当然,我可以使用
JLabel,但是我仍然需要手动在字符串中插入换行符,这需要我根据宽度计算它们应该在哪里和字体设置,然后我必须添加一些特殊处理以使其包含整个单词而不是字符。这些是JTextArea提供的东西,所以如果可以的话,我更愿意使用它。 -
见下面的例子。我喜欢使用一点“HTML 技巧”来实现这样的事情。 ;)
标签: java swing jtextarea jtextcomponent