每当我将新数据添加到ArrayList对象

时间:2019-01-12 16:34:47

标签: java swing jtable

每次我将新数据集插入arrayList时,加载/刷新jTable

已经尝试过我在评论中添加的内容,但是仍然没有任何改变。考虑到将这些数据添加到arrayList是在单独的类中执行的,所以在这里,操作是在jButton中执行的,因此每次我从jTextfields添加数据集并将其存储为Object到arrayList时,只有我插入的第一组列和行arrayList是jTable中唯一显示的数据。尽管在两次单击jButton之后插入的第二组数据已保存到arrayList,但jTable甚至没有刷新或加载我插入的新数据。任何帮助将不胜感激

//BUTTON ACTION PERFORMED
DefaultTableModel tableModel = (DefaultTableModel) MyJTable.getModel(); 
 tableModel.fireTableDataChanged();
//tableModel.setRowCount(0); 
//tableModel.repaint(); 
//int rowCount = tableModel.getRowCount();
//for(int i = rowCount -1; i >= 0; i--){
//tableModel.removeRow(i);
//}
Object[][] displayOnTable = new Object[Data.data.size()][4];
for(int x=0; x < Data.data.size(); x++){
 displayOnTable[x] = Data.data.get(x);  
    }
 MyJTable.setModel(new javax.swing.table.DefaultTableModel(
 disp,
 new String [] {
 "ID", "Name", "Gender", "Age"
 } ));          
 // --- Declared in Separated class----
 //public class Data {
 //    public static List<Object[]> data = new ArrayList<>();
 // }
 // ------------------------

1 个答案:

答案 0 :(得分:0)

  

已经尝试过我在评论中添加的内容,但是仍然没有任何改变。

从一些非常简单的事情开始。

在您的ActionListener中添加两行:

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

如果表中的数据没有任何变化,则意味着您没有对框架上可见的表的引用。因此,您需要解决此问题。

表中的数据是否清除?如果是这样,则这是一个好兆头,因为这意味着您的代码正在引用已添加到框架中的JTable的TableModel。

所以现在您可以从ArrayList添加数据。

基本逻辑是:

System.out.println( data.size() ); // to verify you actually have data in the List

for (Object[] row: data)
    model.addRow( row );

就是这样。无需创建新的TableModel。无需创建2D数组。您将简单地遍历ArrayList,一次向模型添加一行数据。然后该表将自动repaint()本身。

当然,只有在ArrayList中有数据时,这才起作用。