这是我第一次使用JTable。我通过DAO模式从数据库中提取数据,将其保存在集合中,读取该集合并用它填充我的JTable。但是,我也使用MVC模式,并且不知道如何正确更新我的视图,因此添加到JTable的数据实际显示出来。我已经通过Observer或TableModelListener阅读了有关如何做到这一点的方法(我不打算讨论哪种方法可以使用)。但我找不到一个完整的实现或对工作的TableModelListener的深入解释,Oracle文档从来没有对我有多大帮助。
有人向我解释一下如何正确地实现一个TableModelListener,以便在所有数据写入JTable后更新我的视图吗?
这是我的AbstractTableModel类:
public class AbstractTableModel extends DefaultTableModel{
/**
*
*/
private static final long serialVersionUID = -7354466553311529134L;
private static Logger logger = Logger.getLogger(AbstractTableModel.class);
private static String col[] = { "Table", "UpdateCols", "AlterAuth",
"DeleteAuth", "IndexAuth", "InsertAuth", "SelectAuth", "UpdateAuth" };
private static DefaultTableModel tableModel = new DefaultTableModel(null, col);
private static JTable table = new JTable(tableModel);
public static JTable updateTable(DatenbankDaoImpl db) throws SQLException, IOException {
table.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
logger.debug(e);
}
});
while (table.getRowCount() > 0) {
((DefaultTableModel) table.getModel()).removeRow(0);
}
for (DatenbankBean db1 : db.getDatenbank()) {
String table = db1.getTable();
String updatecols = db1.getUpdatecols();
String alterauth = db1.getAlterauth();
String deleteauth = db1.getDeleteauth();
String indexauth = db1.getIndexauth();
String insertauth = db1.getInsertauth();
String selectauth = db1.getSelectauth();
String updateauth = db1.getUpdateauth();
Object[] data = {table, updatecols, alterauth, deleteauth, indexauth, insertauth, selectauth, updateauth};
tableModel.addRow(data);
logger.debug("AbstractTableModel: " + data.toString());
}
// table.repaint();
return table;
}
}
答案 0 :(得分:1)
这篇文章怎么解释它的每一部分并且也是可执行的?
Oracle on How to Write a Table Model Listener
以下是基本部分:
在实例化时,每个JTable对象都传递一个表模型对象,该对象管理它显示的数据。默认情况下,如果未指定自定义TableModel对象,则JTable对象将继承DefaultTable对象,但默认情况下,此模型仅管理字符串。要处理对象,执行计算或从数据库或其他程序检索数据,您必须设计自己的自定义TableModel对象,该对象实现TableModel接口。有关详细信息,请参阅创建表模型。
要检测由表模型对象管理的数据的更改,JTable类需要实现TableModelListener接口,调用addTableModelListener()来捕获事件,然后覆盖tableChanged()以响应侦听器事件。有关详细信息,请参阅侦听数据更改