You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX点击New按钮替换旧文本:新文本叠加问题求助

点击按钮文本叠加不更新的解决办法

问题根源

你每次点New按钮时,都会新建一个Text对象并加到rootM容器里——之前创建的旧Text还在容器里没被移除,自然会叠加显示。你写的setText(null)只是清空当前刚创建的这个Text的内容,马上又设了新文本,根本没碰旧的Text,当然没用。

最优解决方案

把Text对象的创建移到按钮事件外面,只初始化一次,每次点击只更新它的文本内容:

// 初始化时创建一次Text,设置好布局和字体,添加到容器
Text mText = new Text();
mText.setLayoutX(300);
mText.setLayoutY(200);
mText.setFont(Font.font("Verdana", 50));
rootM.getChildren().add(mText);

buttonNew.setOnAction(ae -> {
    int randomM1 = (int) (Math.random() * 11);
    int randomM2 = (int) (Math.random() * 11);
    System.out.println(randomM1 + " x " + randomM2);
    System.out.println(randomM1 * randomM2);
    
    // 直接更新已有Text的内容,无需新建对象
    mText.setText(randomM1 + " x " + randomM2);
}); 

备选方案(不推荐,效率低)

如果非要每次新建Text,那得先把容器里的旧Text删掉再添加新的:

buttonNew.setOnAction(ae -> {
    int randomM1 = (int) (Math.random() * 11);
    int randomM2 = (int) (Math.random() * 11);
    System.out.println(randomM1 + " x " + randomM2);
    System.out.println(randomM1 * randomM2);
    
    // 移除容器里所有Text类型的组件
    rootM.getChildren().removeIf(node -> node instanceof Text);
    
    // 新建Text并添加到容器
    Text mText = new Text(randomM1 + " x " + randomM2);
    mText.setLayoutX(300);
    mText.setLayoutY(200);
    mText.setFont(Font.font("Verdana", 50));
    rootM.getChildren().add(mText);
}); 

内容的提问来源于stack exchange,提问作者Juju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:55:19