Как удалить одну строку из JTable - PullRequest
1 голос
/ 05 ноября 2011

У меня есть таблица, которая содержит кнопки удаления для каждой строки.Я использую

int row =  table.getEditingRow(); //To fetch the current row to delete.

Затем я использую

DefaultTableModel model = (DefaultTableModel)table.getModel();
model.removeRow(row);

Это удаляет строку в JTable, когда я удаляю первую первую строку, и все что между ними, но если я удаляю последнюю строку, она все равно удаляетпоследняя строка, но затем следующий удаляемый элемент выдаст ошибку, скажем, если в таблице 3 элемента

Item1
Item2
Item3

Когда я удаляю элемент 3

Item1
Item2

Когда я удаляю любой элемент1 или 2 после того, как это вызовет ошибку

java.lang.ArrayIndexOutOfBoundsException: 2 >= 2

Нет проблем, когда я сначала удаляю Item1, затем Item2, затем Item3 или Item2, затем Item1, затем Item3

Вот как япостроил мой CellEditor

public class JButtonEditor extends AbstractCellEditor implements TableCellEditor, ActionListener{
JTable table;
JButton button = new JButton();

public JButtonEditor(JTable table){
    this.table = table;
    button.addActionListener(this);
}

@Override
public Object getCellEditorValue() {
    return button.getText();
}

@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    button.setText(value.toString());
    return button;
}

@Override
public void actionPerformed(ActionEvent e) {
    int row = table.getEditingRow();
    int column = table.getEditingColumn();
    switch(column){
        case 3:
            manage(groupId); break;
        case 4:
            editGroup(groupId); break;
        case 5:
            deleteGroup(groupId,row); break;
    }
}

private void deleteGroup(int groupId,int row) {
    //do something here to remove the group from the database
    DefaultTableModel model = (DefaultTableModel) table.getModel();
    model.removeRow(row);
}

Я думаю, что после того, как я удалил Item3, когда я удаляю Item1 или Item2 рядом, он думает, что я все еще удаляю Item3, и это вызывает ошибку ArrayOutOfBounds, так как Item3 ушел в табличную модель?

Моя проблема исправлена.

public void actionPerformed(ActionEvent e) {
    int row = table.getEditingRow();
    int column = table.getEditingColumn();
    fireEditingStopped(); //added this
    switch(column){
        case 3:
            manage(groupId); break;
        case 4:
            editGroup(groupId); break;
        case 5:
            deleteGroup(groupId,row); break;
    }
}

Это единственное, что я изменил, и я все еще использую Cell Renderer, и теперь он работает!

1 Ответ

3 голосов
/ 05 ноября 2011

Столбец Кнопка Столбец показывает, как я это делаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...