如何分离JavaFXGUI结构及其实现?

如何分离JavaFXGUI结构及其实现?,java,javafx,Java,Javafx,例如,此代码: 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_mainPan

例如,此代码:

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();

}); 
public class ControlsImplementation extends VendorManagementSystem{

   cancelation_button.setOnAction(e->{

              primaryStage.close();

        });
我尝试创建另一个类并继承javafx类以在另一个类中创建实现:

cancelation_button.setOnAction(e->{
      primaryStage.close();

}); 
public class ControlsImplementation extends VendorManagementSystem{

   cancelation_button.setOnAction(e->{

              primaryStage.close();

        });
}

但它不起作用我犯了这些错误:

错误:应为 取消按钮。设置操作(e->{

错误:应为 取消按钮。设置操作(e->{

错误:类型的开头非法 }))


任何关于如何分离javafx gui结构和控件实现的建议。

您可以为视图和控制器创建单独的类。您应该使这两个类独立于负责启动应用程序和管理其生命周期的
应用程序
类:

视图类:

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变体。

这些都是编译错误。这只是意味着您的语法错误。(没有人能够在实际看到您编写的代码之前帮助您修复它们。)这与编译器错误无关,我的想法是如何将gui结构和控件实现分离@James_DSo您的问题的开始部分是什么“我试图创建另一个类并继承javafx类…”是否包括?我假设您认为这将是一种帮助您实现您想要做的事情的方法(尽管我不确定如何实现)如果不是这样的话,为什么会有这部分问题?我只是想提一下我尝试了什么却没有结果。@James_Db但你所说的是你尝试了一些东西,但没有效果。大概你想让它起作用:我的意思是,除非你向我们展示cod,否则没有人能帮你解决它这是行不通的。你到底想做什么根本不清楚:你说你想把一些代码分成另一个类,但你说你想移动的代码实际上不是你当前拥有的代码的一部分。(而且不清楚这些代码应该做什么。)你需要澄清这个问题。