Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何加载或刷新jTable';每次我向ArrayList对象添加新数据时_Java_Swing_Jtable - Fatal编程技术网

Java 如何加载或刷新jTable';每次我向ArrayList对象添加新数据时

Java 如何加载或刷新jTable';每次我向ArrayList对象添加新数据时,java,swing,jtable,Java,Swing,Jtable,每次我向arrayList插入新的数据集时加载/刷新jTable 我已经试过了我在评论中的那些台词,但仍然没有任何改变。考虑到将这些数据添加到ARAYLIST是在单独的类中执行的。因此,在JButt中执行的操作,因此每当我从JTrrEnter添加一组数据并将其作为对象存储到ARARYLIST中时,只有插入到ARARYLIST中的第一组列和行才是JTALE中唯一显示的数据。尽管我在两次单击jButton后插入的第二组数据保存到了arrayList,但jTable甚至没有刷新或加载我插入的新数据。任

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

我已经试过了我在评论中的那些台词,但仍然没有任何改变。考虑到将这些数据添加到ARAYLIST是在单独的类中执行的。因此,在JButt中执行的操作,因此每当我从JTrrEnter添加一组数据并将其作为对象存储到ARARYLIST中时,只有插入到ARARYLIST中的第一组列和行才是JTALE中唯一显示的数据。尽管我在两次单击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<>();
 // }
 // ------------------------
//执行了按钮操作
DefaultTableModel tableModel=(DefaultTableModel)MyJTable.getModel();
tableModel.fireTableDataChanged();
//tableModel.setRowCount(0);
//tableModel.repaint();
//int rowCount=tableModel.getRowCount();
//对于(int i=rowCount-1;i>=0;i--){
//tableModel.removeRow(i);
//}
Object[][]displayOnTable=新对象[Data.Data.size()][4];
对于(int x=0;x
我已经试过了我在评论中的那些台词,但仍然没有任何改变

我们从简单的事情开始

在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。无需创建二维阵列。您只需遍历ArrayList,一次向模型添加一行数据。然后表将自动重新绘制()本身


当然,只有在ArrayList中有数据的情况下,这才有效。

请澄清您的问题和代码,因为它有点混乱且难以阅读。最好创建并发布一个有效的程序,以便我们自己测试您的代码。和可以帮助您做到这一点。旁注:您无需对DefaultTableModel对象调用
.fireTableDataChanged()
,因为该对象在其数据发生更改时会在内部进行调用,这就是它的工作原理。模型本身负责通知侦听器更改。