1

因此,我已经使用 JavaFX 练习了一段时间,虽然我喜欢它,但我发现我的应用程序的大小正在增长——尤其是在我的 FXML 控制器的代码行数方面。

现在,我的应用程序中每个场景的典型包如下所示:

MyFXML.fxml

MyFXMLController.java

MyDataModel.java

例如,我有一个表单,它从文本字段、组合框和单选按钮中获取一些信息。当按下按钮时,表单信息会保存到数据库中,并且会立即在 tableview 中更新。

表格视图还允许删除和更新显示的信息。

只有几个组件(大约 10 个),我有一个大约 550 行长的控制器类文件,其中大约 100 行被注入(@FXML)占用,并且导入和增长!

理想情况下,我的应用程序将具有多种这些不同类型的表单,并且每个表单都有一个控制器。数据库查询都是不同的,因此还不能引用将它们抽象出来。此外,tableview 的事件侦听器通常需要比其他组件更长的 javafx 代码。

我只是觉得在 javafx 中构建 GUI 有比我正在做的更好的方法,并且想知道是否有某种参考可以查找?

我已经阅读了关于单一责任原则的其他 stackoverflow 答案。如果下面的代码有任何提示,我的应用程序只会创建一个新员工并允许更新信息。所以我很困惑我的课程是否过于文件或者这对于 GUI 编程是否正常?

我不是在寻求编码帮助,而是在寻找有关如何改进 javafx 中的 GUI 编程的建议。

谢谢!

--

FWIW,这是示例控制器文件的样子

package myApp.staff;

//30 something lines of imports...

public class NewStaffMemberController implements Initializable {

    //80 something lines of private variables and @FXML injections

    public void setConn(Connection aConn) {
        conn = aConn;

        wrapGenderRadioButtons();

        populateDates();

        populateStaffTypeComboBox();

        populateDepartmentComboBox();

        populateStaffTable();
    }

    private void wrapGenderRadioButtons() {
        //4 lines
    }

    private void populateDates() {
        //25 lines
    }

    private void populateStaffTypeComboBox() {
        //20 lines
    }

    private void populateDepartmentComboBox() {
        //22 lines
    }

    private void populateStaffTable(){
        //longest at 100 lines. This code also adds the event listener for the tableview- makes it quite long!
    }

    private void editSelectedTableRow(Staff selectedstaff){
        //4 lines
    }

    @FXML
    private void selectedRadioBtnAction() {
        //1 lines
    }

    @FXML
    private void handleYearComboBoxAction() {
        //1 lines
    }

    @FXML
    private void handleMonthComboBoxAction() {
        //1 lines
    }

    @FXML
    private void handleDayComboBoxAction() {
        //1 lines
    }

    @FXML
    private void staffTypeComboBoxAction() {
        //1 lines
    }

    @FXML
    private void departmentComboBoxAction() {
        //1 lines
    }

    @FXML
    private void btnGenerateStaffId() {
        //36 lines
    }

    @FXML
    private void btnSaveInformation(){
        13 lines
    }

    private Boolean validateData() {

        //43 lines
    }

    private void assignStaffId() {
        //12 lines

    }

    private void insertIntoDatabase() {
        //35 lines
    }

    private void updateDatabase(){
       //35 lines
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
    }
}
4

1 回答 1

2

好吧,我认为你没有选择注入你需要的 fxml 字段。但是,如果您在一个控制器中进行了多次这样的注入,那么您可能应该对您的应用程序有一个更好的概念,通过让子控制器一起工作,而不是只在一个控制器中拥有所有东西。一个视图并不意味着一个控制器。您可以拥有一个视图和多个控制器,并拥有自己的视图

于 2013-06-29T22:34:29.417 回答