[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