2010-12-29 6 views
1

Я читал сообщения, похожие на мои, и читал через Java tutorial page, но я просто не могу заставить это работать. Я не уверен, что мне не хватает чего-то фундаментального или нет ...HowTo Удалить строку в JTable с помощью Custom TableModel

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

class TableModel extends AbstractTableModel 
{ 
    private String[] columnNames = {"Enabled", "Value" }; 
    protected Class[] columnClasses = new Class[] { Boolean.class, String.class }; 

    public int getColumnCount()    { return columnNames.length; } 
    public int getRowCount()    { return filters.size(); } 
    public String getColumnName(int col) { return columnNames[col]; } 
    public Class getColumnClass(int col) { return columnClasses[col]; } 

    public Object getValueAt(int row, int col) { ... } 

    public void setValueAt(Object value, int row, int col) { ... } 

    public void addRow(String value) 
    { 
     fireTableRowsInserted(filters.size() - 1, filters.size() - 1); 
     int row = filters.size() -1 ; 
     int col = 1; 
     setValueAt(value, row, col);    
    } 

    public void removeRow(int row) 
    {   
     fireTableRowsDeleted(selectedRow, selectedRow); 
    } 
} 

Я подтвердил, что selectedRow содержит правильную строку через принты в консоли. Функция fireTableRowsDeleted просто ничего не делает. Строка все еще существует. Как вы просто удаляете определенную строку?

Спасибо,

+3

где находится объект фильтров? @njozwiak – gumuruh

ответ

3

Сразу после того, как я разместил это, я понял это.

Содержание строк основаны на Список фильтров:

public int getRowCount() { return filters.size(); } 

Моя проблема была я пытался удалить строку без удаления, что из списка. Таким образом, я изменил removeRow() быть следующим:

public void removeRow(int row) 
{ 
    filters.remove(row); 
    fireTableRowsDeleted(row, row); 
} 

И это работает как шарм.

веселит

5

Вызов fireTableRowsDeleted просто запускает событие, чтобы указать строки были удалены, вам все еще нужно, чтобы фактически удалить их из модели.

+0

Что означает u, удалив его из модели? Это удаление данных, таких как массив -2D? : D – gumuruh

+0

Да, метод удаления должен фактически удалить данные из любой структуры данных, используемые для внутреннего хранения данных. – vickirk

0

Я думаю, что это ответ:

final int row = selectedRow; 
EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      model.removeRow(row); 
     } 
}); 

Строка будет удалена, если редактирование закончено.

Смежные вопросы