【问题标题】:Make a TextArea grow with TextHeight in JavaFX (Rows/Lines)使用 JavaFX 中的 TextHeight 使 TextArea 增长(行/行)
【发布时间】:2016-07-31 14:23:11
【问题描述】:

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

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

我已经尝试过的:

这个

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

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

这个

textArea.getPrefRowCount()

总是返回

1

不管我有多少行。

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

【问题讨论】:

  • 你测试TextArea.wrapText了吗?
  • 我已经在换行了,但这与 textareasize 无关,我想改变高度而不是宽度

标签: java javafx textarea chat expand


【解决方案1】:

这个

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

工作,但不是很好,因为滚动条一直在窃听。

【讨论】:

    【解决方案2】:

    做起来应该不会太难。我认为您可能必须 @Override textAreasetPreferredRowCount() 方法根据您的需要或固定值返回行数。

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

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

    【讨论】:

    • 按照你刚才说的,我不太确定我该做什么。
    • SetPrefferedRowCounts 接受一个整数作为参数,我对 java 的了解还不是很深,对组件的核心也不太了解
    • 好吧,它不会起作用,不是每个字体中的每个字母都具有相同的宽度,也不是每个用户在他们的系统中都有相同的字体大小,我想这样做更专业方式^^
    • 取出所有setBounds 和其他手动尺寸代码。它应该可以工作
    • 现在知道了。继续搜索:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多