我开始学习如何在 Swing 中实现 MVC 模式。我对模型中的数据感到困惑。
在我正在做的应用程序中,我有几个 JTextField。字段中的数据集来自 JTable。我的控制器中有一个ListSelectionListener
添加到该JTable(在视图中),以便在选择更改后,所选行的数据将被反射到相应的Textfields
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
的模型中传递数据。