我是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();
}
}
这是正确的方法吗?它按我想要的方式工作,但我不确定它是否应该是这样的:)