在 JavaFX 中使用 TextHeight 增加 TextArea (Rows/Lines)

Make a TextArea grow with TextHeight in JavaFX (Rows/Lines)

我一直在尝试让 TextArea 随其内容一起增长,例如:

文本区域中有一行,现在用户继续书写并到达文本区域的右边界并且文本换行,现在他确实有第二行(通过简单地在内部使用'\n'不换行),我现在希望文本字段再增长一行的高度。

我已经尝试过的:

这个

Text text = textArea.lookup(".text").getLocalBounds.getHeight()

总是returns相同,无论我有多少行。

这个

textArea.getPrefRowCount()

总是returns

1

不管我有多少台词。

我怎样才能做到这一点?如果有人想要一个工作示例,Skype 在其聊天中有这种机制。

做起来应该不会太难吧。我认为您可能必须 @Override textAreasetPreferredRowCount() 方法到 return 基于您需要的行数或固定值。

这是一个常见的 "issue" 你可以在任何 Swing 组件上遇到,例如 JFrame, JPanel, JLabel, JButton

同样在这些组件上,强烈建议覆盖 preferred 方法以正确调整它们的大小,而不是使用 setBounds.

也许 setPreferredRowCount() 方法不会自行更新,因此您可能必须在循环中调用它(或线程,但我宁愿不调用)以确保您的尺寸始终更新。类似于:

编辑:

while(inputNeeded) {
    if(textArea1.textChanged) {
        if(text1.length > 10) {
            textArea1.setPreferredRowCount(3);
        } else if(text1.length > 20) {
            textArea1.setPreferredRowCount(4);
        }
    }
}

...等等。我的错,你真的不必覆盖任何东西。尝试使用这样的循环。

这个

Text text = (Text) textArea.lookup(".text");
textArea.setPrefHeight(text.boundsInParentProperty().get().getMaxY());

能用,但不是很好,因为滚动条总是有问题。