[Schmitzm-commits] r1775 - trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Thu Nov 10 17:21:16 CET 2011


Author: mojays
Date: 2011-11-10 17:21:15 +0100 (Thu, 10 Nov 2011)
New Revision: 1775

Modified:
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/SelectionInputOption.java
Log:
SelectionInputOption: new MultiList subclass which allows to select multiple values from list

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/SelectionInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/SelectionInputOption.java	2011-11-10 15:09:49 UTC (rev 1774)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/SelectionInputOption.java	2011-11-10 16:21:15 UTC (rev 1775)
@@ -35,6 +35,7 @@
 import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Vector;
@@ -813,139 +814,157 @@
     }
   }
 
-//  /**
-//   * Diese Klasse stellt eine Auswahl-Option dar, die durch eine
-//   * {@link JList} dargestellt wird, in der mehrere Werte ausgewaehlt
-//   * werden koennen. Als Wert liefert diese InputOption einen Array!
-//   * 
-//   * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
-//   * @version 1.0
-//   */
-//  public static class MultiList<E> extends List {
-//
-//    /**
-//     * Erzeugt eine neue Auswahl-Option.
-//     * @param label       Beschreibung
-//     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
-//     * @param value       die zur Auswahl stehenden Objekte
-//     * @param defIdx      Index der vorgeblendeten Auswahl
-//     * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
-//     *                    (kann <code>null</code> sein)
-//     * @exception IllegalArgumentException falls sich die Array-Groessen von
-//     *            <code>value</code> und <code>display</code> unterscheiden
-//     */
-//    public MultiList(String label, boolean inputNeeded, E[] value, int defIdx, Object[] display, int height, int width) {
-//      super(label,inputNeeded,value,defIdx, display,height,width);
-//    }
-//
-//    /**
-//     * Erzeugt eine neue Auswahl-Option.
-//     * @param label       Beschreibung
-//     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
-//     * @param value       die zur Auswahl stehenden Objekte
-//     * @param defValue    vorgeblendetes Auswahlobjekt
-//     * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
-//     *                    (kann <code>null</code> sein)
-//     * @exception IllegalArgumentException falls sich die Array-Groessen von
-//     *            <code>value</code> und <code>display</code> unterscheiden
-//     */
-//    public MultiList(String label, boolean inputNeeded, E[] value, E defvalue, Object[] display, int height, int width) {
-//      super(label,inputNeeded,value,defvalue,display,height,width);
-//    }
-//
-//    /**
-//     * Erzeugt eine neue Auswahl-Option.
-//     * @param label       Beschreibung
-//     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
-//     * @param value       die zur Auswahl stehenden Objekte
-//     * @param defValue    vorgeblendetes Auswahlobjekt
-//     * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
-//     *                    (kann <code>null</code> sein)
-//     * @exception IllegalArgumentException falls sich die Array-Groessen von
-//     *            <code>value</code> und <code>display</code> unterscheiden
-//     */
-//    public MultiList(String label, boolean inputNeeded, E[] value, E defValue, Object[] display) {
-//      super(label,inputNeeded,value,defValue,display);
-//    }
-//
-//    /**
-//     * Erzeugt eine neue Auswahl-Option.
-//     * @param label       Beschreibung
-//     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
-//     * @param value       die zur Auswahl stehenden Objekte
-//     * @param defValue    vorgeblendetes Auswahlobjekt
-//     * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
-//     *                    (kann <code>null</code> sein)
-//     * @param tooltip     die fuer jedes Auswahl-Objekt angezeigten Tooltips
-//     *                    (kann <code>null</code> sein)
-//     * @exception IllegalArgumentException falls sich die Array-Groessen von
-//     *            <code>value</code> und <code>display</code> unterscheiden
-//     */
-//    public MultiList(String label, boolean inputNeeded, E[] value, E defValue, Object[] display, int height, int width, Map<Object,String> tooltip) {
-//      super(label,inputNeeded,value,defValue,display,height,width,tooltip);
-//    }
-//
-//    /**
-//     * Erzeugt eine neue Auswahl-Option. Es wird das erste Auswahl-Objekt
-//     * vorgeblendet.
-//     * @param label       Beschreibung
-//     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
-//     * @param value       die zur Auswahl stehenden Objekte
-//     * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
-//     *                    (kann <code>null</code> sein)
-//     * @exception IllegalArgumentException falls sich die Array-Groessen von
-//     *            <code>value</code> und <code>display</code> unterscheiden
-//     */
-//    public MultiList(String label, boolean inputNeeded, E[] value, Object[] display) {
-//      super(label,inputNeeded,value,null,display);
-//    }
-//
-//    /**
-//     * Erzeugt eine leere Auswahl-Option. Diese muss nachtraeglich ueber
-//     * {@link #setSelectionObjects(Object[],Object[])} befuellt werden.
-//     * @param label       Beschreibung
-//     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
-//     */
-//    public MultiList(String label, boolean inputNeeded) {
-//      super(label,inputNeeded);
-//    }
-//
-//    /**
-//     * Erzeugt eine neue Instanz von {@link JList}.
-//     */
-//    protected JList createInputComponent() {
-//      JList list = super.createInputComponent();
-//      list.setSelectionMode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );
-//      return list;
-//    }
-//
-//    /**
-//     * Liefert die Indizes, die in der {@link JList}-Liste ausgewaehlt wurden.
-//     */
-//    public int[] getSelectedIndices() {
-//      return ((JList)inpComp).getSelectedIndices();
-//    }
-//
-//    /**
-//     * Liefert das Objekt, das zum aktuell ausgewaehlten Eintrag der
-//     * Auswahl-Liste gehoert.
-//     * @return <code>null</code> falls kein Objekt ausgewaehlt ist
-//     */
-//    protected E[] performGetValue() {
-//      int idx = getSelectedIndex();
-//      return null;//idx < 0 ? null : selectionObject[getSelectedIndex()];
-//    }
-//
-//    /**
-//     * Setzt das Objekt, das in der Auswahlliste angewaehlt wird. Ruft
-//     * {@link #setSelectedItem(Object)} auf.
-//     * @return immer <code>true</code>
-//     */
-//    protected boolean performSetValue(E[] newValue) {
-//      ((JList)inpComp).clearSelection();
-//      ((JList)inpComp).getI)getSelectionModel().clearSelection();
-//      setSelectedItem(newValue);
-//      return true;
-//    }
-//  }
+  /**
+   * Diese Klasse stellt eine Auswahl-Option dar, die durch eine
+   * {@link JList} dargestellt wird, in der mehrere Werte ausgewaehlt
+   * werden koennen. Als Wert liefert diese InputOption eine
+   * {@code java.util.List<E>}!
+   * 
+   * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+   * @version 1.0
+   */
+  public static class MultiList<E> extends List {
+
+    /**
+     * Erzeugt eine neue Auswahl-Option.
+     * @param label       Beschreibung
+     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
+     * @param value       die zur Auswahl stehenden Objekte
+     * @param defIdx      Index der vorgeblendeten Auswahl
+     * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
+     *                    (kann <code>null</code> sein)
+     * @exception IllegalArgumentException falls sich die Array-Groessen von
+     *            <code>value</code> und <code>display</code> unterscheiden
+     */
+    public MultiList(String label, boolean inputNeeded, E[] value, int defIdx, Object[] display, int height, int width) {
+      super(label,inputNeeded,value,defIdx, display,height,width);
+    }
+
+    /**
+     * Erzeugt eine neue Auswahl-Option.
+     * @param label       Beschreibung
+     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
+     * @param value       die zur Auswahl stehenden Objekte
+     * @param defValue    vorgeblendetes Auswahlobjekt
+     * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
+     *                    (kann <code>null</code> sein)
+     * @exception IllegalArgumentException falls sich die Array-Groessen von
+     *            <code>value</code> und <code>display</code> unterscheiden
+     */
+    public MultiList(String label, boolean inputNeeded, E[] value, E defvalue, Object[] display, int height, int width) {
+      super(label,inputNeeded,value,defvalue,display,height,width);
+    }
+
+    /**
+     * Erzeugt eine neue Auswahl-Option.
+     * @param label       Beschreibung
+     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
+     * @param value       die zur Auswahl stehenden Objekte
+     * @param defValue    vorgeblendetes Auswahlobjekt
+     * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
+     *                    (kann <code>null</code> sein)
+     * @exception IllegalArgumentException falls sich die Array-Groessen von
+     *            <code>value</code> und <code>display</code> unterscheiden
+     */
+    public MultiList(String label, boolean inputNeeded, E[] value, E defValue, Object[] display) {
+      super(label,inputNeeded,value,defValue,display);
+    }
+
+    /**
+     * Erzeugt eine neue Auswahl-Option.
+     * @param label       Beschreibung
+     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
+     * @param value       die zur Auswahl stehenden Objekte
+     * @param defValue    vorgeblendetes Auswahlobjekt
+     * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
+     *                    (kann <code>null</code> sein)
+     * @param tooltip     die fuer jedes Auswahl-Objekt angezeigten Tooltips
+     *                    (kann <code>null</code> sein)
+     * @exception IllegalArgumentException falls sich die Array-Groessen von
+     *            <code>value</code> und <code>display</code> unterscheiden
+     */
+    public MultiList(String label, boolean inputNeeded, E[] value, E defValue, Object[] display, int height, int width, Map<Object,String> tooltip) {
+      super(label,inputNeeded,value,defValue,display,height,width,tooltip);
+    }
+
+    /**
+     * Erzeugt eine neue Auswahl-Option. Es wird das erste Auswahl-Objekt
+     * vorgeblendet.
+     * @param label       Beschreibung
+     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
+     * @param value       die zur Auswahl stehenden Objekte
+     * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
+     *                    (kann <code>null</code> sein)
+     * @exception IllegalArgumentException falls sich die Array-Groessen von
+     *            <code>value</code> und <code>display</code> unterscheiden
+     */
+    public MultiList(String label, boolean inputNeeded, E[] value, Object[] display) {
+      super(label,inputNeeded,value,null,display);
+    }
+
+    /**
+     * Erzeugt eine leere Auswahl-Option. Diese muss nachtraeglich ueber
+     * {@link #setSelectionObjects(Object[],Object[])} befuellt werden.
+     * @param label       Beschreibung
+     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
+     */
+    public MultiList(String label, boolean inputNeeded) {
+      super(label,inputNeeded);
+    }
+
+    /**
+     * Erzeugt eine neue Instanz von {@link JList}, in der mehrere
+     * Werte ausgewaehlt werden koennen.
+     */
+    protected JList createInputComponent() {
+      JList list = super.createInputComponent();
+      list.setSelectionMode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );
+      return list;
+    }
+    
+    /**
+     * Liefert die Indizes, die in der {@link JList}-Liste ausgewaehlt wurden.
+     */
+    public int[] getSelectedIndices() {
+      return ((JList)inpComp).getSelectedIndices();
+    }
+
+    /**
+     * Liefert eine {@code List<E>} der aktuell ausgewaehlten Eintraege.
+     * @return <code>null</code> falls kein Objekt ausgewaehlt ist
+     */
+    @Override
+    protected java.util.List<E> performGetValue() {
+      int[] selIdx = getSelectedIndices();
+      java.util.List<E> selValues = new ArrayList<E>();
+      for (int i=0; i<selIdx.length; i++)
+        selValues.add( (E)selectionObject[selIdx[i]] );
+      return selValues;
+    }
+
+    /**
+     * Setzt die Objekte, die in der Auswahlliste angewaehlt sind.
+     * @return immer <code>true</code>
+     */
+    protected boolean performSetValues(java.util.Collection<E> newValue) {
+      ListSelectionModel sm = ((JList)inpComp).getSelectionModel();
+      sm.setValueIsAdjusting(true);
+      sm.clearSelection();
+      if ( newValue != null) {
+        for (int i=0; i<selectionObject.length; i++)
+          if ( newValue.contains(selectionObject[i]) )
+            sm.addSelectionInterval(i,i);
+      }
+      sm.setValueIsAdjusting(false);
+      return true;
+    }
+    
+    /**
+     * Setzt die Auswahl auf ein bestimmtes Objekt. Ist dieses nicht vorhanden,
+     * wird die Auswahlliste auf eine leere Auswahl eingestellt.
+     */
+    public void setSelectedItems(java.util.Collection<E> newValues) {
+      performSetValues(newValues);
+    }
+  }
 }



More information about the Schmitzm-commits mailing list