在JavaFX(行/行)中使TextArea随TextHeight一起增长



我一直在努力让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 textAreasetPreferredRowCount()方法来根据您的需要或固定值返回行数。

这是您在任何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);
        }
    }
}

等等。糟糕的是,你真的不必凌驾于任何事情之上。试着使用这样的循环。

最新更新