blob: 26a5a788843b9e40bb816686af68ad34b2b82728 (
plain)
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
package bjc.utils.gui;
import java.util.function.Consumer;
import java.util.function.Supplier;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import bjc.utils.funcdata.IFunctionalList;
import bjc.utils.gui.layout.HLayout;
import bjc.utils.gui.layout.VLayout;
/**
* A panel that has a list of objects and ways of manipulating that list
*
* @author ben
*
* @param <E>
* The type of data stored in the list
*/
public class ListParameterPanel<E> extends JPanel {
// Version id for serialization
private static final long serialVersionUID = 3442971104975491571L;
/**
* Create a new panel using the specified actions for doing things
*
* @param addAction
* The action that provides items
* @param editAction
* The action that edits items
* @param removeAction
* The action that removes items
*/
public ListParameterPanel(Supplier<E> addAction,
Consumer<E> editAction, Consumer<E> removeAction) {
this(addAction, editAction, removeAction, null);
}
/**
* Create a new panel using the specified actions for doing things
*
* @param addAction
* The action that provides items
* @param editAction
* The action that edits items
* @param removeAction
* The action that removes items
* @param defaultValues
* The default values to put in the list
*/
public ListParameterPanel(Supplier<E> addAction,
Consumer<E> editAction, Consumer<E> removeAction,
IFunctionalList<E> defaultValues) {
setLayout(new VLayout(2));
JList<E> list;
if (defaultValues != null) {
list = SimpleJList.buildFromList(defaultValues.toIterable());
} else {
list = new JList<>(new DefaultListModel<>());
}
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JPanel buttonPanel = new JPanel();
int numButtons = 0;
if (addAction != null) {
numButtons++;
}
if (editAction != null) {
numButtons++;
}
if (removeAction != null) {
numButtons++;
}
buttonPanel.setLayout(new HLayout(numButtons));
JButton addParam = null;
if (addAction != null) {
addParam = new JButton("Add...");
addParam.addActionListener(
(event) -> ((DefaultListModel<E>) list.getModel())
.addElement(addAction.get()));
}
JButton editParam = null;
if (editAction != null) {
editParam = new JButton("Edit...");
editParam.addActionListener(
(event) -> editAction.accept(list.getSelectedValue()));
}
JButton removeParam = null;
if (removeAction != null) {
removeParam = new JButton("Remove...");
removeParam.addActionListener((event) -> removeAction
.accept(((DefaultListModel<E>) list.getModel())
.remove(list.getSelectedIndex())));
}
if (addAction != null) {
buttonPanel.add(addParam);
}
if (editAction != null) {
buttonPanel.add(editParam);
}
if (removeAction != null) {
buttonPanel.add(removeParam);
}
add(list);
add(buttonPanel);
}
}
|