0

あるJTableから別のJTableにオブジェクトを追加していますが、デバッグを通じて、CustomTableModelでオブジェクトがオブジェクトのリストに追加されていることがわかります。追加した最初のオブジェクトのみが新しいJTableに表示されます。

したがって、TableModelに多くのオブジェクトを追加できますが、JTableに表示されるのは最初のオブジェクトだけです。

これが私のaddメソッドです:

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

    }
4

3 に答える 3

1

テーブルリスナーに変更を通知する必要があります。たとえば、AbstractTableModelでfireTableRowsInserted()またはfireTableRowsDeleted()を呼び出します。

于 2011-03-08T07:13:22.427 に答える
1

コードを正しく理解していれば、アイテムを移動するたびに新しいモデルを設定していることになります。アイテムを追加/削除するときは、モデルを保持し、対応するfireXxx()メソッドを呼び出す必要があります。

于 2011-03-08T07:17:17.897 に答える
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を再描画しようとします。

テーブルモデルの存在を確認する必要がある理由がわかりません。テーブルに行が含まれていない場合でも、常にテーブルモデルを使用してテーブルを作成して表示する必要があります。

于 2011-03-08T16:11:00.890 に答える