我正在寻找关于为什么我们应该使用一种方法而不是另一种方法来加载和显示新的fxml阶段的反馈。
大多数时候,我都会看到教程,这样可以显示从一个单独的类完成的一个阶段的加载。但是,它也可以在fxml文件的控制器内部完成,我个人认为这样做更干净,更易于管理。
考虑以下内容
主类
班级:
public class Main extends Application {
@Override
public void start(Stage stage) throws Exception {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Layout.fxml"));
loader.setController(new LayoutController());
stage.setScene(new Scene(loader.load()));
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
这似乎是流行的方法。它创建控制器并设置
Scene
然后显示出来。
但是,如果我们改变
start()
方法改为:
@Override
public void start(Stage stage) throws Exception {
LayoutController controller = new LayoutController();
controller.showStage();
}
并将fxml加载代码移到
LayoutController
构造,结果相同:
public class LayoutController {
@FXML
private Label label;
private Stage stage = new Stage();
public LayoutController() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Layout.fxml"));
loader.setController(this);
stage.setScene(new Scene(loader.load()));
} catch (IOException e) {
e.printStackTrace();
}
}
public void showStage() {
this.stage.showAndWait();
}
}
我在这里看到的好处是视图和逻辑之间有更多的分离。关于
布局控制器
其关联的fxml文件包含在一个位置。
所以我的问题是:第二种方法有什么问题?我认为这不是标准方法的原因,但我看不到任何缺点。
这样的问题是否更适合代码审查?我不是真的在征求意见,因为似乎有一个一般的“规则”是第一种方法被使用。