Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
czsem.netgraph.util.AddRemoveListsManager Maven / Gradle / Ivy
package czsem.netgraph.util;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.ListModel;
import javax.swing.WindowConstants;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import thirdparty.ListAction;
import czsem.fs.depcfg.DependencySettings;
public class AddRemoveListsManager extends Container {
private static final long serialVersionUID = -5447255357679644238L;
private static final int defaultInset = 5;
private static final Insets defaultInsets = new Insets(defaultInset, defaultInset, defaultInset, defaultInset);
public static void main(String[] args) throws Exception {
JFrame fr = new JFrame(AddRemoveListsManager.class.getName());
fr.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
AddRemoveListsManager qd = new AddRemoveListsManager<>();
qd.initComponents();
qd.addLeftModelSynchronization(DependencySettings.getSelected().getDependencyNames());
qd.addRightModelSynchronization(DependencySettings.getAvailable().getDependencyNames());
fr.add(qd);
fr.pack();
fr.setVisible(true);
}
private JList listRight;
private JList listLeft;
private DefaultListModel modelRight;
private DefaultListModel modelLeft;
private ListDataSynchronizer syncRight;
private ListDataSynchronizer syncLeft;
public static void addMiddleButton(Container panel, String caption, ActionListener actionListener){
JButton b = new JButton(caption);
b.addActionListener(actionListener);
b.setAlignmentX(0.5f);
panel.add(b);
panel.add(Box.createRigidArea(new Dimension(0, 10)));
}
public JList createList(ListModel model, Action actionEvent) {
JList listRet = new JList<>(model);
new ListAction(listRet, actionEvent);
listRet.setPreferredSize(new Dimension(100, 50));
return listRet;
}
protected void addListLabel(String textLabel, int gridx){
GridBagConstraints c = new GridBagConstraints();
c.gridx = gridx;
c.gridy = 0;
c.weighty = 0;
c.weightx = 0;
c.anchor = GridBagConstraints.SOUTHWEST;
c.insets = new Insets(defaultInset, defaultInset, 0, 0);
add(new JLabel(textLabel), c);
}
protected void addList(Component listComponenet, int gridx){
GridBagConstraints c = new GridBagConstraints();
c.gridx = gridx;
c.gridy = 1;
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty = 1;
c.insets = defaultInsets;
add(listComponenet, c);
}
@SuppressWarnings("unchecked")
protected E createModelObjectFromString(String str) {
return (E) str;
}
@SuppressWarnings("serial")
public void initComponents() {
setLayout(new GridBagLayout());
listRight = createList(modelRight = new DefaultListModel<>(), new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) { commandAdd(); }});
listLeft = createList(modelLeft = new DefaultListModel<>(), new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {commandRemove();}});
addListLabel("Selected:", 0);
addList(listLeft, 0);
//Add button
JPanel panelRight = new JPanel(new BorderLayout());
JPanel panelAdd = new JPanel(new BorderLayout());
panelRight.add(listRight, BorderLayout.CENTER);
panelRight.add(panelAdd, BorderLayout.SOUTH);
addListLabel("Available:", 2);
addList(panelRight, 2);
final JTextField textFieldAdd = new JTextField();
panelAdd.add(textFieldAdd, BorderLayout.CENTER);
JButton buttonAdd = new JButton("Add");
buttonAdd.setMargin(new Insets(1, 1, 1, 1));
buttonAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addTextToRightList(createModelObjectFromString(textFieldAdd.getText()));
}
});
panelAdd.add(buttonAdd, BorderLayout.EAST);
//Middle Buttons
GridBagConstraints c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 0;
c.gridheight = 2;
c.insets = defaultInsets;
JPanel panelMiddle = new JPanel();
panelMiddle.setLayout(new BoxLayout(panelMiddle, BoxLayout.Y_AXIS));
addMiddleButton(panelMiddle, "<", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) { commandAdd(); }});
addMiddleButton(panelMiddle, ">", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) { commandRemove(); }});
addMiddleButton(panelMiddle, "<<", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) { commandAddAll(); }});
addMiddleButton(panelMiddle, ">>", new ActionListener() {;
@Override
public void actionPerformed(ActionEvent e) { commandRemoveAll(); }});
add(panelMiddle, c);
}
protected void commandRemoveAll() {
moveAllElements(listLeft, listRight);
}
protected void commandAddAll() {
moveAllElements(listRight, listLeft);
}
public void moveAllElements(JList removeFrom, JList addTo) {
for (int i = 0, size = removeFrom.getModel().getSize(); i < size; i++) {
moveElement(removeFrom, addTo, removeFrom.getModel().getElementAt(0));
}
}
public void moveSelectedElement(JList removeFrom, JList addTo) {
E sel = removeFrom.getSelectedValue();
if (sel == null) return;
moveElement(removeFrom, addTo, sel);
}
public void moveElement(JList removeFrom, JList addTo, E value) {
((DefaultListModel) removeFrom.getModel()).removeElement(value);
((DefaultListModel) addTo.getModel()).addElement(value);
}
protected void commandRemove() {
moveSelectedElement(listLeft, listRight);
}
protected void commandAdd() {
moveSelectedElement(listRight, listLeft);
}
protected void addTextToRightList(E text) {
if (modelRight.contains(text)) {
modelRight.removeElement(text);
}
if (modelLeft.contains(text)) {
modelLeft.removeElement(text);
}
modelRight.addElement(text);
}
public void addLeftModelSynchronization(List orig) {
syncLeft = addModelSynchronization(modelLeft, orig);
}
public void addRightModelSynchronization(List orig) {
syncRight = addModelSynchronization(modelRight, orig);
}
public ListDataSynchronizer addModelSynchronization(DefaultListModel model, List orig) {
ListDataSynchronizer sync = new ListDataSynchronizer<>(orig, model);
model.addListDataListener(sync);
return sync;
}
public static class ListDataSynchronizer implements ListDataListener {
protected ListDataSynchronizer(List origin, DefaultListModel model) {
this.origin = origin;
this.model = model;
}
private List origin;
private DefaultListModel model;
private boolean runningSynchronizeToModel = false;
public void synchronizeToOrig() {
if (runningSynchronizeToModel) return;
origin.clear();
//@SuppressWarnings({ "unchecked", "rawtypes" })
//Collection list = (Collection) Arrays.asList(model.toArray());
//set.addAll(list);
for (Enumeration enumeration = model.elements(); enumeration.hasMoreElements(); ) {
E e = enumeration.nextElement();
origin.add(e);
}
}
public void synchronizeToModel() {
runningSynchronizeToModel = true;
model.clear();
for (E s : origin) {
model.addElement(s);
}
runningSynchronizeToModel = false;
}
@Override
public void intervalRemoved(ListDataEvent e) {synchronizeToOrig();}
@Override
public void intervalAdded(ListDataEvent e) {synchronizeToOrig();}
@Override
public void contentsChanged(ListDataEvent e) {synchronizeToOrig();}
}
public void synchronizeModels() {
syncLeft.synchronizeToModel();
syncRight.synchronizeToModel();
}
}