【问题标题】:JavaFX separating event handling from controller classJavaFX 将事件处理与控制器类分开
【发布时间】:2016-04-16 12:08:03
【问题描述】:

在我看来,在 javafx 中处理控制器类中的事件很困难,特别是当要处理的事件数量增加时。所以,我试图将事件处理与控制器类分开。例如,在复杂的应用程序中,事件是如何管理的?

那么,我们举个例子:

view.fxml 文件:

    <?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>


<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Button layoutX="233.0" layoutY="175.0" mnemonicParsing="false" onAction="#button1Clicked" text="Button1" />
      <Button layoutX="233.0" layoutY="225.0" mnemonicParsing="false" onAction="#button2Clicked" text="Button2" />
      <Button layoutX="233.0" layoutY="279.0" mnemonicParsing="false" onAction="#button3Clicked" text="Button3" />
   </children>
</AnchorPane>

还有控制器类:

public class AccountController implements Initializable {
       @FXML
    private Button button1;
    @FXML
    private Button button2;
    @FXML
    private Button button3;

    private boolean formSaved ;
    private boolean formUpdated ; 

    public void initialize(URL location, ResourceBundle resources) {

    }

    // Event handling 

    @FXML
    public button1Clicked(){
       // Handle button 1 clicked
    }

    @FXML
    public button2Clicked(){
    // Handle button 2 clicked
    }

    @FXML
    public button3Clicked(){
    // Handle button 3 clicked
    }


}

我需要在控制器类 button1Clicked() 中移动逻辑... 并将其放在另一个类中,例如:

public class eventManager {
    // form state
    // Event handling ..etc
}

任何想法,javafx 框架,设计模式......等等。 还是您建议将所有东西都放在控制器类中? 复杂应用程序中事件处理的最佳实践是什么?

【问题讨论】:

  • 事件处理属于控制器类,恕我直言(这确实是控制器类的主要目的)。如果控制器类变得太大,将 FXML 拆分为多个文件;每个都有自己的控制器。这样一来,您就可以使所有事情都易于管理。

标签: java design-patterns javafx event-handling


【解决方案1】:

例如,您可以在这篇博文JavaFx Layers中看到层的样子

这是基于设计模式的解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多