我一直试图让TextArea以其内容增长,例如:
文本区域中有一行,现在用户继续写入并到达TextArea的右边框并且文本换行,现在他确实有第二行(不是通过内部简单地使用'\ n'包裹)并且我现在希望文本字段增加一行的高度。
我已经尝试过了:
此
Text text = textArea.lookup(".text").getLocalBounds.getHeight()
总是返回相同的,无论我有多少行。
此
textArea.getPrefRowCount()
始终返回
1
无论我有多少行。
我怎样才能做到这一点?如果有人想要一个有效的例子,Skype在聊天中就有这种机制。
答案 0 :(得分:0)
此
Text text = (Text) textArea.lookup(".text");
textArea.setPrefHeight(text.boundsInParentProperty().get().getMaxY());
有效,但不是很好,因为滚动条会不停地窃听。
答案 1 :(得分:-1)
不应该太难做到。我认为您可能需要@Override
setPreferredRowCount()
textArea
方法来根据您的需要或固定值返回行数。
这是您在任何Swing
组件上遇到的常见“问题”,例如JFrame, JPanel, JLabel, JButton
等。
同样在这些组件上也强烈建议覆盖首选方法,以便正确调整它们的大小,而不是使用setBounds
。
也许setPreferredRowCount()
方法不会更新自己,所以你可能不得不在一个循环(或一个线程,但我宁愿不)中调用它,以确保您的大小始终更新。类似的东西:
编辑:
while(inputNeeded) {
if(textArea1.textChanged) {
if(text1.length > 10) {
textArea1.setPreferredRowCount(3);
} else if(text1.length > 20) {
textArea1.setPreferredRowCount(4);
}
}
}
......等等。我的坏,你真的不必覆盖任何东西。试着使用像这样的循环。