1 package fr.ifremer.quadrige3.ui.swing.table.renderer;
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 import javax.swing.AbstractCellEditor;
28 import javax.swing.JCheckBox;
29 import javax.swing.JTable;
30 import javax.swing.table.TableCellEditor;
31 import javax.swing.table.TableCellRenderer;
32 import java.awt.Component;
33
34
35
36
37
38
39 public class LabeledCheckBoxEditor extends AbstractCellEditor implements TableCellEditor {
40
41 private final JCheckBox editor;
42
43
44
45
46 public LabeledCheckBoxEditor() {
47 super();
48 editor = new JCheckBox();
49 editor.addActionListener(e -> LabeledCheckBoxEditor.this.stopCellEditing());
50 }
51
52
53 @Override
54 public final boolean stopCellEditing() {
55
56 fireEditingStopped();
57 return true;
58 }
59
60
61 @Override
62 public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
63
64 TableCellRenderer renderer = table.getCellRenderer(row, column);
65 if (renderer instanceof LabeledCheckBoxRenderer) {
66 JCheckBox renderComponent = (JCheckBox) renderer.getTableCellRendererComponent(table, value, isSelected, true, row, column);
67
68 editor.setHorizontalAlignment(renderComponent.getHorizontalAlignment());
69 editor.setOpaque(renderComponent.isOpaque());
70 editor.setBackground(renderComponent.getBackground());
71 editor.setBorder(renderComponent.getBorder());
72
73 }
74
75 LabeledCheckBoxBean bean;
76 if (value instanceof LabeledCheckBoxBean) {
77 bean = (LabeledCheckBoxBean) value;
78 } else {
79 bean = new LabeledCheckBoxBean(isSelected, null);
80 }
81
82 editor.setSelected(bean.isChecked());
83 editor.setText(bean.getText());
84
85 return editor;
86 }
87
88
89 @Override
90 public Object getCellEditorValue() {
91 return new LabeledCheckBoxBean(editor.isSelected(), editor.getText());
92 }
93
94
95
96
97
98
99 public JCheckBox getEditor() {
100 return editor;
101 }
102
103 }