JTable Əlavə edildikdən sonra cədvəl modelini yeniləmək, silmək və ya məlumatları yeniləmək.

Bu mənim jTable

 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; } 

Verilənlər bazasındakı məlumatları almaq və masa modelinə salmaq üçün bu üsulu çağırıram.

 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); } 

Hal-hazırda bu metodu masa məlumatlarını yenilədikdən sonra masa yeniləmək üçün istifadə edirəm. İlk masanı təmizləyəcəyəm

 DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel(); tableModel.setRowCount(0); 

jTable-ı yeniləmək üçün yenə masa modeli yenidən qurulur. Amma düşündüm ki, bunu etmək üçün daha yaxşı bir üsul və ya daha yaxşı bir yol varmı?

76
05 июля '10 в 14:34 2010-07-05 14:34 user236501 05 iyul 'da saat 14:34' də təyin olundu. 2010-07-05 14:34
@ 6 cavablar

JTable məlumatlarınızda dəyişikliklər barədə xəbərdar etmək istəyirsinizsə, tableModel.fireTableDataChanged()

Sənədlərdə:

Bütün dinləyicilərə, masanın satırdakı bütün hüceyrə dəyərlərinin dəyişə biləcəyini bildirir. Satırların sayı da dəyişdirilə bilər və JTable masanı sıfırdan yenidən düzəltməlidir. Cədvəlin strukturu (sütunlarda olduğu kimi) eynidır.

100

Biznesiniz üçün daha sürətli bir şəkildə:

  jTable.repaint(); // Repaint all the component (all Cells). 
border=0

Bir və ya bir neçə hüceyrəni dəyişdirmək üçün optimal yol:

  ((AbstractTableModel) jTable.getModel()).fireTableCellUpdated(x, 0); // Repaint one cell. 
16
04 февр. 04 Fevralda Daniel De Leon cavab verdi. 2012-02-04 00:24 '12 at 0:24 2012-02-04 00:24

cəhd edin

 public void setUpTableData() { DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();  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);  tableModel.fireTableDataChanged();  } 
5
31 мая '13 в 12:34 2013-05-31 12:34 cavab 31.05.2013 tarixində Achille tərəfindən 12:34 2013-05-31 12:34
 DefaultTableModel dm = (DefaultTableModel)table.getModel(); dm.fireTableDataChanged(); // notifies the JTable that the model has changed 
2
21 авг. cavab Sumit Singh 21 aug tərəfindən verilir . 2012-08-21 10:29 '12 at 10:29 2012-08-21 10:29

java.util.Observablejava.util.Observer istifadə etmək daha yaxşı olardı ki, masanın yenilənməsinə səbəb olacaq?

1
16 окт. Cavab 16 oktyabrda verilir . 2011-10-16 12:38 '11 'da 12:38' də 2011-10-16 12:38

Mən bunu Jtable-də gördüm, onun avtomatik bərpası 300 ms sonra;

 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 }); }} 

Şübhə etmirəm ki, o, 500-dən çox, məsələn, çoxsaylı obyektlər ilə uğur qazanacaq, başqa bir halda, sizin sinifdə TableModelListener tətbiq etməkdir, amma mən onu necə istifadə etməyini başa düşmədim. http://download.oracle.com/javase/tutorial/uiswing/components/table.html#modelchange səhifəsinə baxın

-2
21 мая '11 в 18:44 2011-05-21 18:44 Cavab nkvnkv 21 may 2011 -ci il saat 18:44 'da verilir 2011-05-21 18:44

haqqında digər suallar və ya bir sual