【问题标题】:Adding CheckBox to DefaultTableModel将 CheckBox 添加到 DefaultTableModel
【发布时间】:2011-05-18 01:04:34
【问题描述】:

我有一个使用 Object[][] 数组填充的 DefaultTableModel。

现在我想添加一个带有复选框的列并执行相应的操作。

当我将复选框添加到 Object[][] 数组并查看它时,会显示文本

'javax.swing.JCheckBox[,0,0,0x0....',如何让它显示一个复选框并向其添加操作?

【问题讨论】:

    标签: java swing checkbox


    【解决方案1】:

    您可以使用自定义表格单元格渲染器。

    看这里

    http://www.exampledepot.com/egs/javax.swing.table/CustRend.html

    【讨论】:

      【解决方案2】:

      JTable 具有用于布尔值的默认复选框渲染器/编辑器。只需让您的TableModel#getColumnClass 为给定列返回Boolean.class

      【讨论】:

        【解决方案3】:

        不,您不能将 swing 组件作为模型对象 [] 数组提供。那应该注册为列上的单元格编辑器。

        默认情况下,DefaultTableModel 支持复选框作为存储布尔类类型值的列的编辑器。

        因此,在数组中传递 Boolean.TRUE/Boolean.FALSE 对象并将表设置为可编辑。然后表格会自动为您呈现复选框。

        是否需要为每个类类型注册编辑器

        【讨论】:

        • 很可能是因为你还没有实现TableModel#getColumnClass,看我的回答:)
        【解决方案4】:

        如何让它显示一个复选框

        查看乌伦的回答

        并向其添加操作?

        使用 TableModelListener。比如:

        public void tableChanged(TableModelEvent e)
        {
            if (e.getType() == TableModelEvent.UPDATE)
            {
                int row = e.getFirstRow();
                int column = e.getColumn();
        
                if (column == ?)
                {
                    TableModel model = (TableModel)e.getSource();
                    Boolean value = (Boolean)model.getValueAt(row, column));
        
                    if (value.booleanValue())
                        // add your code here
                }
            }
        }
        

        【讨论】:

        • 如何将 TableModelEvent 添加到 TableModel 中?
        • @Teysz, table.getModel.addTableModelListener(...);
        【解决方案5】:

        您也可以只获取类,而不是对每个返回类型进行硬编码。这是覆盖方法的示例:

         //create the table 
        DefaultTableModel tableModel = new DefaultTableModel(data, columnNames)
        //override the method
        
        
                       {
                public Class<?> getColumnClass(int colIndex) {
        
                        return getValueAt(0, colIndex).getClass();
        
                    }
        

        然后,当您创建表时,您可以这样初始化它:

         data[i][12] = new Boolean(false);
        

        这使得该框看起来没有勾选:)

        【讨论】:

          猜你喜欢
          • 2013-02-17
          • 2015-05-15
          • 2021-03-01
          • 2011-09-22
          • 2013-07-06
          • 2023-04-02
          • 1970-01-01
          • 2018-06-22
          • 2021-10-28
          相关资源
          最近更新 更多