JTable флажок и удаление строки - PullRequest
1 голос
/ 25 ноября 2010

Я использую jtable swing, внутри jtable есть флажок, что будет лучшим способом удалить только ряд проверенных флажков?

Я использую defaultTableModel и removeRow, мне нужно знать, как получить ИСТИННОЕ значение отмеченного флажка.

Ответы [ 2 ]

2 голосов
/ 25 ноября 2010

Если вам нужно реализовать «Удалить все выделенные», вы можете рассмотреть следующее расширение 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;
  }

}
}
2 голосов
/ 25 ноября 2010

Когда вы устанавливаете 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);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...