私はJavaFXをしばらく練習してきましたが、気に入っていますが、特にFXMLコントローラーのコードの行数に関して、アプリケーションのサイズが大きくなっていることに気付きました。
現在、アプリケーションの各シーンの典型的なパッケージは次のようになっています。
MyFXML.fxml
MyFXMLController.java
MyDataModel.java
たとえば、テキスト フィールド、コンボボックス、ラジオ ボタンから情報を取得するフォームがあります。ボタンが押されると、フォーム情報がデータベースに保存され、テーブルビューでもすぐに更新されます。
テーブルビューでは、表示されている情報の削除と更新も可能です。
わずかなコンポーネント (約 10) で、約 550 行の長さのコントローラー クラス ファイルがあり、そのうちの約 100 行がインジェクション (@FXML) とインポートと成長によって占められています。
私のアプリケーションには、理想的には、これらの異なる種類のフォームが複数あり、それぞれにコントローラーがあります。データベース クエリはすべて異なるため、まだ抽象化することはできません。また、通常、テーブルビューのイベント リスナーは、他のコンポーネントよりも javafx で長いコードを必要とします。
私がやっていることよりも、javafxでGUIを構築するためのより良いアプローチがあるように感じます.
単一責任の原則に関する他のスタックオーバーフローの回答を読みました。以下のコードがヒントである場合、私のアプリケーションは単純に新しいスタッフ メンバーを作成し、情報を更新できるようにします。私のクラスがファイルすぎるのか、それとも 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) {
}
}