JavaFX加载fxml文件中的一个取决于窗口

时间:2015-03-25 19:12:23

标签: java javafx

我是JavaFX的新手......直到现在,对于我的基本应用程序,我所有人都在同一个班级 - 主要班级。现在我想扩展我的应用并以正确的方式执行此操作,因此我想制作控制器。据我所知,我需要将我的控制器包放在FXML文件的根元素中。 在我的例子中,它是AnchorPane元素,我把这样的东西:

fx:controller="hr.controller.MainWindowController"

在这个控制器中应该注明ID和方法,对吧?通过注入我的意思是 @FXML 注释。但是我如何将它与我的Main类连接?什么应该在主类?我知道(我认为如此:P)Main应该扩展Application类。所以它包含这个方法:

@Override
public void start(Stage stage) {}

在开始时我还说了什么以及我说的内容还希望能够在某些操作后加载/打开新窗口。让我们说我有文件 mainWindow.fxml 以及对控制器的上述引用。在第一个窗口中按下操作后,应该加载第二个文件 window2.fxml

你能告诉我,我该怎么做?

更新<!/强> 主要课程:

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root =     FXMLLoader.load(getClass().getResource("mainWindow.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root));
        primaryStage.setResizable(false);
        primaryStage.show();
    }

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

MainWindowController:

public class MainWindowController{

    @FXML
    private Button btnSave;

    @FXML
    private MenuBar menuBar;

    @FXML
    private MenuItem exit;

    @FXML
    public void handleAction(ActionEvent event) throws IOException {
        Stage stage = null;
        Parent root = null;
        if(event.getSource()==exit){
            stage = (Stage) menuBar.getScene().getWindow();
            root = FXMLLoader.load(getClass().getResource("window2.fxml"));
        } else {
            stage =(Stage) btnSave.getScene().getWindow();
            root = FXMLLoader.load(getClass().getResource("mainWindow.fxml"));
        }
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
}

这是正确的方法吗?它按我想要的方式工作,但我不确定它是否应该是这样的:)

0 个答案:

没有答案