为什么JTable没有向他们展示新增内容?

时间:2011-03-08 06:56:22

标签: java swing jtable tablemodel

我正在将一个JTable中的对象添加到另一个JTable中,我可以通过调试看到,在CustomTableModel中,对象被添加到对象列表中。只有我添加的第一个对象显示在新的JTable中。

所以我可以向TableModel添加许多对象,但只有第一个出现在JTable中。

这是我的添加方法:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        // TODO add your handling code here:
       if(physPackageModel != null){
        int h = secRowSeat2.getSelectedRow();
        Physical_Package pp = PpackageList.get(h);
           if(physPackageModel2 != null){
                 physPackageModel2.addRow(pp);
                 physPackageModel.removeRow(h);

           }
           else{

                    physPackageModel2 = new tableModel2();
                    physPackageModel2.addRow(pp);
                    physPackageModel.removeRow(h);



           }
        secRowSeat1.setModel(physPackageModel2);
        }
       else{
          int h = secRowSeat2.getSelectedRow();
          EventSeat es = eventSeatList.get(h);

        if(eventSeatModel2 != null){
                eventSeatModel2.addRow(es);
                eventSeatModel.removeRow(h);
        }else{

                eventSeatModel2 = new EventTableModel2();
                eventSeatModel2.addRow(es);
                eventSeatModel.removeRow(h);
           }
        secRowSeat1.setModel(eventSeatModel2);
        secRowSeat2.setModel(eventSeatModel);
        repaint();
       }

    }

如果您想查看我的自定义表型号,请告诉我.....

在customTableModel中添加和删除方法:

public void addRow(Physical_Package rowData)
    {
        insertRow(getRowCount(), rowData);
    }

    public void insertRow(int row, Physical_Package rowData)
    {
        modelData.add(row-1, rowData);
        fireTableRowsInserted(row, row);
                this.fireTableDataChanged();
    }
    public void removeRow(int row)
    {
        modelData.remove(row);
        fireTableRowsDeleted(row, row);

    }

3 个答案:

答案 0 :(得分:1)

你应该让表听众了解更改,例如在AbstractTableModel中调用fireTableRowsInserted()或fireTableRowsDeleted()

答案 1 :(得分:1)

如果我正确理解您的代码,您每次移动项目时都会设置一个新模型。 在添加/删除项目时,您应该保留模型并调用相应的fireXxx()方法。

答案 2 :(得分:1)

public void insertRow(int row, Physical_Package rowData)     
{
         modelData.add(row-1, rowData);
         fireTableRowsInserted(row, row);
         this.fireTableDataChanged();
} 

从我昨天给你的工作TableModel复制代码那么多。那不是我给你的代码。

  1. 我没有使用fireTableDataChanged
  2. 我没有在add(...)方法中使用“row - 1”。当然,如果你在位置0添加一行,然后告诉表更新你插入的第1行,fireTableRowsInserted(...)方法将不起作用。该表将尝试重新绘制第1行。
  3. 我不明白为什么你需要检查是否存在表模型。您应始终创建并显示包含表模型的表,即使该表不包含任何行。