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 fr.ifremer.quadrige3.ui.swing.table.editor.ButtonCellEditor;
28
29 import javax.swing.AbstractAction;
30 import javax.swing.JMenuItem;
31 import javax.swing.JPopupMenu;
32 import javax.swing.JTable;
33 import java.awt.Component;
34 import java.awt.event.ActionEvent;
35 import java.awt.event.MouseAdapter;
36 import java.awt.event.MouseEvent;
37 import java.util.List;
38
39
40
41
42
43
44
45 public abstract class DropDownButtonCellEditor<E> extends ButtonCellEditor {
46
47 private JPopupMenu popup = new JPopupMenu();
48
49
50
51
52
53
54
55
56
57 public abstract List<E> getDropDownItems(JTable table, int row, int column);
58
59
60
61
62
63
64
65 public abstract String decorateItem(E item);
66
67
68
69
70
71
72
73
74 public abstract void onItemMenuAction(E item, int row, int column);
75
76
77
78
79 public DropDownButtonCellEditor() {
80 super();
81
82 button.addMouseListener(new MouseAdapter() {
83
84 @Override
85 public void mousePressed(MouseEvent e) {
86
87 showPopup();
88 }
89 });
90
91 }
92
93
94
95
96 public void showPopup() {
97 popup.show(button, 0, button.getHeight());
98 }
99
100
101 @Override
102 public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, final int row, final int column) {
103
104
105 popup = new JPopupMenu();
106 List<E> items = getDropDownItems(table, row, column);
107
108 if (items != null) {
109 for (final E item : items) {
110
111 AbstractAction action = new AbstractAction(decorateItem(item)) {
112
113 @Override
114 public void actionPerformed(ActionEvent e) {
115 onItemMenuAction(item, row, column);
116 }
117 };
118
119 popup.add(new JMenuItem(action));
120 }
121 }
122
123 return super.getTableCellEditorComponent(table, value, isSelected, row, column);
124 }
125
126 }