JavaFX 用旧文本替换新文本,而不在场景中覆盖它

1 java eclipse javafx

我对 Java 还很陌生,现在已经是培训的第二个月了。我希望每次按下 时New,旧文本都会被删除,然后新文本就会出现。但这不起作用。我已经在互联网上进行了研究。

当我按下 时New,新文本会覆盖旧文本。我想如果我text(null)之前做了,它就会删除它。但这不起作用。

多次按下按钮后:

图像

这是我的代码:

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 = new Text();
    mText.setText(null);
    mText.setText(randomM1 + " x " + randomM2);
    rootM.getChildren().add(mText);
    mText.setLayoutX(300);
    mText.setLayoutY(200);
    mText.setFont(Font.font("Verdana", 50));
}); 
Run Code Online (Sandbox Code Playgroud)

vin*_*sce 5

Text您在每次单击按钮时都会创建一个新的,并且每次Text都会添加这个新的。rootM

当您说mText.setText(null);要清除新创建的变量的文本时mText,该文本与已添加到布局中的文本不同。

为了克服这个问题,您可以Text在事件处理程序外部定义一次变量,并在需要时更新其文本。

final Text mText = new Text();
rootM.getChildren().add(mText);
mText.setLayoutX(300);
mText.setLayoutY(200);
mText.setFont(Font.font("Verdana",50));

buttonNew.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent arg0) {
        // your code to generate random ...

        mText.setText(randomM1 + " x " + randomM2);
    }
}); 
Run Code Online (Sandbox Code Playgroud)