web-dev-qa-db-fra.com

Comment ajouter des cases à cocher à swing JTABLE

Est-ce que quelqu'un sait comment mettre un JCheckBox dans une colonne JTable? Quelque chose comme ça:

Table from the table tutorial

J'ai pris cela de Comment utiliser les tableaux

Merci d'avance.

14
java2world

1) JTable sait JCheckbox avec booléen intégré TableCellRenderers et TableCellEditor par défaut, alors il y a contre-productif déclarer quelque chose à ce sujet,

2) AbstractTableModel devrait être utile, où se trouve dans le JTable requis pour réduire/restreindre/changer les méthodes imbriquées et hérite par défaut implémenté dans le DefaultTableModel,

3) pensez à utiliser DefaultTableModel, (si vous n'êtes pas sûr de la façon de fonctionner) au lieu de AbstractTableModel,

table_with_BooleanType_column

pourrait être généré à partir d'un code simple:

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