From c2089e5a3e604424c7cd00bbddcb03731ff5a0ea Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Sun, 21 Feb 2016 15:42:14 -0500 Subject: Added new control and some commenting --- .../java/bjc/utils/gui/ListParameterPanel.java | 95 ++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 BJC-Utils2/src/main/java/bjc/utils/gui/ListParameterPanel.java (limited to 'BJC-Utils2/src/main/java/bjc/utils/gui/ListParameterPanel.java') diff --git a/BJC-Utils2/src/main/java/bjc/utils/gui/ListParameterPanel.java b/BJC-Utils2/src/main/java/bjc/utils/gui/ListParameterPanel.java new file mode 100644 index 0000000..3cdfd47 --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/gui/ListParameterPanel.java @@ -0,0 +1,95 @@ +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.FunctionalList; +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 + * The type of data stored in the list + */ +public class ListParameterPanel extends JPanel { + /** + * Version id for serialization + */ + private static final long serialVersionUID = 3442971104975491571L; + + /** + * Create a new panel using the specified actions for doing things + * + * @param addAct + * The action that provides items + * @param editAct + * The action that edits items + * @param removeAct + * The action that removes items + */ + public ListParameterPanel(Supplier addAct, Consumer editAct, + Consumer removeAct) { + this(addAct, editAct, removeAct, null); + } + + /** + * Create a new panel using the specified actions for doing things + * + * @param addAct + * The action that provides items + * @param editAct + * The action that edits items + * @param removeAct + * The action that removes items + * @param defVals + * The default values to put in the list + */ + public ListParameterPanel(Supplier addAct, Consumer editAct, + Consumer removeAct, FunctionalList defVals) { + setLayout(new VLayout(2)); + + JList list; + + if (defVals != null) { + list = SimpleJList.buildFromList(defVals.toIterable()); + } else { + list = new JList<>(new DefaultListModel<>()); + } + + list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + + JPanel buttonPanel = new JPanel(); + buttonPanel.setLayout(new HLayout(3)); + + JButton addParam = new JButton("Add..."); + addParam.addActionListener( + (ev) -> ((DefaultListModel) list.getModel()) + .addElement(addAct.get())); + + JButton editParam = new JButton("Edit..."); + editParam.addActionListener( + (ev) -> editAct.accept(list.getSelectedValue())); + + JButton removeParam = new JButton("Remove..."); + removeParam.addActionListener((ev) -> removeAct + .accept(((DefaultListModel) list.getModel()) + .remove(list.getSelectedIndex()))); + + buttonPanel.add(addParam); + buttonPanel.add(editParam); + buttonPanel.add(removeParam); + + add(list); + add(buttonPanel); + } +} -- cgit v1.2.3