當 JTable 內的資料有所變化時,JTable 要如何得知並做出相應的變化呢?其實 JTable implements TableModelListener,而且執行 setModel 時,就會做 dataModel.addTableModelListener(this)。所以只要執行 AbstractTableModel.fireTableDataChanged() 就可以即時變更 table 的內容。或是直接執行 JTable.tableChanged(null) 也可以。

// JTable.java public void setModel(TableModel dataModel) { ...... dataModel.addTableModelListener(this); ...... } public JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) { ...... if (dm == null) { dm = createDefaultDataModel(); } setModel(dm); tableChanged(new TableModelEvent(dataModel, TableModelEvent.HEADER_ROW)); firePropertyChange("model", old, dataModel); ...... } public void tableChanged(TableModelEvent e) { if (e == null || e.getFirstRow() == TableModelEvent.HEADER_ROW) { ...... resizeAndRepaint(); return; } ...... } // AbstractTableModel.java public void fireTableDataChanged() { fireTableChanged(new TableModelEvent(this)); } public void fireTableChanged(TableModelEvent e) { ...... if (listeners[i]==TableModelListener.class) { ((TableModelListener)listeners[i+1]).tableChanged(e); } ...... }
創作者介紹

邱小新の工作筆記

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()