我一直在努力让TextArea随着它的内容而增长,例如:
文本区域中有一行,现在用户继续书写并到达文本区域的右边框,文本换行,现在他有第二行(不是简单地在内部使用"\n"换行),我现在希望文本字段增加一行的高度。
我已经尝试过了:
这个
Text text = textArea.lookup(".text").getLocalBounds.getHeight()
无论我有多少行,总是返回相同的行。
这个
textArea.getPrefRowCount()
总是返回
1
不管我有多少行。
我怎样才能做到这一点?如果有人想要一个有效的例子,Skype在聊天中就有这种机制。
此
Text text = (Text) textArea.lookup(".text");
textArea.setPrefHeight(text.boundsInParentProperty().get().getMaxY());
工作,但不是很好,因为滚动条一直有问题。
应该不太难做到。我认为您可能需要@Override
textArea
的setPreferredRowCount()
方法来根据您的需要或固定值返回行数。
这是您在任何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);
}
}
}
等等。糟糕的是,你真的不必凌驾于任何事情之上。试着使用这样的循环。