例如这段代码:
public class VendorManagementSystem extends Application {
@Override
public void start(Stage primaryStage) {
VBox main_pane = new VBox(15);
main_pane.setPadding(new Insets(10,10,10,10));
Button addItem_mainPane = new Button("Add Item");
addItem_mainPane.setPrefWidth(120);
Button cancelation_button = new Button("Close");
cancelation_button.setPrefWidth(120);
main_pane.getChildren().addAll(addItem_mainPane,sellItem_mainPane,cancelation_button);
main_pane.setAlignment(Pos.CENTER);
Scene scene = new Scene(main_pane);
primaryStage.setHeight(450);
primaryStage.setWidth(650);
primaryStage.setTitle("Vendor Management System");
primaryStage.setScene(scene);
primaryStage.show();
然后我想在另一堂课中将其分开:
cancelation_button.setOnAction(e->{
primaryStage.close();
});
我尝试创建另一个类并继承javafx类以在另一个类中创建实现:
public class ControlsImplementation extends VendorManagementSystem{
cancelation_button.setOnAction(e->{
primaryStage.close();
});
}
但是我无法解决这些错误:
错误:<标识符>预期 cancelation_button.setOnAction(E-> {
错误:<标识符>预期 cancelation_button.setOnAction(E-> {
错误:非法启动类型 });
有关如何分离javafx gui结构和控件实现的任何建议。
答案 0 :(得分:1)
您可以为视图和控制器创建单独的类。您应该使这两个独立于Application
类,它负责启动应用程序并管理其生命周期:
查看课程:
public class View extends VBox {
private final Controller controller ;
public View(Controller controller) {
this.controller = controller ;
buildUI();
}
private void buildUI() {
setPadding(new Insets(10,10,10,10));
Button addItem = new Button("Add Item");
addItem.setPrefWidth(120);
Button cancelation = new Button("Close");
cancelation.setPrefWidth(120);
cancelation.setOnAction(e -> controller.exit(this));
getChildren().addAll(addItem, /* sellItem, */ cancelation);
setAlignment(Pos.CENTER);
}
}
控制器类:
public class Controller {
public void exit(Node view) {
view.getScene().getWindow().hide();
}
}
申请类:
public class VendorManagementSystem extends Application {
@Override
public void start(Stage primaryStage) {
Controller controller = new Controller();
View view = new View(controller);
Scene scene = new Scene(view);
primaryStage.setHeight(450);
primaryStage.setWidth(650);
primaryStage.setTitle("Vendor Management System");
primaryStage.setScene(scene);
primaryStage.show();
}
}
显然,在实际应用程序中,除了视图和控制器类之外,还有一个数据模型。
您可以根据您想要的设置方式改变视图与控制器之间的关系,例如:您可以为控制器提供对视图的引用,在视图中定义getCancelationButton()
方法,并在控制器中调用getCancelationButton().setOnAction(...)
,而不是为视图提供对控制器的引用。它只取决于您尝试实现的MVC的哪种变体。