java - 如何在场景生成器的舞台上显示不同的 fxml 文件?切换场景?

标签 java javafx fxml scenebuilder scene

还有其他关于此类的教程,但它们并不是非常基本方式。他们中的大多数都有其他方面,这使得像我这样的初学者更难理解......

如何使用按钮切换舞台上的场景或 FXML 文件?

Main.Java 类

package application;
	

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("Screen 1.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }


}

Controller.java类

package application;

import javafx.fxml.FXMLLoader;

public class Controller {

	public void goToScreen2(){
		System.out.println("Going to screen2");
		
		
		
	} 
	
	public void goToScreen1(){
		System.out.println("Going to screen1");
		


		
		
	} 
}

屏幕 1 fxml 文件

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
   <children>
      <Button layoutX="203.0" layoutY="132.0" mnemonicParsing="false" onAction="#goToScreen2" text="Go to screen 2" />
   </children>
</Pane>

屏幕 2 fxml 文件

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>


<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
   <children>
      <Button layoutX="248.0" layoutY="116.0" mnemonicParsing="false" onAction="#goToScreen1" text="Go to screen 1" />
   </children>
</Pane>

最佳答案

将 Controller 存储在应用程序中,并根据需要显示关联的组件。

Main.Java 类

public class Main extends Application {
    public Controller controller1;
    public Controller controller2;
    private Stage primaryStage;

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

    @Override
    public void start(final Stage primaryStage) throws IOException {
        this.primaryStage = primaryStage;

        controller1 = load("Screen 1.fxml");
        controller2 = load("Screen 2.fxml");

        primaryStage.setTitle("Hello World");
        controller1.goToScreen1();
        primaryStage.show();
    }

    public Controller load(final String name) throws IOException {
        final FXMLLoader loader = new FXMLLoader(getClass().getResource(name));
        loader.load();
        final Controller controller = loader.getController();
        controller.configure(this, new Scene(loader.getRoot()));
        return controller;
    }

    public void show(final Scene scene) {
        primaryStage.setScene(scene);
    }
}

Controller.java类

public class Controller {
    private Main application;
    private Scene scene;

    public void configure(final Main application, final Scene scene) {
        this.application = application;
        this.scene = scene;
    }

    public void show() {
        application.show(scene);
    }

    public void goToScreen2() {
        application.controller2.show();
    }

    public void goToScreen1() {
        application.controller1.show();
    }
}

关于java - 如何在场景生成器的舞台上显示不同的 fxml 文件?切换场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40453739/

相关文章:

java - 有没有办法注释代码块的每一行?

java - 将 scenebuilder UI fxml 与 javafx 应用程序连接

java - OpenLdap 服务器,Spring ldap 用户绑定(bind) (inetOrgPerson) 没有这样的对象

JavaFX 虚拟键盘闪烁

java - Java参数化构造函数和参数化接口(interface)的Scala编译错误

java - 按住箭头键时 TableView 会变得困惑

java - 调整 SplitPane 的大小以适合 AnchorPane 父级

java - Android中使用Apache POI读取excel文件的依赖

java - 在 Eclipse 中失去焦点时,如何阻止 TreeView 展开/折叠图标褪色?

java - 如何将 HashMap 添加到 ArrayList