salut,


j'ai des checkbox qui sont affiché dans les headers d'une jTable, mais le nom des colonnes n'est pas affiché.

je peux toujours en mettre un global dans getTableCellRendererComponent mais je veux pas que toute mes colonnes est le même nom

une idée?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 
public class JTableHeaderCheckBox {
 
    Object colNames[] = {"Journée", "Am", "Pm"};
    Object[][] data = {{"L", false, false},
        {"M", false, false},
        {"M", false, false},
        {"J", false, false},
        {"V", false, false},
        {"S", false, false},
        {"D", false, false}};
    DefaultTableModel dtm;
    JTable table;
 
    public void buildGUI() {
        dtm = new DefaultTableModel(data, colNames);
        table = new JTable(dtm);
 
        JScrollPane sp = new JScrollPane(table);
 
        TableColumn tc = table.getColumnModel().getColumn(1);
        tc.setCellEditor(table.getDefaultEditor(Boolean.class));
        tc.setCellRenderer(table.getDefaultRenderer(Boolean.class));
        tc.setHeaderRenderer(new CheckBoxHeader(new MyItemListener()));
 
        TableColumn tc2 = table.getColumnModel().getColumn(2);
        tc2.setCellEditor(table.getDefaultEditor(Boolean.class));
        tc2.setCellRenderer(table.getDefaultRenderer(Boolean.class));
        tc2.setHeaderRenderer(new CheckBoxHeader(new MyItemListener()));
 
 
        JFrame f = new JFrame();
        f.getContentPane().add(sp);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
 
    class MyItemListener implements ItemListener {
 
        public void itemStateChanged(ItemEvent e) {
            Object source = e.getSource();
            if (source instanceof AbstractButton == false) {
                return;
            }
 
            int column = ((CheckBoxHeader) source).getColumn();
 
            boolean checked = e.getStateChange() == ItemEvent.SELECTED;
            for (int x = 0, y = table.getRowCount(); x < y; x++) {
                table.setValueAt(new Boolean(checked), x, column);
            }
        }
    }
 
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
 
            public void run() {
                new JTableHeaderCheckBox().buildGUI();
            }
        });
    }
}
 
class CheckBoxHeader extends JCheckBox implements TableCellRenderer, MouseListener {
 
    protected CheckBoxHeader rendererComponent;
    protected int column;
    protected boolean mousePressed = false;
 
    public CheckBoxHeader(ItemListener itemListener) {
        rendererComponent = this;
        rendererComponent.addItemListener(itemListener);
    }
 
    public Component getTableCellRendererComponent(
            JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        if (table != null) {
            JTableHeader header = table.getTableHeader();
            if (header != null) {
                rendererComponent.setForeground(header.getForeground());
                rendererComponent.setBackground(header.getBackground());
                rendererComponent.setFont(header.getFont());
                header.addMouseListener(rendererComponent);
            }
        }
        setColumn(column);
        // rendererComponent.setText("Check All");
        setBorder(UIManager.getBorder("TableHeader.cellBorder"));
        return rendererComponent;
    }
	...
	...
}