Jtable 复选框不可编辑

Jtable checkboxes are not editable

我知道这是一个非常基本的问题我在我的表的第一列中有复选框问题是复选框不是clickable.I已经搜索了类似的线程并尝试将布尔编辑器分配给该列并覆盖getColumnClass ()但是我做不到这是我目前尝试过的

String[] columnNames = {"Column 1", "Column 2"};  
DefaultTableModel model = new DefaultTableModel(columnNames, 0);  
table=new JTable(model );  
table.getColumnModel().getColumn(0).setCellRenderer( table.getDefaultRenderer(Boolean.class) );  

ArrayList<org.jsoup.nodes.Element >arr=GetrowCount("http://www.mit.edu/");
for (org.jsoup.nodes.Element element :  arr) {
    Object[]  rows = {Boolean.FALSE, element};  
    model.addRow( rows );
}

scrollPane=new JScrollPane(table);

panel.add(scrollPane);
this.add(panel);
this.setSize(300,300);

您应该使用自定义 table 模型,它将 return 复选框列作为 editable。查看此 link 以获取更多信息和示例:

您的 JCheckBox 不可编辑,因为您为列设置了 Renderer,但要进行编辑,您需要添加 Editor,阅读有关 Editors and Renderers 的更多信息。

另一种方法是覆盖 TableModel 和 return Boolean.class 列的 getColumnClass() 方法:

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class TestFrame extends JFrame {

    public static void main(String... s) {
        new TestFrame();
    }

    public TestFrame() {
        init();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void init() {
        String[] columnNames = {"Column 1", "Column 2"};  
        DefaultTableModel model = new DefaultTableModel(columnNames, 0){
            @Override
            public Class<?> getColumnClass(int columnIndex) {
                return columnIndex == 0 ? Boolean.class : super.getColumnClass(columnIndex);
            }
        };  
        JTable table=new JTable(model );  

        for (int i =0;i<5;i++) {
            Object[]  rows = {Boolean.FALSE, i};  
            model.addRow( rows );
        }

        add(new JScrollPane(table));
    }
}