Swing で MVC パターンを実装する方法を学び始めています。モデル内のデータに関しては混乱しています。
私がやっているアプリケーションには、いくつかの JTextFields があります。フィールドのデータ セットは JTable から取得されます。選択が変更されたときに、選択された行のデータがそれぞれのテキストフィールドに反映されるようListSelectionListener
に、コントローラーにそのjtable(ビュー内)に追加しました
public void transferTableDataToFields(){
if(tblProduct.getSelectedRows().length != 0){
int selRow = tblProduct.getSelectedRow();
txtID.setText(tblProduct.getValueAt(selRow, 0).toString());
txtName.setText(tblProduct.getValueAt(selRow, 1).toString());
txtDescIn.setText(tblProduct.getValueAt(selRow, 2).toString());
txtSupplier.setText(tblProduct.getValueAt(selRow, 4).toString());
txtPrice.setText(tblProduct.getValueAt(selRow, 5).toString());
}
}
私の質問は、私はそれを正しい方法で行っていますか? ビューのテキストフィールドに対応するモデルのフィールドを定義し、コードをコントローラーに変更してモデルのフィールドをビューのjtableの値に設定し、モデルがプロパティ変更通知をリスナーに送信するようにし、リスナーにプロパティの変更イベントに基づいてビューのメソッドを更新しますか?
このアプローチに関する私の問題は、ビューには、jtable から選択された行を返すメソッドが必要であり、少し見苦しいことです。
編集
@trashgodこれが私が言っていることです。
私の TableModel 実装内で、ここにデータを入力する方が良いですか?
public MyTableModel extends AbstractTableModel{
List<Row> data;
Row header;
public MyTableModel(){
initializeData();
}
public void initializeData{
//query database here then put it in the list
}
//other methods to implement e.g. getvalueAt(int x, inty){data.get(x).get(y);}
}
こうやって作った方がいいの?現在、メインモデルにテーブルのデータを保存して入力しているため(ビューに対応するテキストフィールドを持つフィールドも含まれていSelectedRow
ます)、データを自分JTable
のモデルに渡します。