Java jTable复选框和删除行

Java jTable复选框和删除行,java,swing,Java,Swing,我正在使用jtable swing,我的jtable中有一个复选框,什么是最好的方法来删除选中的复选框 我正在使用defaultTableModel和removeRow,我需要知道如何获取勾选复选框的真实值。当您将JCheckBox设置到单元格编辑器时,您可以将其值读取为布尔值 class TableModel extends DefaultTableModel { public TableModel(Object[] headers) { super(null, header

我正在使用jtable swing,我的jtable中有一个复选框,什么是最好的方法来删除选中的复选框


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

当您将
JCheckBox
设置到单元格编辑器时,您可以将其值读取为
布尔值

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);
  }
}
class TableModel扩展了DefaultTableModel{
公共表模型(对象[]头){
超级(空,标题);
} 
公共类getColumnClass(int c){
开关(c){
案例0:返回Boolean.class;
默认值:返回String.class;
} 
} 
公共布尔值isCellEditable(int行,int列){
if(column==0)返回true;
返回false;
} 
}
TableModel TableModel=新的TableModel();
JTable table=新的JTable(tableModel);
....
TableColumnModel columnModel=table.getColumnModel();
//将第一列设置为使用复选框
columnModel.getColumn(0.setCellEditor)(新的DefaultCellEditor(新的JCheckBox());
...
int rowCount=tableModel.getRowCount();

对于(int i=0;i当您将
JCheckBox
设置到单元格编辑器时,您可以将其值读取为
布尔值

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);
  }
}
class TableModel扩展了DefaultTableModel{
公共表模型(对象[]头){
超级(空,标题);
} 
公共类getColumnClass(int c){
开关(c){
案例0:返回Boolean.class;
默认值:返回String.class;
} 
} 
公共布尔值isCellEditable(int行,int列){
if(column==0)返回true;
返回false;
} 
}
TableModel TableModel=新的TableModel();
JTable table=新的JTable(tableModel);
....
TableColumnModel columnModel=table.getColumnModel();
//将第一列设置为使用复选框
columnModel.getColumn(0.setCellEditor)(新的DefaultCellEditor(新的JCheckBox());
...
int rowCount=tableModel.getRowCount();

对于(int i=0;i),如果需要实现“删除所有选定的”,则可以考虑以下TabelMod扩展,这将节省一些RePrimts(这可以提供更好的用户体验):

import javax.swing.table.DefaultTableModel;
公共类RemoveCheckDrowTableModel扩展了DefaultTableModel{
public void removecheckdrows(int removecheckbox列){
int beginRow=0;
int endRow=0;
RangeSearch:while(beginRow=dataVector.size()){
中断范围搜索;
}  
}
而((endRow+1)对于(int i=NeXROW;i)如果需要实现“删除所有选择”,您可以考虑以下TabLeMod扩展,这将节省一些RePrimts(这可以提供更好的用户体验):

import javax.swing.table.DefaultTableModel;
公共类RemoveCheckDrowTableModel扩展了DefaultTableModel{
public void removecheckdrows(int removecheckbox列){
int beginRow=0;
int endRow=0;
RangeSearch:while(beginRow=dataVector.size()){
中断范围搜索;
}  
}
而((endRow+1)对于(int i=beginRow;i
Boolean selected=tableModel.getValueAt(i,0);
不兼容类型,当强制转换
(Boolean)tableModel.getValueAt.
时,存在空指针错误,无需设置自定义编辑器。重写getColumnClass(…)方法返回Boolean作为列类,该表将使用适当的呈现器和编辑器。此外,删除行时,需要从表的末尾开始并倒计时,以便在删除行时不会跳过行。@SOer casting修复,谢谢。
NullPointerException
关于哪个操作?错误消息
Exception在线程“AWT-EventQueue-0”java.lang.NullPointerException中,当在
(布尔)tableModel.getValueAt(i,0);
@SOer上设置cast时,似乎
tableModel
为null?我说得对吗?看到我的更新,我忘记了
tableModel
的实现,对不起。
布尔选择=tableModel.getValueAt(i,0);
不兼容类型,当强制转换
(布尔)tableModel.getValueAt.
时,存在空指针错误无需设置自定义编辑器。重写getColumnClass(…)方法返回Boolean作为列类,该表将使用适当的呈现器和编辑器。此外,删除行时,需要从表的末尾开始并倒计时,以便在删除行时不会跳过行。@SOer casting修复,谢谢。
NullPointerException
关于哪个操作?错误消息
Exception在线程“AWT-EventQueue-0”java.lang.NullPointerException中,当在
(布尔)tableModel.getValueAt(i,0)上设置强制转换时
@SOer似乎
tableModel
为空?我说得对吗?查看我的更新,我忘记了
tableModel
的实现,对不起。如果您有NPE,则说明您的代码错误或表模型中的数据不正确。发布您的SSCE()演示问题。只有当我使用khachik方法时才有NPE。如果你有NPE,那么要么你的代码错误,要么表模型中的数据不正确。发布你的SSCCE()演示问题。只有当我使用khachik方法时才有NPE