Ini adalah jTable saya
private JTable getJTable() {
String[] colName = { "Name", "Email", "Contact No. 1", "Contact No. 2",
"Group", "" };
if (jTable == null) {
jTable = new JTable() {
public boolean isCellEditable(int nRow, int nCol) {
return false;
}
};
}
DefaultTableModel contactTableModel = (DefaultTableModel) jTable
.getModel();
contactTableModel.setColumnIdentifiers(colName);
jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
return jTable;
}
Saya akan memanggil metode ini untuk mengambil data dari database dan memasukkannya ke dalam model tabel
public void setUpTableData() {
DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
ArrayList<Contact> list = new ArrayList<Contact>();
if (!con.equals(""))
list = sql.getContactListsByGroup(con);
else
list = sql.getContactLists();
for (int i = 0; i < list.size(); i++) {
String[] data = new String[7];
data[0] = list.get(i).getName();
data[1] = list.get(i).getEmail();
data[2] = list.get(i).getPhone1();
data[3] = list.get(i).getPhone2();
data[4] = list.get(i).getGroup();
data[5] = list.get(i).getId();
tableModel.addRow(data);
}
jTable.setModel(tableModel);
}
Saat ini saya menggunakan metode ini untuk menyegarkan tabel setelah memperbarui data tabel. Saya pertama-tama akan membersihkan meja
DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
tableModel.setRowCount(0);
lalu merestrukturisasi model tabel lagi sehingga akan menyegarkan jTable. Tetapi saya berpikir apakah ada praktik terbaik atau cara yang lebih baik untuk melakukan itu?
DefaultTableModel.addRow
seharusnya sudah menangani itu ... Bukankah tabel Anda di-refreshaddRow
?setValueAt
,DefaultTableModel
aktifkan acara tersebut.javax.swing.table.AbstractTableModel
, karena antarmukaTableModel
tidak memiliki metode yang disebutkan di atasCara tercepat untuk kasus Anda adalah:
jTable.repaint(); // Repaint all the component (all Cells).
Cara yang dioptimalkan ketika satu atau beberapa sel berubah:
((AbstractTableModel) jTable.getModel()).fireTableCellUpdated(x, 0); // Repaint one cell.
sumber
coba ini
public void setUpTableData() { DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel(); /** * additional code. **/ tableModel.setRowCount(0); /**/ ArrayList<Contact> list = new ArrayList<Contact>(); if (!con.equals("")) list = sql.getContactListsByGroup(con); else list = sql.getContactLists(); for (int i = 0; i < list.size(); i++) { String[] data = new String[7]; data[0] = list.get(i).getName(); data[1] = list.get(i).getEmail(); data[2] = list.get(i).getPhone1(); data[3] = list.get(i).getPhone2(); data[4] = list.get(i).getGroup(); data[5] = list.get(i).getId(); tableModel.addRow(data); } jTable.setModel(tableModel); /** * additional code. **/ tableModel.fireTableDataChanged(); /**/ }
sumber
DefaultTableModel dm = (DefaultTableModel)table.getModel(); dm.fireTableDataChanged(); // notifies the JTable that the model has changed
sumber
Bukankah lebih baik menggunakan
java.util.Observable
danjava.util.Observer
itu akan menyebabkan tabel diperbarui?sumber
Saya melakukannya seperti ini di Jtable saya dengan autorefreshing setelah 300 ms;
DefaultTableModel tableModel = new DefaultTableModel(){ public boolean isCellEditable(int nRow, int nCol) { return false; } }; JTable table = new JTable(); Timer t = new Timer(300, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { addColumns(); remakeData(set); table.setModel(model); } }); t.start(); private void addColumns() { model.setColumnCount(0); model.addColumn("NAME"); model.addColumn("EMAIL");} private void remakeData(CollectionType< Objects > name) { model.setRowCount(0); for (CollectionType Objects : name){ String n = Object.getName(); String e = Object.getEmail(); model.insertRow(model.getRowCount(),new Object[] { n,e }); }}
Saya ragu itu akan berhasil dengan sejumlah besar objek seperti lebih dari 500, hanya cara lain adalah dengan mengimplementasikan TableModelListener di kelas Anda, tetapi saya tidak mengerti bagaimana menggunakannya dengan baik. lihat http://download.oracle.com/javase/tutorial/uiswing/components/table.html#modelchange
sumber