因此,我已经使用 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) {
}
}