[英]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.