2014-05-04 2 views
0

мне нужно удалить удаляемой строки из моего ArrayList ...Java - удалить выбранную строку из TableModel

private GuiIO guiIO; 
private DefaultTableModel tableModel; 
private List<Book> zoz; 


public MyGui() { 
    initComponents(); 
    this.setLocationRelativeTo(this.getRootPane()); 
    this.guiIO = new GuiIO(); 

    tableModel = new DefaultTableModel(new String[]{"Znacka", "Model", "Najazdene", "Rok vyroby", "Vykon", "Cena"}, 0); 
    this.tblTabulka.setModel(tableModel); 
    this.tblTabulka.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); 
    tblTabulka.setAutoCreateRowSorter(true); 
    TableRowSorter rowSorter = new TableRowSorter(tableModel); 
    zoz = guiIO.getAllBook(); 
} 

моя функция для удаления строки из модели:

private void btnClearActionPerformed(java.awt.event.ActionEvent evt) { 
    final int sectedRowIndex = this.tblTabulka.getSelectedRow(); 
    this.tableModel.removeRow(sectedRowIndex); 
    zoz = guiIO.getAllBook(); 
} 

public List getAllBook() { 
    List all_book = new ArrayList<Book>(); 

    for (Containerable item = this.book.getFirst(); 
      item!=null; 
      item = this.book.getNext()) 
     all_book.add(item); 
    return all_book; 
}  

, но мне нужно удалить его из моего private List zoz;

как я могу это сделать?

+0

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

ответ

3

Мне нужно удалить его из моего личного списка zoz?

zoz.remove(sectedRowIndex); // if table is not sortable 

Примечание:

  • Не инициализировать список снова после удаления выбранной строки.
  • DefaultTableModel не заселять из списка
  • поставить галочку tblTabulka.getSelectedRow() != -1 перед удалением строки ли выбрана строка или нет?

Использование Map вместо List что-то вроде

Map<String,Book> books = new HashMap<String,Book>(); 

, где вы можете сделать или идентификатор ISBN в качестве ключа.


Пример код:

button.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     // check for selected row first 
     if (tblTabulka.getSelectedRow() != -1) { 

      // get value of first cell of selected row 
      String isbn= (String)tableModel.getValueAt(tblTabulka.getSelectedRow(), 0); 
      books.remove(isbn); 

      // remove from the model also 
      model.removeRow(tblTabulka.getSelectedRow()); 
     } 
    } 
}); 
Смежные вопросы