java - 防止复选框在 JTable 中移动

标签 java swing jtable jcheckbox

我在 JTable 中有一个列,其中的单元格呈现为下面的复选框:

enter image description here

如何防止复选框在每次单击时移动?这是我的单元格渲染器和单元格编辑器:

protected class CheckBoxCellRenderer extends JCheckBox implements TableCellRenderer {

  @Override
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    this.setSelected((Boolean) tableModel.getValueAt(row, 0));
    return this;
  }

}

protected class CheckBoxCellEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {

  private final CheckBoxCellRenderer cell = new CheckBoxCellRenderer();
  private int row;

  public CheckBoxCellEditor() {
    cell.addActionListener(this);
  }

  @Override
  public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int rowIndex, int vColIndex) {
    cell.setSelected(((Boolean) value).booleanValue());
    row = rowIndex;
    return cell;
  }

  @Override
  public Object getCellEditorValue() {
    return cell.isSelected();
  }

}

谢谢!

最佳答案

不要创建自定义渲染器/编辑器。

JTable 已经支持默认渲染器。只需重写 TableModel 或 JTable 的 getColumnClass(...) 方法即可返回第一列的 Boolean.class,JTable 将使用默认渲染器/编辑器。

关于java - 防止复选框在 JTable 中移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7811471/

相关文章:

java - 在 JTable 中按列对行进行排序

java.lang.ArrayIndexOutOfBoundsException : 21 >= 21

java - 运行我编译的 JAR : "Unsupported major.minor version 52.0"

java - 如何在MySQL中进行循环以将列设置为手动增量?

java - 将变量范围从一帧扩展到另一帧

java - 如何使用 java "Open"和 "Save"

java - java中删除数组中的空元素

java - 如何从插件编写到 eclipse 控制台的超链接

java - 单击后分配变量值并删除 JButton

java - Jtable 中的删除按钮