在JavaFX(行/行)中使用TextHeight使TextArea增长

时间:2016-07-31 14:23:12

标签: java javafx textarea chat expand

我一直试图让TextArea以其内容增长,例如:

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

我已经尝试过了:

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

总是返回相同的,无论我有多少行。

textArea.getPrefRowCount()

始终返回

  

1

无论我有多少行。

我怎样才能做到这一点?如果有人想要一个有效的例子,Skype在聊天中就有这种机制。

2 个答案:

答案 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);
        }
    }
}

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