【问题标题】:How to add checkboxes to JTABLE swing [closed]如何将复选框添加到 JTABLE swing [关闭]
【发布时间】:2011-11-15 13:16:21
【问题描述】:

有人知道如何将JCheckBox 放入JTable 列吗?像这样的:

这是我从How To use Tables 那里得到的

提前致谢。

【问题讨论】:

  • Swing 教程准确地告诉您如何做这样的事情。我建议你看看。
  • 创建表格后可以得到“checkboxes”列,然后setCellEditor( layersTable.getDefaultEditor( Boolean.class ) )和cell renderer类似的方式。 PS。我很遗憾这已关闭,我无法回答,这是一个快速回答的完美问题:(

标签: java swing jtable jcheckbox


【解决方案1】:

1) JTable 知道 JCheckbox 默认带有内置布尔值 TableCellRenderers and TableCellEditor,然后有相反的声明,

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

3) 考虑使用DefaultTableModel,(如果您不确定如何工作)而不是AbstractTableModel

可以从简单的代码生成:

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

【讨论】:

  • -1 用于出于数据相关原因对表进行子类化:显然 模型 有责任返回正确的类,而视图不能 第二个猜测
  • 1)我从来没有听说过子类问题,严重不明白,在这里发布一个明亮的例子来澄清动力可能是合适的,或者链接到详细订阅,2)也许有最深的原因为什么我只阻止非子类化代码,并且只阻止 OP 的快速级别,3)成像,:-)
  • 默认的JTable#getColumnClass 方法执行此操作:return getModel().getColumnClass(convertColumnIndexToModel(column));。如果用户移动表格列,则此“解决方案”将中断。 TableModel#getColumnClass 应该被覆盖。
  • 你的代码被无耻复制here。我已就该张贴者的行为向版主提出了举报。
猜你喜欢
  • 2015-11-22
  • 1970-01-01
  • 2016-02-20
  • 2023-03-30
  • 1970-01-01
  • 2014-03-08
  • 2016-05-28
相关资源
最近更新 更多