Почему JTables не показывает дополнения к ним? - PullRequest
0 голосов
/ 08 марта 2011

Я добавляю объекты из одной 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 ]

1 голос
/ 08 марта 2011

Если я правильно понимаю ваш код, вы устанавливаете новую модель при каждом перемещении элемента. Вы должны сохранить модель и вызывать соответствующие методы fireXxx () при добавлении / удалении элементов.

1 голос
/ 08 марта 2011
public void insertRow(int row, Physical_Package rowData)     
{
         modelData.add(row-1, rowData);
         fireTableRowsInserted(row, row);
         this.fireTableDataChanged();
} 

Так много для копирования кода из рабочей TableModel, которую я дал вам вчера. Это не тот код, который я тебе дал.

  1. Я не использовал fireTableDataChanged
  2. Я не использовал "row - 1" в методе add (...). Конечно, метод fireTableRowsInserted (...) не будет работать, если вы добавите строку в позицию 0, а затем сообщите обновленной таблице, что вы вставили строку 1. Таблица попытается перекрасить строку 1.

Не понимаю, зачем вам нужна проверка существования табличной модели. Вы всегда должны создавать и отображать таблицу с моделью таблицы, даже если таблица не содержит строк.

1 голос
/ 08 марта 2011

Вы должны сообщить слушателям таблицы об изменениях, см., Например, вызовы fireTableRowsInserted () или fireTableRowsDeleted () в AbstractTableModel

...