繁体   English   中英

jTable复选框和删除行

[英]jTable checkbox and removing row

我正在使用jtable swing,我的jtable中有复选框,什么是removeRow of checked复选框的最佳方法?

我正在使用defaultTableModel和removeRow,我需要知道如何获取勾选复选框的TRUE值。

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);
  }
}

如果您需要实现“删除所有选定的”,您可以考虑以下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;
  }

}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM