如何为JTABLE swing添加复选框

jav*_*rld 14 java swing jtable jcheckbox

有谁知道怎么把JCheckBox一个JTable列?像这样的东西:

表格中的表格教程

我从如何使用表中获取了这个

提前致谢.

mKo*_*bel 44

1)JTable 默认使用内置的布尔TableCellRenderers和TableCellEditor知道JCheckbox,然后就此反复宣告了一些事情,

2)AbstractTableModel应该是有用的,其中JTable需要减少/限制/更改嵌套和继承默认情况下实现的方法DefaultTableModel,

3)考虑使用DefaultTableModel,(如果你不确定如何工作)代替AbstractTableModel,

table_with_BooleanType_column

可以从简单的代码生成:

import javax.swing.*;
import javax.swing.table.*;

public class TableCheckBox extends JFrame {

    private static final long serialVersionUID = 1L;
    private JTable table;

    public TableCheckBox() {
        Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"};
        Object[][] data = {
            {"Buy", "IBM", new Integer(1000), new Double(80.50), false},
            {"Sell", "MicroSoft", new Integer(2000), new Double(6.25), true},
            {"Sell", "Apple", new Integer(3000), new Double(7.35), true},
            {"Buy", "Nortel", new Integer(4000), new Double(20.00), false}
        };
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        table = new JTable(model) {

            private static final long serialVersionUID = 1L;

            /*@Override
            public Class getColumnClass(int column) {
            return getValueAt(0, column).getClass();
            }*/
            @Override
            public Class getColumnClass(int column) {
                switch (column) {
                    case 0:
                        return String.class;
                    case 1:
                        return String.class;
                    case 2:
                        return Integer.class;
                    case 3:
                        return Double.class;
                    default:
                        return Boolean.class;
                }
            }
        };
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane(table);
        getContentPane().add(scrollPane);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                TableCheckBox frame = new TableCheckBox();
                frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocation(150, 150);
                frame.setVisible(true);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

  • -1为了与数据相关的原因对表进行子类化:显然_model_负责返回正确的类,视图_must not_ second guess that that (10认同)
  • 默认的`JTable#getColumnClass`方法执行此操作:`return getModel().getColumnClass(convertColumnIndexToModel(column));`.如果用户移动表列,则此"解决方案"将中断.`TableModel#getColumnClass`应该被覆盖. (5认同)
  • 1)我从来没有听说过subClassing问题,严重不明白,可能适当澄清推动这里发布一个明亮的例子,或链接到详细订阅,2)也许有最深刻的原因,为什么我阻止非子类代码只是关于OP的快速水平,3)成像,:-) (3认同)
  • 您的代码已被无耻地复制[此处](http://stackoverflow.com/a/25533492/522444).我已经向主持人举报了海报的行为. (2认同)