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

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Fri Jul 22 01:01:51 CEST 2011


Author: mojays
Date: 2011-07-22 01:01:51 +0200 (Fri, 22 Jul 2011)
New Revision: 1645

Modified:
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/SelectionInputOption.java
Log:
new SelectionInputOption.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-07-21 20:56:49 UTC (rev 1644)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/SelectionInputOption.java	2011-07-21 23:01:51 UTC (rev 1645)
@@ -29,6 +29,7 @@
  ******************************************************************************/
 package de.schmitzm.swing.input;
 
+import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
@@ -37,10 +38,16 @@
 import java.util.Map;
 import java.util.Vector;
 
+import javax.swing.AbstractListModel;
 import javax.swing.BoxLayout;
+import javax.swing.DefaultListModel;
 import javax.swing.Icon;
 import javax.swing.JComboBox;
+import javax.swing.JList;
 import javax.swing.JRadioButton;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
 
 import de.schmitzm.swing.ButtonGroup;
 import de.schmitzm.swing.JPanel;
@@ -388,7 +395,7 @@
       comboBox.addItemListener( new ItemListener() {
         Object oldValue = null;
         public void itemStateChanged(ItemEvent e) {
-          if ( e.getStateChange() == e.SELECTED ) {
+          if ( e.getStateChange() == ItemEvent.SELECTED ) {
             Object newValue = getValue();
             if ( oldValue != newValue )
               fireOptionChanged(oldValue,newValue);
@@ -610,4 +617,328 @@
 //        fireOptionChanged(oldValue,newValue);
     }
   }
+
+  /**
+   * Diese Klasse stellt eine Auswahl-Option dar, die durch eine
+   * {@link JList} dargestellt wird.
+   * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+   * @version 1.0
+   */
+  public static class List<E> extends SelectionInputOption {
+
+    /**
+     * 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 List(String label, boolean inputNeeded, E[] value, int defIdx, Object[] display, int height, int width) {
+      super(label,inputNeeded,value,defIdx, display);
+      ((JList)inpComp).setPreferredSize( new Dimension(width,height) );
+      ((JList)inpComp).revalidate();
+    }
+
+    /**
+     * 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 List(String label, boolean inputNeeded, E[] value, E defvalue, Object[] display, int height, int width) {
+      super(label,inputNeeded,value,defvalue, display);
+      ((JList)inpComp).setPreferredSize( new Dimension(width,height) );
+      ((JList)inpComp).revalidate();
+    }
+
+    /**
+     * 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 List(String label, boolean inputNeeded, E[] value, E defValue, Object[] display) {
+      this(label,inputNeeded,value,defValue,display,50,80);
+    }
+
+    /**
+     * 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 List(String label, boolean inputNeeded, E[] value, E defValue, Object[] display, int height, int width, Map<Object,String> tooltip) {
+      super(label,inputNeeded,value,defValue,display,tooltip);
+      ((JList)inpComp).setPreferredSize( new Dimension(width,height) );
+      ((JList)inpComp).revalidate();
+    }
+
+    /**
+     * 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 List(String label, boolean inputNeeded, E[] value, Object[] display) {
+      this(label,inputNeeded,value,null,display,50,80);
+    }
+
+    /**
+     * 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 List(String label, boolean inputNeeded) {
+      this(label,inputNeeded,(E[])new Object[0],new Object[0]);
+    }
+
+    /**
+     * Erzeugt eine neue Instanz von {@link JList}.
+     */
+    protected JList createInputComponent() {
+      JList list = new JList(new AbstractListModel() {
+        @Override
+        public int getSize() {
+          if ( displayObject == null )
+            return 0;
+          return displayObject.length;
+        }
+        
+        @Override
+        public Object getElementAt(int index) {
+          return displayObject[index];
+        }
+      });
+      list.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
+      list.setPreferredSize( new Dimension(10,10) );
+      // Change Listener
+      list.getSelectionModel().addListSelectionListener( new ListSelectionListener() {
+        Object oldValue = null;
+        
+        @Override
+        public void valueChanged(ListSelectionEvent e) {
+          if ( e.getValueIsAdjusting() )
+            return;
+          Object newValue = getValue();
+          if ( oldValue != newValue )
+            fireOptionChanged(oldValue,newValue);
+          oldValue = newValue;
+        }
+      });
+      
+      return list;
+    }
+    
+    /**
+     * Liefert {@code true}.
+     */
+    @Override
+    public boolean isScrollPaneNeeded() {
+      return true;
+    }
+
+    /**
+     * Befuellt die {@link JList}-Liste neu.
+     */
+    protected void performSelectionUpdate() {
+      // wenn eine Leereingabe erlaubt ist, wird am Anfang ein
+      // null-Eintrag eingefuegt
+      if ( !inputNeeded() ) {
+        Object[] newSelObj = new Object[this.selectionObject.length+1];
+        Object[] newDisObj = new Object[this.displayObject.length+1];
+
+        newSelObj[0] = null;
+        newDisObj[0] = null;
+        for (int i=0; i<this.selectionObject.length; i++) {
+          newSelObj[i+1] = this.selectionObject[i];
+          newDisObj[i+1] = this.displayObject[i];
+        }
+        this.selectionObject = newSelObj;
+        this.displayObject   = newDisObj;
+      }
+    }
+
+    /**
+     * Liefert den Index, der in der {@link JList}-Liste ausgewaehlt wurde.
+     * @return <code>-1</code> falls kein Objekt ausgewaehlt wurde
+     */
+    public int getSelectedIndex() {
+      return ((JList)inpComp).getSelectedIndex();
+    }
+
+    /**
+     * Setzt den Index, der in der {@link JList}-Liste ausgewaehlt wurde.
+     * @param idx Listen-Index (-1 um eine Leer-Auswahl zu erzeugen)
+     */
+    public void setSelectedIndex(int idx) {
+      Object oldValue = getValue();
+      ((JList)inpComp).setSelectedIndex(idx);
+      Object newValue = getValue();
+      if ( oldValue != newValue || oldValue!=null && !oldValue.equals( getValue() ) )
+        fireOptionChanged(oldValue,newValue);
+    }
+  }
+
+//  /**
+//   * 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;
+//    }
+//  }
 }



More information about the Schmitzm-commits mailing list