【问题标题】:Jtable checkboxes are not editableJtable 复选框不可编辑
【发布时间】:2015-03-17 07:16:22
【问题描述】:

我知道这是一个非常基本的问题我在表格的第一列中有复选框问题是复选框不可点击。我搜索了类似的线程并尝试将布尔编辑器分配给列并覆盖 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);

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

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

    另一种方法是覆盖TableModelgetColumnClass() 方法并为列返回Boolean.class

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

    【讨论】:

      【解决方案2】:

      您应该使用将复选框列返回为可编辑的自定义表格模型。查看此链接以获取更多信息和示例:https://stackoverflow.com/a/2901500/1843508

      【讨论】:

      • 是的,我知道该链接我之前已经检查过。但是当我使用自定义模型时,我在添加行时遇到了麻烦。是否可以坚持代码
      猜你喜欢
      • 2017-04-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 2014-12-17
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      相关资源
      最近更新 更多