Java/Swing Components/Dual List

Материал из Java эксперт
Перейти к: навигация, поиск

Dual Lists Demo

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Color; 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.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.SortedSet; import java.util.TreeSet; import javax.swing.AbstractListModel; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListCellRenderer; import javax.swing.ListModel; public class MainClass {

 public static void main(String args[]) {
   JFrame frame = new JFrame("Dual List Box Tester");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   DualListBox dual = new DualListBox();
   dual.addSourceElements(new String[] { "One", "Two", "Three" });
   frame.add(dual, BorderLayout.CENTER);
   frame.setSize(400, 300);
   frame.setVisible(true);
 }

} class DualListBox extends JPanel {

 private static final Insets EMPTY_INSETS = new Insets(0, 0, 0, 0);
 private static final String ADD_BUTTON_LABEL = "Add >>";
 private static final String REMOVE_BUTTON_LABEL = "<< Remove";
 private static final String DEFAULT_SOURCE_CHOICE_LABEL = "Available Choices";
 private static final String DEFAULT_DEST_CHOICE_LABEL = "Your Choices";
 private JLabel sourceLabel;
 private JList sourceList;
 private SortedListModel sourceListModel;
 private JList destList;
 private SortedListModel destListModel;
 private JLabel destLabel;
 private JButton addButton;
 private JButton removeButton;
 public DualListBox() {
   initScreen();
 }
 public String getSourceChoicesTitle() {
   return sourceLabel.getText();
 }
 public void setSourceChoicesTitle(String newValue) {
   sourceLabel.setText(newValue);
 }
 public String getDestinationChoicesTitle() {
   return destLabel.getText();
 }
 public void setDestinationChoicesTitle(String newValue) {
   destLabel.setText(newValue);
 }
 public void clearSourceListModel() {
   sourceListModel.clear();
 }
 public void clearDestinationListModel() {
   destListModel.clear();
 }
 public void addSourceElements(ListModel newValue) {
   fillListModel(sourceListModel, newValue);
 }
 public void setSourceElements(ListModel newValue) {
   clearSourceListModel();
   addSourceElements(newValue);
 }
 public void addDestinationElements(ListModel newValue) {
   fillListModel(destListModel, newValue);
 }
 private void fillListModel(SortedListModel model, ListModel newValues) {
   int size = newValues.getSize();
   for (int i = 0; i < size; i++) {
     model.add(newValues.getElementAt(i));
   }
 }
 public void addSourceElements(Object newValue[]) {
   fillListModel(sourceListModel, newValue);
 }
 public void setSourceElements(Object newValue[]) {
   clearSourceListModel();
   addSourceElements(newValue);
 }
 public void addDestinationElements(Object newValue[]) {
   fillListModel(destListModel, newValue);
 }
 private void fillListModel(SortedListModel model, Object newValues[]) {
   model.addAll(newValues);
 }
 public Iterator sourceIterator() {
   return sourceListModel.iterator();
 }
 public Iterator destinationIterator() {
   return destListModel.iterator();
 }
 public void setSourceCellRenderer(ListCellRenderer newValue) {
   sourceList.setCellRenderer(newValue);
 }
 public ListCellRenderer getSourceCellRenderer() {
   return sourceList.getCellRenderer();
 }
 public void setDestinationCellRenderer(ListCellRenderer newValue) {
   destList.setCellRenderer(newValue);
 }
 public ListCellRenderer getDestinationCellRenderer() {
   return destList.getCellRenderer();
 }
 public void setVisibleRowCount(int newValue) {
   sourceList.setVisibleRowCount(newValue);
   destList.setVisibleRowCount(newValue);
 }
 public int getVisibleRowCount() {
   return sourceList.getVisibleRowCount();
 }
 public void setSelectionBackground(Color newValue) {
   sourceList.setSelectionBackground(newValue);
   destList.setSelectionBackground(newValue);
 }
 public Color getSelectionBackground() {
   return sourceList.getSelectionBackground();
 }
 public void setSelectionForeground(Color newValue) {
   sourceList.setSelectionForeground(newValue);
   destList.setSelectionForeground(newValue);
 }
 public Color getSelectionForeground() {
   return sourceList.getSelectionForeground();
 }
 private void clearSourceSelected() {
   Object selected[] = sourceList.getSelectedValues();
   for (int i = selected.length - 1; i >= 0; --i) {
     sourceListModel.removeElement(selected[i]);
   }
   sourceList.getSelectionModel().clearSelection();
 }
 private void clearDestinationSelected() {
   Object selected[] = destList.getSelectedValues();
   for (int i = selected.length - 1; i >= 0; --i) {
     destListModel.removeElement(selected[i]);
   }
   destList.getSelectionModel().clearSelection();
 }
 private void initScreen() {
   setBorder(BorderFactory.createEtchedBorder());
   setLayout(new GridBagLayout());
   sourceLabel = new JLabel(DEFAULT_SOURCE_CHOICE_LABEL);
   sourceListModel = new SortedListModel();
   sourceList = new JList(sourceListModel);
   add(sourceLabel, new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.CENTER,
       GridBagConstraints.NONE, EMPTY_INSETS, 0, 0));
   add(new JScrollPane(sourceList), new GridBagConstraints(0, 1, 1, 5, .5, 1,
       GridBagConstraints.CENTER, GridBagConstraints.BOTH, EMPTY_INSETS, 0, 0));
   addButton = new JButton(ADD_BUTTON_LABEL);
   add(addButton, new GridBagConstraints(1, 2, 1, 2, 0, .25, GridBagConstraints.CENTER,
       GridBagConstraints.NONE, EMPTY_INSETS, 0, 0));
   addButton.addActionListener(new AddListener());
   removeButton = new JButton(REMOVE_BUTTON_LABEL);
   add(removeButton, new GridBagConstraints(1, 4, 1, 2, 0, .25, GridBagConstraints.CENTER,
       GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 0, 0));
   removeButton.addActionListener(new RemoveListener());
   destLabel = new JLabel(DEFAULT_DEST_CHOICE_LABEL);
   destListModel = new SortedListModel();
   destList = new JList(destListModel);
   add(destLabel, new GridBagConstraints(2, 0, 1, 1, 0, 0, GridBagConstraints.CENTER,
       GridBagConstraints.NONE, EMPTY_INSETS, 0, 0));
   add(new JScrollPane(destList), new GridBagConstraints(2, 1, 1, 5, .5, 1.0,
       GridBagConstraints.CENTER, GridBagConstraints.BOTH, EMPTY_INSETS, 0, 0));
 }
 private class AddListener implements ActionListener {
   public void actionPerformed(ActionEvent e) {
     Object selected[] = sourceList.getSelectedValues();
     addDestinationElements(selected);
     clearSourceSelected();
   }
 }
 private class RemoveListener implements ActionListener {
   public void actionPerformed(ActionEvent e) {
     Object selected[] = destList.getSelectedValues();
     addSourceElements(selected);
     clearDestinationSelected();
   }
 }

} class SortedListModel extends AbstractListModel {

 SortedSet<Object> model;
 public SortedListModel() {
   model = new TreeSet<Object>();
 }
 public int getSize() {
   return model.size();
 }
 public Object getElementAt(int index) {
   return model.toArray()[index];
 }
 public void add(Object element) {
   if (model.add(element)) {
     fireContentsChanged(this, 0, getSize());
   }
 }
 public void addAll(Object elements[]) {
   Collection<Object> c = Arrays.asList(elements);
   model.addAll(c);
   fireContentsChanged(this, 0, getSize());
 }
 public void clear() {
   model.clear();
   fireContentsChanged(this, 0, getSize());
 }
 public boolean contains(Object element) {
   return model.contains(element);
 }
 public Object firstElement() {
   return model.first();
 }
 public Iterator iterator() {
   return model.iterator();
 }
 public Object lastElement() {
   return model.last();
 }
 public boolean removeElement(Object element) {
   boolean removed = model.remove(element);
   if (removed) {
     fireContentsChanged(this, 0, getSize());
   }
   return removed;
 }

}

      </source>