2010-11-25 3 views
1

Я использую jtable swing, есть флажок внутри jtable моего, что было бы лучшим способом удалитьRow of checked checkbox only?jTable checkbox и удаление строки

Я использую defaultTableModel и removeRow, мне нужно знать, как получить значение TRUE, отмеченное галочкой.

+0

Если у вас есть NPE, то либо ваш код ошибочен, либо данные в таблице таблицы плохие. Отправьте свой SSCCE (http://sscce.org), демонстрирующий проблему. – camickr 2010-11-25 15:10:05

+0

есть NPE, только если я использую метод khachik – SOer 2010-11-25 15:12:08

ответ

2

Когда вы устанавливаете JCheckBox в редактор ячеек, вы можете прочитать его значение как Boolean.

class TableModel extends DefaultTableModel { 

    public TableModel(Object[] headers) { 
    super(null, headers); 
    } 

    public Class getColumnClass(int c) { 
    switch (c) { 
     case 0: return Boolean.class; 
     default: return String.class; 
    } 
    } 

    public boolean isCellEditable(int row, int column) { 
    if (column == 0) return true; 
    return false; 
    } 
} 

TableModel tableModel = new TableModel(<headers as String []>); 
JTable table = new JTable(tableModel); 
.... 

TableColumnModel columnModel = table.getColumnModel(); 
// setting the first column to use checkboxes 
columnModel.getColumn(0).setCellEditor(new DefaultCellEditor(new JCheckBox())); 
... 

int rowCount = tableModel.getRowCount(); 
for(int i=0; i<rowCount; i++) { 
    Boolean selected = (Boolean)tableModel.getValueAt(0, 0); 
    if(selected) { 
    tableModel.removeRow(0); 
    } 
} 
2

Если вам нужно реализовать «Удалить все выбранные» вы можете рассмотреть следующее расширение TableModel, что сэкономит некоторые перерисовки (которые могут дать лучший пользовательский опыт):

import javax.swing.table.DefaultTableModel; 

public class RemoveCheckedRowsTableModel extends DefaultTableModel { 

public void removeCheckedRows(int removeCheckBoxColumn) { 
    int beginRow = 0; 
    int endRow = 0; 

RangeSearch: while (beginRow < dataVector.size()) { 
    while (getValueAt(beginRow, removeCheckBoxColumn).equals(Boolean.FALSE)) { 
     beginRow++; 
     endRow++; 
     if (beginRow >= dataVector.size()) { 
      break RangeSearch; 
     } 
    } 
    while ((endRow + 1) < dataVector.size() 
      && getValueAt((endRow + 1), removeCheckBoxColumn).equals(Boolean.TRUE)) { 
     endRow++; 
    } 
    for (int i = beginRow; i <= endRow; i++) { 
     dataVector.removeElementAt(beginRow); 
    } 
    fireTableRowsDeleted(beginRow, endRow); 
    endRow = ++beginRow; 
    } 

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