JTable удалить строку, щелкнув ячейку с пользовательским DeleteCellEditor из того же JTable - PullRequest
0 голосов
/ 29 марта 2012

В классе с именем HistoryPanel у меня есть статическая JTable с именем resultsTable со статической DefaultTableModel с именем tableModel.В таблице есть собственный редактор ячеек:

resultsTable.getColumn("Delete").setCellEditor(new DeleteButtonEditor(new JCheckBox()));

Внутри, естественно, я переопределяю эти два метода следующим образом:

public Object getCellEditorValue()
{
    if (isPushed)
    {
        HistoryPanel.tableModel.removeRow(HistoryPanel.resultsTable.getSelectedRow());
    }
}

protected void fireEditingStopped()
{
    super.fireEditingStopped();
}

Исключение выдается ТОЛЬКО, когда я пытаюсь удалитьпоследняя строка в таблице результатов.Когда я удаляю строку, которая не является последней, она работает отлично.Исключение:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1

И строка кода, которая вызывает исключение:

super.fireEditingStopped();

Кто-нибудь может мне помочь?Как я могу избежать этого исключения

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Действительно, почему бы не использовать Boolean значение напрямую, почему там Editor for JCheckBox, вы должны проверить учебник , как работает JTable

РЕДАКТИРОВАТЬ

для реальногоTableCellEditor вы должны позвонить

int row = table.convertRowIndexToModel(table.getEditingRow());
fireEditingStopped();

, а затем вы можете позвонить для удаления

1 голос
/ 29 марта 2012

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

Я предполагаю, что упаковка вашего

if (isPushed)
{
    HistoryPanel.tableModel.removeRow(HistoryPanel.resultsTable.getSelectedRow());
}

внутри EventQueue.invokeLater может решить проблему. Таким образом, редактирование заканчивается, когда вы удаляете строку.

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