我正在try 使用一个非常简单的JavaFX特性,但可能遗漏了一些东西:在已经显示的TextFlow的基础上添加一个新的Text对象.我创建了一个非常简单的工作示例:

public class TextFlowTest extends Application {

    @Override
    public void start(Stage stage) {
        TextFlow textFlow = new TextFlow(new Text("One "), new Text("Two "), new Text("Three "), new Text("Four "));
        var layout = new BorderPane(textFlow);
        layout.setOnMouseClicked(e -> {
            textFlow.getChildren().addAll(new Text("myAdd "));
        });
        Scene scene = new Scene(layout, 200, 50);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String args[]){
        launch(args);
    }
}

如果运行上面的代码并单击文本,它应该会添加一个新词:myAdd--但是它只呈现第一个字符的前几个像素.

enter image description here

我的感觉是,这与最初计算的流的宽度有关,所以我在TextFlow或包含面板上try 了requestLayout,但没有帮助.这难道不应该开箱即用吗?只需向流的子 node 添加一个新的Text node ,这是一个可观察的列表,那么流应该更新其布局吗?

推荐答案

这看起来像是一个错误(我建议报告).

有趣的是,它似乎只在BorderLayout中表现出来,而在HBox中却没有.如果您将样式添加到文本流,它也不会显示.

如果这些变通方法不可用,那么拨打textFlow.autosize()来重新计算文本流的大小似乎是可行的.因为您在注释中说您正在使用自定义面板来包含文本流,所以您可能会在自定义面板的layoutChildren()方法或类似方法中找到一个方便的位置来执行此操作.最糟糕的情况是,您可以只在事件处理程序中调用它:

    layout.setOnMouseClicked(e -> {
        textFlow.getChildren().addAll(new Text("myAdd "));
        textFlow.autosize();
    });

Java相关问答推荐

我可以在regex中的字符类中放置断言吗?

Java JAR环境(JRE)是否支持模块?

BiPredicate和如何使用它

查找最大子数组的和

Cucumber TestNG Assert失败,出现java. lang. Numbercycle异常

Spring boot:Bean和动态扩展器

Java inline Double条件和值解装箱崩溃

S的字符串表示是双重精确的吗?

Jakarta CDI强制bean构造/注册遗留事件侦听器

如何从Keyloak映射Hibernate实体中的用户

继续收到错误SQLJDBC EXCEPTION执行";org.springframework.dao.InvalidDataAccessResourceUsageException:&

如何读取3个CSV文件并在控制台中按顺序显示?(Java)

Java嵌套流查找任意值

在Java中将对象&转换为&q;HashMap(&Q)

通过/失败的参数化junit测试方法执行数

TinyDB问题,无法解析符号';上下文&

如何在Struts2中使用操作类中的结果注释重定向到不同的命名空间

Java 21内置http客户端固定运营商线程

java.lang.NoSuchMethodError:';org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream$Builder org.apache.poi-poi-ooxml-5.2.4

using case default on switch语句返回;预览特征切换中的模式匹配仅在源级别20及以上的情况下可用;