当到达最后一行(文本区域的高度可以提供)并且用户想要开始新行时,我希望我的 JTextArea 自行调整大小(垂直扩展)。你知道,就像 MSWord 中的文本框。
我有一个想法来使用getLineCount()
和确定(如有必要)JTextArea 的新高度。你有,或者知道更好的方法来实现这个吗?
当到达最后一行(文本区域的高度可以提供)并且用户想要开始新行时,我希望我的 JTextArea 自行调整大小(垂直扩展)。你知道,就像 MSWord 中的文本框。
我有一个想法来使用getLineCount()
和确定(如有必要)JTextArea 的新高度。你有,或者知道更好的方法来实现这个吗?
实际上,JTextArea
总是有正确的大小,所以所有的文本行都是可见的。您所经历的可能是您将文本区域包裹在JScrollPane
. 只需省略滚动窗格并使文本区域成为容器的直接子项。
另一种解决方案是监听文本区域的调整大小事件并相应地调整滚动窗格的大小。这样,您可以增长到一定大小,然后开始显示滚动条(例如,当有人将 500KB 的文本粘贴到文本区域时)。
我有同样的问题。根据我的测试,我不相信 JTextArea 会动态设置其大小。相反,它的大小似乎受到它的容器(在我的例子中是一个 JPanel)的限制。但是,JTextArea 确实会根据其包含的文本更改其首选大小。从文档中:
java.awt.TextArea 有两个属性 rows 和 columns 用于确定首选大小。当放置在 JScrollPane 中时,JTextArea 使用这些属性来指示视口的首选大小,以匹配 java.awt.TextArea 提供的功能。JTextArea 具有显示所有文本所需的首选大小,以便它在 JScrollPane 内正常工作。如果行或列的值等于 0,则沿该轴的首选大小用于沿同一轴的视口首选大小。
转到 JTextArea“属性”-清单“ lineWrap ”。
我也遇到了同样的问题,我把JTextArea放到了一个JScrollPane中,并设置了JTextArea的首选大小,我相信这就是问题的原因。
所以正确的解决办法是把JTextArea放到一个JScrollPane中,不要碰JTextArea的首选大小,而是设置JScrollPane的。