更新 GUI 而不是新场景

Updating GUI instead of new scene

我目前有

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

    @Override
    public void start(Stage stage) throws Exception {
        String dd = "Hello";
        
        
        stage.setTitle("Greetings");  //creates title
        
        button_roll = new Button("Roll");
        
        StackPane layout1 = new StackPane();
        layout1.getChildren().add(button_roll);
        
        Scene scene1 = new Scene(layout1, 600, 600);
        stage.setScene(scene1);

        Label mylab = new Label();
        mylab.setText(dd);
        Scene scene2 = new Scene(mylab, 600, 600);
        
        
        button_roll.setOnAction(e -> stage.setScene(scene2));
       
        stage.show();
      
    }

我的代码当前将“Hello”作为新场景显示到场景中。 我想知道是否有办法只更新 scene1 以显示文本,而不是创建一个只有文本的全新场景。

我想做的事情有术语吗?如果有的话是什么? 任何帮助都会很棒!

我不熟悉 javaFX,但也许你应该尝试 EventHandler/ActionEvent:

   button_roll.setOnAction(new EventHandler<ActionEvent>() {
      @Override
      public void handle(ActionEvent event) {
        mylab.setText("Hello");
      }
    });

您的问题是您从未将 Label 添加到 Scene。将根节点设置为 StackPane 会将 LabelButton 相互堆叠。您需要将 StackPane 替换为 VBoxHBox 或更合适的 Node。代码中的注释。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class App extends Application
{
    @Override
    public void start(Stage stage) throws Exception
    {
        String helloString = "Hello";//String use in the lable once the button is pressed.
        Label lblHello = new Label();//Label that will show helloString once the button is pressed.

        Button btnRoll = new Button("Roll");//The button that will trigger the action to change the label from empty string to helloString.
        btnRoll.setOnAction((t) -> {//Set the button's action
            lblHello.setText(helloString);//set the label's text to helloString.
        });

        VBox vbLayoutRoot = new VBox(lblHello, btnRoll);//The root layout is a VBox. Add the label and the btn to the root layout.
        Scene scene = new Scene(vbLayoutRoot, 600, 600);//Add the root layout to the scene.
        stage.setScene(scene);//Set the scene.
        stage.setTitle("Greetings");  //creates title
        stage.show();//Show the stage.
    }

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

你应该这样做:-

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

@Override
public void start(Stage stage) throws Exception {
    String dd = "Hello";
    stage.setTitle("Greetings");  //creates title

    Button button_roll = new Button("Roll");

    StackPane layout1 = new StackPane();
    layout1.getChildren().add(button_roll);

    Scene scene1 = new Scene(layout1, 600, 600);
    stage.setScene(scene1);

    Label mylab = new Label();
    mylab.setText(dd);


    button_roll.setOnAction(e -> {
        layout1.getChildren().clear();
        layout1.getChildren().add(mylab);
    });

    stage.show();

}