[Schmitzm-commits] r1431 - in trunk: schmitzm-core/src/main/java/de/schmitzm/swing schmitzm-core/src/main/java/de/schmitzm/swing/event schmitzm-core/src/main/java/de/schmitzm/swing/input schmitzm-core/src/main/java/de/schmitzm/swing/log4j schmitzm-core/src/test/java/de/schmitzm/testing schmitzm-gt/src/main/java/de/schmitzm/geotools schmitzm-gt/src/main/java/de/schmitzm/geotools/feature schmitzm-gt/src/main/java/de/schmitzm/geotools/gui schmitzm-gt/src/main/java/de/schmitzm/geotools/io

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Thu Jan 27 13:18:28 CET 2011


Author: mojays
Date: 2011-01-27 13:18:24 +0100 (Thu, 27 Jan 2011)
New Revision: 1431

Added:
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/BooleanInputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/BrowseInputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/ColorInputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/FileInputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOptionAdapter.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOptionListener.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/ManualInputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/MultipleOptionPane.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/SelectionInputOption.java
Removed:
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/BooleanInputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/BrowseInputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ColorInputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/FileInputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/InputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ManualInputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/MultipleOptionPane.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/SelectionInputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/event/InputOptionAdapter.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/event/InputOptionListener.java
Modified:
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/OperationTreePanel.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ResourceProviderManagerFrame.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/SwingUtil.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/log4j/LoggerFrame.java
   trunk/schmitzm-core/src/test/java/de/schmitzm/testing/SwingUtilTest.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/GTUtil.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/feature/FeatureTypeBuilderTableModel.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/CRSSelectionDialog.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/ColorMapPanel.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/FeatureInputOption.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/FeatureTypeInputOption.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/JMapEditorPane.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/JMapEditorToolBar.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/LayeredMapFrame.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/StyleToolBar.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtDbServerSettings.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtWfsServerSettings.java
Log:
InputOption classes moved to de.schmitzm.swing.input

Deleted: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/BooleanInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/BooleanInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/BooleanInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Martin O. J. Schmitz.
- * 
- * This file is part of the SCHMITZM library - a collection of utility 
- * classes based on Java 1.6, focusing (not only) on Java Swing 
- * and the Geotools library.
- * 
- * The SCHMITZM project is hosted at:
- * http://wald.intevation.org/projects/schmitzm/
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public License (license.txt)
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- * or try this link: http://www.gnu.org/licenses/lgpl.html
- * 
- * Contributors:
- *     Martin O. J. Schmitz - initial API and implementation
- *     Stefan A. Tzeggai - additional utility classes
- ******************************************************************************/
-package de.schmitzm.swing;
-
-import javax.swing.JCheckBox;
-
-//import org.geotools.data.DataAccessFactory.Param;
-
-/**
- * Diese Klasse stellt eine boolsche Eingabe-Option fuer das
- * {@link MultipleOptionPane} dar. Diese wird durch eine {@link JCheckBox}
- * dargestellt.
- * 
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
- *         (University of Bonn/Germany)
- * @version 1.0
- */
-public class BooleanInputOption extends InputOption {
-	/**
-	 * Erzeugt eine neue Eingabe-Option.
-	 * 
-	 * @param label
-	 *            Beschreibung
-	 * @param defValue
-	 *            gibt an, ob die Checkbox standardmaessig aktiviert ist
-	 */
-	public BooleanInputOption(String label, Boolean defValue) {
-		super(label, false);
-		// Bei einer Checkbox soll die Beschreibung nicht oberhalb
-		// des Eingabefeldes zu stehen, sondern mit der Checkbox in
-		// einer Zeile
-		// -> JLabel entfernen und statt dessen den Text der Checkbox setzen
-		this.remove(this.descLabel);
-		((JCheckBox) inpComp).setText(label);
-		// Standardwert setzen
-		if (defValue != null)
-			setValue(defValue);
-	}
-
-	/**
-	 * Erzeugt eine neue Eingabe-Option. Diese ist standardmaessig deaktiviert.
-	 * 
-	 * @param label
-	 *            Beschreibung
-	 */
-	public BooleanInputOption(String label) {
-		this(label, false);
-	}
-
-//	/**
-//	 * Erzeugt eine neue Eingabe-Option.
-//	 */
-//	public BooleanInputOption(Param param, Boolean defValue) {
-//		this(param.title.toString(), defValue);
-//		setToolTipText(param.description.toString());
-//	}
-//
-//	/**
-//	 * Erzeugt eine neue Eingabe-Option.
-//	 */
-//	public BooleanInputOption(Param param) {
-//		this(param.title.toString(), (Boolean) param.sample);
-//		setToolTipText(param.description.toString());
-//	}
-
-	/**
-	 * Erzeugt eine neue Instanz von {@link JCheckBox}.
-	 */
-	protected JCheckBox createInputComponent() {
-		return new JCheckBox();
-	}
-
-	/**
-	 * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst auf
-	 * Gueltigkeit und ruft dann {@link #performGetValue()} auf.
-	 * 
-	 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig ist
-	 *         (siehe {@link #isInputValid()})
-	 */
-	public Boolean getValue() {
-		return (Boolean) super.getValue();
-	}
-
-	/**
-	 * Liefert immer <code>true</code>, da keine speziellen Anforderungen an die
-	 * Text-Eingabe gestellt werden.
-	 */
-	protected boolean performIsInputValid() {
-		return true;
-	}
-
-	/**
-	 * Liefert immer <code>false</code>, da es keine Leereingabe gibt. Eine
-	 * nicht aktivierte Checkbox bedeutet den Wert FALSE.
-	 */
-	protected boolean performIsInputEmpty() {
-		return false;
-	}
-
-	/**
-	 * Liefert <code>true</code>, falls die Checkbox aktiviert ist.
-	 * 
-	 * @return einen <code>boolean</code>-Wert (<b>kein</b> {@link Boolean}
-	 *         -Objekt!)
-	 */
-	protected Boolean performGetValue() {
-		return ((JCheckBox) inpComp).isSelected();
-	}
-
-	/**
-	 * (De)aktiviert die Checkbox.
-	 * 
-	 * @param active
-	 *            definiert den neuen Status (muss vom Typ {@link Boolean}
-	 *            sein!)
-	 * @return <code>false</code> falls kein {@link Boolean} uebergeben wird.
-	 */
-	protected boolean performSetValue(Object active) {
-		if (!(active instanceof Boolean))
-			return false;
-		((JCheckBox) inpComp).setSelected((Boolean) active);
-		return true;
-	}
-}

Deleted: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/BrowseInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/BrowseInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/BrowseInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -1,160 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Martin O. J. Schmitz.
- * 
- * This file is part of the SCHMITZM library - a collection of utility 
- * classes based on Java 1.6, focusing (not only) on Java Swing 
- * and the Geotools library.
- * 
- * The SCHMITZM project is hosted at:
- * http://wald.intevation.org/projects/schmitzm/
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public License (license.txt)
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- * or try this link: http://www.gnu.org/licenses/lgpl.html
- * 
- * Contributors:
- *     Martin O. J. Schmitz - initial API and implementation
- *     Stefan A. Tzeggai - additional utility classes
- ******************************************************************************/
-package de.schmitzm.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
-import javax.swing.JTextField;
-
-import de.schmitzm.swing.event.InputOptionAdapter;
-
-/**
- * Die <code>BrowseInputOption</code> erweitert die {@linkplain ManualInputOption manuelle Text-Eingabe}
- * um eine Browse-Aktion. Welche konkrete Aktion beim Klick auf den Browse-Button
- * ausgefuehrt wird, bestimmt die jeweinige Implementierung.<br>
- * Der Wert dieser Eingabe-Option stellt keinen Text dar, sondern ein
- * zugehoeriges Objekt. Um ein Objekt sowohl ueber eine manuelle Texteingabe,
- * als auch ueber die Browse-Aktion angeben zu koennen, spezifiziert
- * <code>BrowseInputOption</code> zwei Methoden ({@link #convertFromString(String)},
- * {@link #convertToString(Object)}), ueber die eine entsprechende Umwandung zu
- * implementieren ist.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
- * @version 1.0
- */
-public abstract class BrowseInputOption  extends ManualInputOption {
-  /** Speichert den aktuellen Wert der Eingabe-Option. */
-  protected Object object = null;
-  /** Container enthaelt das Text-Eingabefeld und den Browse-Button. */
-  protected Container inpCompCont = new Container();
-  /** Der Button fuer die Browse-Aktion. */
-  protected JButton browseButton = new JButton("...");
-
-  /**
-   * Erzeugt eine neue Eingabe-Option.
-   * @param label Beschreibung der Eingabe
-   * @param inputNeeded gibt an, ob eine Eingabe in der Option erforderlich ist
-   * @param defValue Standard-Belegung fuer die Eingabe-Option
-   */
-  public BrowseInputOption(String label, boolean inputNeeded, Object defValue) {
-    super(label, inputNeeded, null);
-    setValue(defValue);
-
-    // Browse-Button formatieren
-    browseButton.setPreferredSize( new Dimension(30,10) );
-    browseButton.addActionListener( new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        browseAction();
-      }
-    });
-
-    // Eingabe-Feld formatieren
-    SwingUtil.setPreferredWidth(inpComp,200);
-    this.addInputOptionListener( new InputOptionAdapter() {
-      public void optionLostFocus(InputOption option) {
-        try {
-          setValue( convertFromString( ((JTextField)inpComp).getText() ) );
-        } catch (Exception err) {
-          ExceptionDialog.show(OPTION_COMPONENT,err,SwingUtil.RESOURCE.getString("Error"),SwingUtil.RESOURCE.getString("InvalidInputMess"));
-          setValue( getValue() );
-        }
-      }
-    });
-
-    // Neben dem Eingabefeld noch ein Browse-Button
-    inpCompCont.setLayout( new BorderLayout(10,0) );
-    inpCompCont.add(this.inpComp, BorderLayout.CENTER);
-    inpCompCont.add(this.browseButton, BorderLayout.EAST);
-    // normale Eingabe-Komponente durch Container ersetzen
-    remove(inpComp);
-    add(inpCompCont,BorderLayout.SOUTH);
-  }
-
-  /**
-   * Aktion des Browse-Button.
-   */
-  private void browseAction() {
-    Object newObj = performBrowse(this.getValue());
-    // Browse-Aktion abgebrochen
-    if ( newObj == null )
-      return;
-    this.setValue(newObj);
-  }
-
-  /**
-   * Liefert das zu der Text-Eingabe gehoerende Objekt.
-   */
-  protected Object performGetValue() {
-    return object;
-  }
-
-  /**
-   * Setzt den Wert der Eingabe-Option und befuellt entsprechend das
-   * Text-Feld der Eingabe-Option.
-   * @param newValue neuer Wert der Eingabe-Option (ein Objekt, <b>nicht</b> ein
-   *                 Wert fuer das Textfeld!)
-   * @return <code>false</code> falls das Objekt nicht in einen String umgewandelt
-   *         werden konnte
-   */
-  protected boolean performSetValue(Object newValue) {
-    try {
-      ((JTextField)inpComp).setText(convertToString(newValue));
-      this.object = newValue;
-      return true;
-    } catch (Exception err) {
-      return false;
-    }
-  }
-
-  /**
-   * Implementiert die Browse-Aktion die ausgefuehrt wird, wenn der Button
-   * der Eingabe-Option gedrueckt wird. Liefert ein neues Objekt fuer die
-   * Eingabe-Option.
-   * @param actValue aktueller Wert der Eingabe-Option
-   * @return <code>null</code> falls die Browse-Aktion abgebrochen wird
-   */
-  public abstract Object performBrowse(Object actValue);
-
-  /**
-   * Liefert das Objekt zu der Text-Eingabe der Option.
-   * @param objectStr Objekt-String
-   */
-  public abstract Object convertFromString(String objectStr);
-
-  /**
-   * Erzeugt einen (eindeutigen) String fuer ein Objekt.
-   * @param object Objekt
-   */
-  public abstract String convertToString(Object object);
-}

Deleted: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ColorInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ColorInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ColorInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -1,174 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Martin O. J. Schmitz.
- * 
- * This file is part of the SCHMITZM library - a collection of utility 
- * classes based on Java 1.6, focusing (not only) on Java Swing 
- * and the Geotools library.
- * 
- * The SCHMITZM project is hosted at:
- * http://wald.intevation.org/projects/schmitzm/
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public License (license.txt)
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- * or try this link: http://www.gnu.org/licenses/lgpl.html
- * 
- * Contributors:
- *     Martin O. J. Schmitz - initial API and implementation
- *     Stefan A. Tzeggai - additional utility classes
- ******************************************************************************/
-package de.schmitzm.swing;
-
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-import javax.swing.BorderFactory;
-import javax.swing.JColorChooser;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-
-/**
- * Diese Klasse stellt eine Farb-Eingabe-Option fuer das {@link MultipleOptionPane}
- * dar. Diese wird durch eine {@link JLabel} in der jeweiligen Farbe dargestellt.
- * Bei einem Klick auf das Label erscheint ein {@link JColorChooser}, ueber den
- * der Optionswert (Farbe) geaendert werden kann.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
- * @version 1.0
- */
-public class ColorInputOption extends InputOption {
-  private   JColorChooser colorChooser;
-  private   JDialog       dialog;
-
-  /**
-   * Erzeugt eine neue Eingabe-Option.
-   * @param label     Beschreibung
-   * @param inpNeeded gibt an, ob eine Leer-Eingabe erlaubt ist
-   */
-  public ColorInputOption(String label, boolean inpNeeded) {
-    this(label,inpNeeded,null);
-  }
-
-  /**
-   * Erzeugt eine neue Eingabe-Option.
-   * @param label     Beschreibung
-   * @param inpNeeded gibt an, ob eine Leer-Eingabe erlaubt ist
-   * @param defColor  vorgeblendeter Optionswert
-   */
-  public ColorInputOption(String label, boolean inpNeeded, Color defColor) {
-    super(label, inpNeeded);
-    setValue( (defColor != null) ? defColor : new Color(0, 0, 0, 0));
-
-    // Dialog zum Farbe auswaehlen
-    colorChooser = new JColorChooser();
-    dialog = JColorChooser.createDialog(
-        this,
-        "Farbe auswaehlen",
-        true, //modal
-        colorChooser,
-        new ActionListener() { //OK button handler
-             public void actionPerformed(ActionEvent e) {
-                 // wird auf OK geklickt wird die ausgewaehlte Farbe
-                 // uebernommen
-                 setValue(colorChooser.getColor());
-               }
-             },
-        null // CANCEL button handler
-    );
-  }
-
-  /**
-   * Erzeugt eine neue Instanz von {@link JLabel}. Dieses ist transparent und
-   * schwart umrandet.<br>
-   * Bei einem Klick auf das Label oeffnet sich ein {@link JColorChooser}
-   * ueber den eine neue Farbe ausgewaehlt werden kann.
-   */
-  protected JComponent createInputComponent() {
-//    // Eigentlich sollte ein JLabel verwendet werden. Dieses nimmt aber
-//    // nicht automatisch die maximale Container-Breite des uebergeordneten
-//    // Containers (bei SpringLayout) an. Deshalb wird ein TextField "vergewaltigt".
-//    JTextField l = new JTextField("");
-//    l.setEditable(false);
-//    l.setBorder(null);
-    JLabel l = new JLabel(" ");
-    //////////////
-    l.setOpaque(true);
-    //l.setBorder(BorderFactory.createLineBorder(Color.BLACK));
-    l.setBorder(BorderFactory.createRaisedBevelBorder());
-    //l.setBorder(BorderFactory.createLoweredBevelBorder());
-
-    // Beim Klick auf das Label erscheint der Auswahl-Dialog
-    // fuer die Farben
-    l.addMouseListener( new MouseAdapter() {
-      public void mouseClicked(MouseEvent e) {
-        if ( e.getButton() == MouseEvent.BUTTON1 ) {
-          colorChooser.setColor( inpComp.getBackground() );
-          dialog.setVisible(true);
-        }
-      }
-    });
-    return l;
-  }
-
-  /**
-   * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
-   * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
-   * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig ist
-   *         (siehe {@link #isInputValid()})
-   */
-  public Color getValue() {
-    return (Color)super.getValue();
-  }
-
-  /**
-   * Liefert immer <code>true</code>, da keine speziellen Anforderungen
-   * an die Farb-Eingabe gestellt werden.
-   */
-  protected boolean performIsInputValid() {
-    return true;
-  }
-
-  /**
-   * Liefert immer <code>true</code>, wenn keine Farbe (<code>null</code>)
-   * ausgewaehlt ist.
-   */
-  protected boolean performIsInputEmpty() {
-    return inpComp.getBackground() == null;
-  }
-
-  /**
-   * Liefert die aktuell in der Option ausgewaehlte Farbe.
-   */
-  protected Color performGetValue() {
-    return inpComp.getBackground();
-  }
-
-  /**
-   * Setzt den Wert der Farb-Option.
-   * @param newValue neue Farbe (muss eine {@link Color}-Instanz sein)
-   * @return <code>false</code> falls keine {@link Color} uebergeben wird.
-   */
-  protected boolean performSetValue(Object newValue) {
-    if ( !(newValue instanceof Color) )
-      return false;
-    Color color = (Color)newValue;
-    this.inpComp.setBackground(color);
-    this.inpComp.setToolTipText("RGB value: " + color.getRed() + ", "
-                                              + color.getGreen() + ", "
-                                              + color.getBlue());
-    return true;
-  }
-}

Deleted: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/FileInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/FileInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/FileInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Martin O. J. Schmitz.
- * 
- * This file is part of the SCHMITZM library - a collection of utility 
- * classes based on Java 1.6, focusing (not only) on Java Swing 
- * and the Geotools library.
- * 
- * The SCHMITZM project is hosted at:
- * http://wald.intevation.org/projects/schmitzm/
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public License (license.txt)
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- * or try this link: http://www.gnu.org/licenses/lgpl.html
- * 
- * Contributors:
- *     Martin O. J. Schmitz - initial API and implementation
- *     Stefan A. Tzeggai - additional utility classes
- ******************************************************************************/
-package de.schmitzm.swing;
-
-import java.io.File;
-
-import javax.swing.JFileChooser;
-
-/**
- * Diese Eingabe-Option dient dazu eine Datei-Angabe zu vorzunehmen. Dies
- * kann ueber manuelle Eingabe erfolgen, oder durch Browsen mittels einem
- * {@link JFileChooser}. Der Wert, den die Eingabe-Option repraesentiert stellt
- * ein {@link File}-Objekt dar.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
- * @version 1.0
- */
-public class FileInputOption extends BrowseInputOption {
-  private JFileChooser fileChooser = new JFileChooser();
-
-  /**
-   * Erzeugt eine neue Eingabe-Option.
-   * @param label Beschreibung der Eingabe-Option
-   * @param inputNeeded bestimmt, ob eine Eingabe erforderlich ist
-   * @param defValue Standard-Wert der vorgeblendet wird
-   */
-  public FileInputOption(String label, boolean inputNeeded, File defValue) {
-    super(label,inputNeeded,/*defValue == null ? new File(".") :*/ defValue);
-  }
-
-  /**
-   * Erzeugt eine neue Eingabe-Option.
-   * @param label Beschreibung der Eingabe-Option
-   * @param inputNeeded bestimmt, ob eine Eingabe erforderlich ist
-   */
-  public FileInputOption(String label, boolean inputNeeded) {
-    this(label,inputNeeded,null);
-  }
-
-  /**
-   * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
-   * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
-   * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig ist
-   *         (siehe {@link #isInputValid()})
-   */
-  public File getValue() {
-    return (File)super.getValue();
-  }
-
-  /**
-   * Liefert den Dateiauswahl-Dialog fuer die Browse-Aktion.
-   * @see JFileChooser
-   */
-  public JFileChooser getFileChooser() {
-    return fileChooser;
-  }
-
-  /**
-   * Liefert das ein {@link File}-Objekt zu der Text-Eingabe (Dateipfad)
-   * der Option.
-   * @param objectStr Objekt-String
-   */
-  public File convertFromString(String objectStr) {
-    return objectStr == null || objectStr.trim().equals("") ? null : new File(objectStr);
-  }
-
-  /**
-   * Liefert den kompletten Datei-Pfad fuer die durch die Eingabe-Option
-   * repraesentierten {@link File}.
-   * @param object {@link File}-Instanz
-   * @return {@code null}, fall kein {@link File}-Objekt uebergeben wird
-   */
-  public String convertToString(Object object) {
-//    if ( !(object instanceof File) )
-//      return null;
-    return ((File)object).getAbsolutePath();
-  }
-
-  /**
-   * Implementiert die Browse-Aktion die ausgefuehrt wird, wenn der Button der
-   * Eingabe-Option gedrueckt wird. Oeffnet einen {@link JFileChooser}.
-   * @param actValue aktueller Wert der Eingabe-Option
-   * @return <code>null</code> falls die Browse-Aktion abgebrochen wird
-   */
-  public File performBrowse(Object actValue) {
-    fileChooser.setSelectedFile( (File)actValue );
-    int ret = -1;
-    if ( fileChooser.getDialogType() == JFileChooser.OPEN_DIALOG )
-      ret = fileChooser.showOpenDialog(this.getInputComponent());
-    else
-      ret = fileChooser.showSaveDialog(this.getInputComponent());
-    if ( ret  == JFileChooser.APPROVE_OPTION )
-      return fileChooser.getSelectedFile();
-    return (File)actValue;
-  }
-}

Deleted: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/InputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/InputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/InputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -1,419 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Martin O. J. Schmitz.
- * 
- * This file is part of the SCHMITZM library - a collection of utility 
- * classes based on Java 1.6, focusing (not only) on Java Swing 
- * and the Geotools library.
- * 
- * The SCHMITZM project is hosted at:
- * http://wald.intevation.org/projects/schmitzm/
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public License (license.txt)
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- * or try this link: http://www.gnu.org/licenses/lgpl.html
- * 
- * Contributors:
- *     Martin O. J. Schmitz - initial API and implementation
- *     Stefan A. Tzeggai - additional utility classes
- ******************************************************************************/
-package de.schmitzm.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.FlowLayout;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-import java.util.Vector;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-
-import de.schmitzm.swing.event.InputOptionListener;
-
-/**
- * Diese Klasse stellt die allgemeine Oberklasse fuer eine Eingabe-Option
- * des {@link MultipleOptionPane} dar. Jede Option besteht aus einem
- * {@linkplain #descLabel Label} und einem {@linkplain #inpComp Eingabefeld}.
- * Die Art des Eingabefelds wird durch die Unterklassen spezifiziert.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
- * @version 1.0
- */
-public abstract class InputOption<E> extends JPanel {
-  /** Speichert eine Referenz auf die Eingabe-Option (<code>this</code>), damit
-   *  in inneren Klassen darauf referenziert werden kann. */
-  protected final Component OPTION_COMPONENT = this;
-  /** Enhaelt das Label mit der Beschreibung der Option, sowie ggf. das Obligatorisch-Kennzeichen. */
-  protected Container descLabelContainer = null;
-  /** Speichert die Beschreibung der Option */
-  protected JLabel    descLabel = null;
-  /** Kennzeichnet die Option als obligatorisch. */
-  protected JLabel    inputNeededLabel = null;
-  /** Speichert die Eingabe-Komponente der Option. */
-  protected JComponent inpComp   = null;
-  /** Kann eine Fehlermeldung enthalten, wenn die Eingabe nicht
-   *  valide ist. Kann direkt von {@link #performIsInputValid()} befuellt
-   *  werden. Wird automatisch befuellt, wenn {@link #performIsInputValid()}
-   *  eine Exception wirft. */
-  protected String invalidInputMess = "";
-
-  private   boolean   inpNeeded = false;
-  private   Vector    listeners = new Vector();
-  private   E         oldValue  = null;
-  
-  /** Label (hinter der Bezeichnung), mit dem obligatorische Felder markiert werden. */
-  private static String defaultInputNeededSign = "*";
-  /** Farbe, in der die Markierung für obligatorische Felder dargestellt wird. */
-  private static Color  defaultInputNeededSignColor = Color.RED;//new Color(240,100,100);
-
-  
-  /** 
-   * Liefert das Label (dargestellt hinter der Bezeichnung), mit dem
-   * obligatorische Felder markiert werden (Default: "*").
-   */
-  public static String getInputNeededSign() {
-    return defaultInputNeededSign;
-  }
-  
-  /** 
-   * Setzt das Label (dargestellt hinter der Bezeichnung), mit dem
-   * obligatorische Felder markiert werden (Default: "*").<br>
-   * Diese Einstellung wirkt sich erst auf neu erzeugte {@link InputOption}
-   * aus. Die Darstellung bestehender {@link InputOption}-Objekte aendert sich
-   * erst, wenn die inputNeeded-Eigenschaft neu gesetzt wird!
-   * @see #setInputNeeded(boolean)
-   */
-  public static void setInputNeededSign(String sign) {
-    defaultInputNeededSign = sign;
-  }
-
-  /** 
-   * Liefert die Farbe, mit der obligatorische Felder markiert werden
-   * (Default: {@link Color#RED}).
-   */
-  public static Color getInputNeededSignColor() {
-    return defaultInputNeededSignColor;
-  }
-  
-  /** 
-   * Setzt die Farbe, mit der obligatorische Felder markiert werden
-   * (Default: {@link Color#RED}).<br>
-   * Diese Einstellung wirkt sich erst auf neu erzeugte {@link InputOption}
-   * aus. Die Darstellung bestehender {@link InputOption}-Objekte aendert sich
-   * erst, wenn die inputNeeded-Eigenschaft neu gesetzt wird!
-   * @see #setInputNeeded(boolean)
-   */
-  public static void setInputNeededSignColor(Color signColor) {
-    defaultInputNeededSignColor = signColor;
-  }
-
-  /**
-   * Erzeugt eine neue Eingabe-Option.
-   * @param label       Beschreibung (wird im Label angezeigt)
-   * @param inputNeeded gibt an, ob eine Eingabe in der Option erforderlich ist
-   */
-  public InputOption(String label, boolean inputNeeded) {
-    this(label,inputNeeded,false);
-  }
-
-  /**
-   * Erzeugt eine neue Eingabe-Option.
-   * @param label       Beschreibung (wird im Label angezeigt)
-   * @param inputNeeded gibt an, ob eine Eingabe in der Option erforderlich ist
-   * @param centerInputComp bestimmt, ob die Eingabe-Komponente (siehe {@link #createInputComponent()})
-   *                        ins Zentrum des {@link BorderLayout} gelegt wird)
-   */
-  public InputOption(String label, boolean inputNeeded, boolean centerInputComp) {
-    this.inpNeeded = inputNeeded;
-
-    // Darstellung des Containers erzeugen
-    setLayout(new BorderLayout());
-    descLabel = new JLabel(label);
-    inputNeededLabel = new JLabel();
-    inputNeededLabel.setForeground(defaultInputNeededSignColor);
-    inpComp   = createInputComponent();
-    inpComp.addFocusListener( new FocusListener() {
-      public void focusGained(FocusEvent e) {
-        oldValue = getValue();
-        fireFocusGained();
-      }
-      public void focusLost(FocusEvent e) {
-        fireFocusLost();
-        if ( oldValue == null && getValue() != null ||
-             oldValue != null && !oldValue.equals( getValue() ) )
-          fireOptionChanged(oldValue,getValue());
-      }
-    });
-    setInputNeeded(inputNeeded);
-
-    // Elemente dem Container hinzufuegen
-    if ( label != null ) {
-      // put description and mandatory indicator in an
-      // container first
-      descLabelContainer = new Container();
-      descLabelContainer.setLayout( new FlowLayout(FlowLayout.LEFT,0,0) );
-      descLabelContainer.add( descLabel );
-      descLabelContainer.add( inputNeededLabel );
-      // add container to layout
-      add( descLabelContainer, BorderLayout.NORTH );
-      add( inpComp, centerInputComp ? BorderLayout.CENTER : BorderLayout.SOUTH );
-    } else {
-      add( inpComp, centerInputComp ? BorderLayout.CENTER : BorderLayout.NORTH );
-    }
-    doLayout();
-  }
-
-  /**
-   * Deaktiviert die Option, in dem die Eingabe-Komponente deaktiviert wird.
-   */
-  public void setEnabled(boolean enabled) {
-    super.setEnabled(enabled);
-    inpComp.setEnabled(enabled);
-  }
-
-  /**
-   * Setzt den Hilfetext fuer Eingabe-Komponente und Beschreibungslabel.
-   * @param text Hilfe-Text
-   */
-  public void setToolTipText(String text) {
-    super.setToolTipText(text);
-    if ( inpComp != null )
-      inpComp.setToolTipText(text);
-    if ( descLabel != null )
-      descLabel.setToolTipText(text);
-  }
-
-  /**
-   * Setzt den Fokus auf das Eingabe-Feld der {@code InputOption}.
-   */
-  public void grabFocus() {
-    inpComp.grabFocus();
-  }
-
-  /**
-   * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
-   * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
-   * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig ist
-   *         (siehe {@link #isInputValid()})
-   */
-  public E getValue() {
-    if ( !isInputValid() )
-      return null;
-    return performGetValue();
-  }
-
-  /**
-   * Setzt einen neuen Wert, mit der die Eingabe-Option belegt wird.
-   * Ruft {@link #performSetValue(Object)} auf und bewirkt ein
-   * {@link InputOptionListener#optionChanged(Object,Object)} fuer alle
-   * angeschlossenen {@link InputOptionListener}, falls sich der Wert der
-   * Option geaendert hat.
-   * @param newValue neuer Wert
-   * @return <code>false</code> gdw. der Objekt-Typ fuer die Option nicht
-   *         zulaessig ist
-   */
-  public boolean setValue(E newValue) {
-    // alten Wert speichern
-    oldValue = getValue();
-    if ( !performSetValue(newValue) )
-      return false;
-    newValue = getValue();
-    if ( oldValue==null && newValue!=null || oldValue!=null && newValue==null || oldValue!=null && !oldValue.equals( newValue ) )
-      fireOptionChanged(oldValue,getValue());
-    return true;
-  }
-
-  /**
-   * Liefert die Beschreibung der Eingabe-Option.
-   */
-  public String getLabel() {
-    return descLabel.getText();
-  }
-
-  /**
-   * Prueft, ob fuer das Feld zwingend eine Eingabe erforderlich ist.
-   */
-  public boolean inputNeeded() {
-    return inpNeeded;
-  }
-
-  /**
-   * Bestimmt, ob fuer das Feld zwingend eine Eingabe erforderlich ist.
-   */
-  public void setInputNeeded(boolean inpNeeded) {
-    this.inpNeeded = inpNeeded;
-//    if ( inpComp != null ) {
-//      if ( inpNeeded )
-//        inpComp.setBackground( defaultInputNeededBackground );
-//      else
-//        inpComp.setBackground( SwingUtil.getDefaultBackground() );
-//    }
-    if ( inputNeededLabel != null ) {
-      if ( inpNeeded )
-        inputNeededLabel.setText( " " + defaultInputNeededSign );
-      else
-        inputNeededLabel.setText( "" );
-    }
-      
-  }
-
-  /**
-   * Prueft, ob die Eingabe in dem Feld zulaessig ist. Die Implementierung
-   * prueft zuerst auf Leereingabe und ruft dann {@link #performIsInputValid()}
-   * auf.
-   * @return <code>false</code> falls die Option leer ist, aber eine Eingabe
-   *         erforderlich ist
-   */
-  public boolean isInputValid() {
-    // Leereingabe
-    if (  inputEmpty() )
-      return !inputNeeded();
-    try {
-      this.invalidInputMess = "";
-      return performIsInputValid();
-    } catch (Exception err) {
-      this.invalidInputMess = err.getMessage();
-      return false;
-    }
-  }
-
-  /**
-   * Prueft, ob die Eingabe in dem Feld zulaessig ist und wird ggf. eine
-   * Exception. Die Implementierung
-   */
-  public void checkInputAndError() throws Exception {
-    if ( !isInputValid() )
-      throw new Exception( getInvalidInputMessage() );
-  }
-
-  /**
-   * Liefert die letzte von {@link #isInputValid()} erzeugte
-   * Fehlermeldung.
-   */
-  public String getInvalidInputMessage() {
-    return invalidInputMess;
-  }
-
-  /**
-   * Prueft, ob das Feld eine Leereingabe beinhaltet.
-   * @see #performIsInputEmpty()
-   */
-  public boolean inputEmpty() {
-    return performIsInputEmpty();
-  }
-
-  /**
-   * Liefert eine Referenz auf die Eingabe-Komponente.<br>
-   * <b>Bemerke:</b><br>
-   * Uber diese Referenz sollte hoechsten ihr Layout beeinflusst werden, aber
-   * nicht ihr Verhalten, da ansonsten die Funktionalitaet der <code>InputOption</code>
-   * negativ beeinflusst werden kann!!
-   */
-  public JComponent getInputComponent() {
-    return inpComp;
-  }
-
-  /**
-   * Liefert eine Referenz auf das Beschreibungs-Label.<br>
-   * <b>Bemerke:</b><br>
-   * Uber diese Referenz sollte hoechsten das Layout beeinflusst werden, aber
-   * nicht das Verhalten, da ansonsten die Funktionalitaet der <code>InputOption</code>
-   * negativ beeinflusst werden kann!!
-   */
-  public JLabel getDescriptionLabel() {
-    return descLabel;
-  }
-
-  /**
-   * Erzeugt eine neue Instanz der Eingabe-Komponente. z.B. ein Text-Eingabefeld
-   * oder eine Combo-Box.
-   */
-  protected abstract JComponent createInputComponent();
-
-  /**
-   * Liefert den aktuellen Wert der Eingabe-Option.
-   */
-  protected abstract E performGetValue();
-
-  /**
-   * Setzt den aktuellen Wert der Eingabe-Option. Ist der Objekt-Typ fuer die
-   * Option nicht zulaessig, sollte nichts gemacht werden und <code>false</code>
-   * zurueckgegeben werden.
-   * @param newValue neuer Wert
-   * @return <code>false</code> gdw. der Objekt-Typ fuer die Eingabe-Option
-   *         nicht zulaessig ist
-   */
-  protected abstract boolean performSetValue(E newValue);
-
-  /**
-   * Prueft, ob die aktuelle Eingabe leer ist.
-   */
-  protected abstract boolean performIsInputEmpty();
-
-  /**
-   * Prueft, ob die aktuelle Eingabe leer ist.
-   */
-  protected abstract boolean performIsInputValid();
-
-  /**
-   * Fuegt der Eingabeoption einen Listener hinzu.
-   * @param l neuer Listener
-   */
-  public void addInputOptionListener(InputOptionListener l) {
-    listeners.add(l);
-  }
-
-  /**
-   * Entfernt einen Listener von der Eingabeoption.
-   * @param l zu entfernender Listener
-   */
-  public void removeInputOptionListener(InputOptionListener l) {
-    listeners.remove(l);
-  }
-
-  /**
-   * Informiert alle {@link InputOptionListener}, dass die Eingabe-Option
-   * den Fokus erhalten hat.
-   */
-  protected void fireFocusGained() {
-    for (int i=0; i<listeners.size(); i++)
-      if ( listeners.elementAt(i) instanceof InputOptionListener )
-        ((InputOptionListener)listeners.elementAt(i)).optionGainedFocus(this);
-  }
-
-  /**
-   * Informiert alle {@link InputOptionListener}, dass die Eingabe-Option
-   * den Fokus verloren hat.
-   */
-  protected void fireFocusLost() {
-    for (int i=0; i<listeners.size(); i++)
-      if ( listeners.elementAt(i) instanceof InputOptionListener )
-        ((InputOptionListener)listeners.elementAt(i)).optionLostFocus(this);
-  }
-
-  /**
-   * Informiert alle {@link InputOptionListener}, dass sich der Wert der
-   * Eingabeoption geaendert hat.
-   * @param oldValue alter Optionswert
-   * @param newValue neuer Optionswert
-   */
-  protected void fireOptionChanged(E oldValue, E newValue) {
-    for (int i=0; i<listeners.size(); i++)
-      if ( listeners.elementAt(i) instanceof InputOptionListener )
-        ((InputOptionListener)listeners.elementAt(i)).optionChanged(this,oldValue,newValue);
-  }
-
-}

Deleted: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ManualInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ManualInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ManualInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -1,593 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Martin O. J. Schmitz.
- * 
- * This file is part of the SCHMITZM library - a collection of utility 
- * classes based on Java 1.6, focusing (not only) on Java Swing 
- * and the Geotools library.
- * 
- * The SCHMITZM project is hosted at:
- * http://wald.intevation.org/projects/schmitzm/
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public License (license.txt)
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- * or try this link: http://www.gnu.org/licenses/lgpl.html
- * 
- * Contributors:
- *     Martin O. J. Schmitz - initial API and implementation
- *     Stefan A. Tzeggai - additional utility classes
- ******************************************************************************/
-package de.schmitzm.swing;
-
-import java.awt.BorderLayout;
-import java.awt.Container;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JCheckBox;
-import javax.swing.JPasswordField;
-import javax.swing.JTextField;
-
-/**
- * Diese Klasse stellt eine manuelle Eingabe-Option fuer das
- * {@link MultipleOptionPane} dar. Die Eingabe erfolgt ueber ein
- * {@link JTextField}. Ausser der "Input-Needed"-Restriktion, werden keine
- * weiteren Anforderungen an die Eingabe gestellt. Die Klasse kann nicht direkt
- * instanziiert werden. Statt dessen sind die eingebetteten Klassen
- * <ul>
- * <li>{@link ManualInputOption.Text ManualInputOption.Text}</li>
- * <li>{@link ManualInputOption.Integer ManualInputOption.Integer}</li>
- * <li>{@link ManualInputOption.Double ManualInputOption.Double}</li>
- * </ul>
- * zu verwenden.
- * 
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
- *         (University of Bonn/Germany)
- * @version 1.0
- */
-public class ManualInputOption extends InputOption {
-	/**
-	 * Erzeugt eine neue Eingabe-Option.
-	 * 
-	 * @param label
-	 *            Beschreibung
-	 * @param inputNeeded
-	 *            gibt an, ob eine Eingabe erforderlich ist
-	 * @param defValue
-	 *            Wert der im Textfeld vorgeblendet wird
-	 */
-	protected ManualInputOption(String label, boolean inputNeeded,
-			Object defValue) {
-		super(label, inputNeeded);
-		((JTextField) inpComp).setText(defValue != null ? defValue.toString()
-				: "");
-	}
-
-	/**
-	 * Erzeugt eine neue Instanz von {@link JTextField}.
-	 */
-	protected JTextField createInputComponent() {
-		return new JTextField();
-	}
-
-	/**
-	 * Liefert immer <code>true</code>, da keine speziellen Anforderungen an die
-	 * Text-Eingabe gestellt werden.
-	 */
-	protected boolean performIsInputValid() {
-		return true;
-	}
-
-	/**
-	 * Prueft, ob im Eingabefeld ein Leerstring eingegeben wurde.
-	 */
-	protected boolean performIsInputEmpty() {
-		return ((JTextField) inpComp).getText().trim().equals("");
-	}
-
-	/**
-	 * Liefert die aktuelle Eingabe im {@link JTextField}.
-	 */
-	protected Object performGetValue() {
-		return ((JTextField) inpComp).getText();
-	}
-
-	/**
-	 * Setzt die aktuelle Eingabe im {@link JTextField}.
-	 * 
-	 * @param newValue
-	 *            neuer Wert (muss vom Typ {@link String} sein!)
-	 * @return <code>false</code> wenn kein {@link String} uebergeben wird
-	 */
-	protected boolean performSetValue(Object newValue) {
-		if (newValue == null)
-			newValue = "";
-		if (!(newValue instanceof String))
-			return false;
-		((JTextField) inpComp).setText((String) newValue);
-		return true;
-	}
-
-	/**
-	 * Diese Klasse stellt eine Eingabe-Option dar, in der ein beliebigen Text
-	 * eingegeben werden kann.
-	 * 
-	 * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
-	 *         (University of Bonn/Germany)
-	 * @version 1.0
-	 */
-	public static class Text extends ManualInputOption {
-		/**
-		 * Erzeugt eine neue Eingabe-Option.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param inputNeeded
-		 *            gibt an, ob eine Eingabe erforderlich ist
-		 * @param defValue
-		 *            Wert der im Textfeld vorgeblendet wird
-		 */
-		public Text(String label, boolean inputNeeded, String defValue) {
-			super(label, inputNeeded, defValue);
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param inputNeeded
-		 *            gibt an, ob eine Eingabe erforderlich ist
-		 */
-		public Text(String label, boolean inputNeeded) {
-			this(label, inputNeeded, "");
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
-		 * erforderlich ist.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 */
-		public Text(String label) {
-			this(label, true, "");
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
-		 * erforderlich ist.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param defValue
-		 *            Wert der im Textfeld vorgeblendet wird
-		 */
-		public Text(String label, String defValue) {
-			this(label, true, defValue);
-		}
-		
-		/**
-		 * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
-		 * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
-		 * 
-		 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig
-		 *         ist (siehe {@link #isInputValid()})
-		 */
-		public String getValue() {
-			return (String) super.getValue();
-		}
-	}
-
-	/**
-	 * Diese Klasse stellt eine Eingabe-Option dar, in der ein Integer-Zahlen
-	 * eingegeben werden kann.
-	 * 
-	 * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
-	 *         (University of Bonn/Germany)
-	 * @version 1.0
-	 */
-	public static class Integer extends ManualInputOption {
-		/**
-		 * Erzeugt eine neue Eingabe-Option.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param inputNeeded
-		 *            gibt an, ob eine Eingabe erforderlich ist
-		 * @param defValue
-		 *            Wert der im Textfeld vorgeblendet wird
-		 */
-		public Integer(String label, boolean inputNeeded, java.lang.Integer defValue) {
-			super(label, inputNeeded, defValue != null ? String.valueOf(defValue) : null);
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option. Auch wenn die leere Eingabe u.U.
-		 * nicht zulaessig ist, wird ein Leerstring vorgeblendet.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param inputNeeded
-		 *            gibt an, ob eine Eingabe erforderlich ist
-		 */
-		public Integer(String label, boolean inputNeeded) {
-			super(label, inputNeeded, "");
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
-		 * erforderlich ist. Auch wenn die leere Eingabe u.U. nicht zulaessig
-		 * ist, wird ein Leerstring vorgeblendet.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 */
-		public Integer(String label) {
-			super(label, true, "");
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
-		 * erforderlich ist.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 */
-		public Integer(String label, java.lang.Integer defValue) {
-			this(label, true, defValue);
-		}
-
-		/**
-		 * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
-		 * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
-		 * 
-		 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig
-		 *         ist (siehe {@link #isInputValid()})
-		 */
-		public java.lang.Integer getValue() {
-			return (java.lang.Integer) super.getValue();
-		}
-
-		/**
-		 * Transformiert die Text-Eingabe in einen Integer.
-		 * 
-		 * @return <code>null</code> falls das Eingabefeld leer ist.
-		 */
-		protected java.lang.Integer performGetValue() {
-			if (inputEmpty())
-				return null;
-			return java.lang.Integer.parseInt(((JTextField) inpComp).getText());
-		}
-
-		/**
-		 * Prueft, ob ein gueltiger Integer-Wert im Feld eingegeben wurde.
-		 */
-		protected boolean performIsInputValid() {
-			try {
-				java.lang.Integer.parseInt(((JTextField) inpComp).getText());
-			} catch (NumberFormatException err) {
-				return false;
-			}
-			return super.performIsInputValid();
-		}
-	}
-
-	/**
-	 * Diese Klasse stellt eine Eingabe-Option dar, in der ein Double-Zahlen
-	 * eingegeben werden kann.
-	 * 
-	 * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
-	 *         (University of Bonn/Germany)
-	 * @version 1.0
-	 */
-	public static class Double extends ManualInputOption {
-		/**
-		 * Erzeugt eine neue Eingabe-Option.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param inputNeeded
-		 *            gibt an, ob eine Eingabe erforderlich ist
-		 * @param defValue
-		 *            Wert der im Textfeld vorgeblendet wird
-		 */
-		public Double(String label, boolean inputNeeded, double defValue) {
-			super(label, inputNeeded, String.valueOf(defValue));
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option. Auch wenn die leere Eingabe u.U.
-		 * nicht zulaessig ist, wird ein Leerstring vorgeblendet.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param inputNeeded
-		 *            gibt an, ob eine Eingabe erforderlich ist
-		 */
-		public Double(String label, boolean inputNeeded) {
-			super(label, inputNeeded, "");
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
-		 * erforderlich ist. Auch wenn die leere Eingabe u.U. nicht zulaessig
-		 * ist, wird ein Leerstring vorgeblendet.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 */
-		public Double(String label) {
-			super(label, true, "");
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
-		 * erforderlich ist.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param defValue
-		 *            Wert der im Textfeld vorgeblendet wird
-		 */
-		public Double(String label, int defValue) {
-			this(label, true, defValue);
-		}
-
-		/**
-		 * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
-		 * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
-		 * 
-		 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig
-		 *         ist (siehe {@link #isInputValid()})
-		 */
-		public java.lang.Double getValue() {
-			return (java.lang.Double) super.getValue();
-		}
-
-		/**
-		 * Transformiert die Text-Eingabe in einen Double.
-		 * 
-		 * @return <code>null</code> falls das Eingabefeld leer ist.
-		 */
-		protected java.lang.Double performGetValue() {
-			if (inputEmpty())
-				return null;
-			return java.lang.Double.parseDouble(((JTextField) inpComp)
-					.getText());
-		}
-
-		/**
-		 * Prueft, ob ein gueltiger Double-Wert im Feld eingegeben wurde.
-		 */
-		protected boolean performIsInputValid() {
-			try {
-				java.lang.Double.parseDouble(((JTextField) inpComp).getText());
-			} catch (NumberFormatException err) {
-				return false;
-			}
-			return super.performIsInputValid();
-		}
-	}
-
-	/**
-	 * Diese Klasse stellt eine Eingabe-Option dar, in der ein (verdecktes)
-	 * Passwort eingegeben werden kann. Zu beachten ist, dass der Rueckgabewert
-	 * dieser {@link InputOption} kein {@link String} ist, sondern ein
-	 * {@code char[]}.
-	 * 
-	 * @see JPasswordField#getPassword()
-	 * @see JPasswordField#getText()
-	 * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
-	 *         (University of Bonn/Germany)
-	 * @version 1.0
-	 */
-	public static class Password extends ManualInputOption {
-		/**
-		 * Erzeugt eine neue Eingabe-Option.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param inputNeeded
-		 *            gibt an, ob eine Eingabe erforderlich ist
-		 * @param defValue
-		 *            Wert der im Textfeld vorgeblendet wird
-		 */
-		public Password(String label, boolean inputNeeded, String defValue) {
-			super(label, inputNeeded, defValue);
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param inputNeeded
-		 *            gibt an, ob eine Eingabe erforderlich ist
-		 */
-		public Password(String label, boolean inputNeeded) {
-			this(label, inputNeeded, "");
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
-		 * erforderlich ist.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 */
-		public Password(String label) {
-			this(label, true, "");
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
-		 * erforderlich ist.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param defValue
-		 *            Wert der im Textfeld vorgeblendet wird
-		 */
-		public Password(String label, String defValue) {
-			this(label, true, defValue);
-		}
-
-		/**
-		 * Erzeugt eine neue Instanz von {@link JPasswordField}.
-		 */
-		protected JPasswordField createInputComponent() {
-			return new JPasswordField();
-		}
-
-		/**
-		 * Liefert die aktuelle Eingabe im {@link JPasswordField}.
-		 */
-		protected Object performGetValue() {
-			return ((JPasswordField) inpComp).getPassword();
-		}
-
-		/**
-		 * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
-		 * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
-		 * 
-		 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig
-		 *         ist (siehe {@link #isInputValid()})
-		 */
-		public char[] getValue() {
-			return (char[]) super.getValue();
-		}
-	}
-
-	/**
-	 * Diese Klasse stellt eine Eingabe-Option dar, in der ein (verdecktes)
-	 * Passwort eingegeben werden kann. Neben dem Textfeld fuer die
-	 * Passwort-Eingabe enthaelt die Eingabe-Option noch eine Checkbox, ueber
-	 * die das Passwort im Klartext angezeigt werden kann.<br>
-	 * Zu beachten ist, dass der Rueckgabewert dieser {@link InputOption} kein
-	 * {@link String} ist, sondern ein {@code char[]}.
-	 * 
-	 * @see JPasswordField#getPassword()
-	 * @see JPasswordField#getText()
-	 * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
-	 *         (University of Bonn/Germany)
-	 * @version 1.0
-	 */
-	public static class PasswordViewable extends Password {
-		private char oldEchoChar = '*';
-
-		/**
-		 * Container enthaelt das Text-Eingabefeld und die Checkbox, um das
-		 * Passwort sichtbar zu machen.
-		 */
-		protected Container inpCompCont = new Container();
-		/** Der Button fuer die Browse-Aktion. */
-		protected JCheckBox visibleCheckBox = new JCheckBox(
-				SwingUtil.R("ManualInputOption.PasswordVisible.visibility"),
-				false);
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param inputNeeded
-		 *            gibt an, ob eine Eingabe erforderlich ist
-		 * @param defValue
-		 *            Wert der im Textfeld vorgeblendet wird
-		 */
-		public PasswordViewable(String label, boolean inputNeeded,
-				String defValue) {
-			super(label, inputNeeded, defValue);
-
-			visibleCheckBox.addActionListener(new ActionListener() {
-				public void actionPerformed(ActionEvent e) {
-					setPasswortVisible(visibleCheckBox.isSelected());
-				}
-			});
-
-			// Neben dem Eingabefeld noch ein Browse-Button
-			inpCompCont.setLayout(new BorderLayout());
-			inpCompCont.add(this.inpComp, BorderLayout.CENTER);
-			inpCompCont.add(this.visibleCheckBox, BorderLayout.EAST);
-			// normale Eingabe-Komponente durch Container ersetzen
-			remove(inpComp);
-			add(inpCompCont, BorderLayout.SOUTH);
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param inputNeeded
-		 *            gibt an, ob eine Eingabe erforderlich ist
-		 */
-		public PasswordViewable(String label, boolean inputNeeded) {
-			this(label, inputNeeded, "");
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
-		 * erforderlich ist.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 */
-		public PasswordViewable(String label) {
-			this(label, true, "");
-		}
-
-		/**
-		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
-		 * erforderlich ist.
-		 * 
-		 * @param label
-		 *            Beschreibung
-		 * @param defValue
-		 *            Wert der im Textfeld vorgeblendet wird
-		 */
-		public PasswordViewable(String label, String defValue) {
-			this(label, true, defValue);
-		}
-
-		/**
-		 * Erzeugt eine neue Instanz von {@link JPasswordField}.
-		 */
-		protected JPasswordField createInputComponent() {
-			JPasswordField pwField = super.createInputComponent();
-			oldEchoChar = pwField.getEchoChar();
-			return pwField;
-		}
-
-		/**
-		 * Sets the passwort (in)visible in the component.
-		 */
-		public void setPasswortVisible(boolean visible) {
-			// remember old echo character
-			if (((JPasswordField) inpComp).getEchoChar() != 0)
-				oldEchoChar = ((JPasswordField) inpComp).getEchoChar();
-			((JPasswordField) inpComp).setEchoChar(visible ? 0 : oldEchoChar);
-			visibleCheckBox.setSelected(visible);
-		}
-
-		/**
-		 * Return whether the passwort is (in)visible in the component.
-		 */
-		public boolean isPasswortVisible() {
-			return ((JPasswordField) inpComp).getEchoChar() == 0;
-		}
-
-	}
-
-}

Deleted: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/MultipleOptionPane.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/MultipleOptionPane.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/MultipleOptionPane.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -1,194 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Martin O. J. Schmitz.
- * 
- * This file is part of the SCHMITZM library - a collection of utility 
- * classes based on Java 1.6, focusing (not only) on Java Swing 
- * and the Geotools library.
- * 
- * The SCHMITZM project is hosted at:
- * http://wald.intevation.org/projects/schmitzm/
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public License (license.txt)
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- * or try this link: http://www.gnu.org/licenses/lgpl.html
- * 
- * Contributors:
- *     Martin O. J. Schmitz - initial API and implementation
- *     Stefan A. Tzeggai - additional utility classes
- ******************************************************************************/
-package de.schmitzm.swing;
-
-import java.awt.Component;
-
-import javax.swing.JDialog;
-import javax.swing.JOptionPane;
-
-/**
- * Diese Klasse erweitert {@link JOptionPane} um einen Ok/Abbrechen-Dialog, der
- * mehrfache Werte gleichzeitig abfragt. Die Art der Eingaben wird ueber
- * Instanzen der  Klasse {@link InputOption} spezifiziert.<br>
- * Ueber die statische Funktion
- * {@link #showMultipleInputDialog(Component,String,InputOption[])} kann ein
- * solcher Dialog angezeigt werden.<br>
- * Darueber hinaus bietet die statische Funktion
- * {@link #showClassAndDescInputDialog(Component,String,Class[],String)} einen
- * speziellen Dialog, der eine Auswahl an Klassennamen anzeigt und zu der
- * ausgewaehlten Klasse eine Beschreibung abfragt.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
- * @version 1.0
- */
-public class MultipleOptionPane extends JOptionPane {
-  /** Speichert die Eingabe-Optionen des MultipleOptionPane. */
-  protected InputOption[] multipleOption = null;
-
-  /**
-   * Erzeugt einen neuen Ok/Abbrechen-Dialog mit mehrfachen Eingabefeldern.
-   * @param multipleOption Eingabe-Optionen
-   */
-  public MultipleOptionPane(InputOption[] multipleOption) {
-    super();
-    this.multipleOption = multipleOption.clone();
-    this.setMessageType(JOptionPane.INFORMATION_MESSAGE);
-    this.setOptionType(JOptionPane.OK_CANCEL_OPTION);
-    this.setMessage( this.multipleOption );
-  }
-
-  /**
-   * Liefert die Eingabe-Optionen des <code>MultipleOptionPane</code>.
-   */
-  public InputOption[] getMultipleOptions() {
-    return multipleOption.clone();
-  }
-
-  /**
-   * Prueft, ob die Eingaben in allen Felden zulaessig sind.
-   */
-  public boolean multipleOptionsValid() {
-    return getInvalidOption() == null;
-  }
-
-  /**
-   * Prueft, ob alle Eingaben zulaessig sind und gibt die erste fehlerhafte
-   * Option zurueck.
-   * @return <code>null</code> wenn alle Eingaben korrekt sind
-   */
-  private InputOption getInvalidOption() {
-    for (int i=0; i<multipleOption.length; i++)
-      if ( !multipleOption[i].isInputValid() )
-        return multipleOption[i];
-    return null;
-  }
-
-  /**
-   * Liefert die Eingaben, die in dem <code>MultipleOptionPane</code>
-   * gemacht wurden.
-   * @return <code>null</code> falls der Dialog noch aktiv ist oder
-   *         nicht ueber die Ok-Option verlassen wurde
-   */
-  public Object[] getMultipleOptionValues() {
-    if ( getValue() == null || (Integer)getValue() != JOptionPane.OK_OPTION)
-      return null;
-    Object[] value = new Object[ multipleOption.length ];
-    for (int i=0; i<value.length; i++)
-      value[i] = multipleOption[i].getValue();
-    return value;
-  }
-
-  /**
-   * Zeigt einen modalen Ok/Abbrechen-Dialog mit mehrfachen Eingabefeldern an.
-   * @param parent Uebergeordnetes Fenster, in dem der Dialog angezeigt wird
-   *               (kann <code>null</code> sein)
-   * @param title  Titel fuer den Dialog
-   * @param option Eingabefelder
-   * @return die Werte, die in den einzelnen Feldern gemacht wurden, oder
-   *         <code>null</code>, falls der Dialog nicht ueber die Ok-Option
-   *         verlassen wurde
-   */
-  public static Object[] showMultipleInputDialog(Component parent, String title, InputOption... option) {
-    MultipleOptionPane pane   = new MultipleOptionPane(option);
-    JDialog            dialog = pane.createDialog(parent,title);
-    InputOption        invalidOption = null;
-    do {
-      dialog.setVisible(true);
-      boolean cancel = pane.getValue() == null || ((Integer)pane.getValue() != JOptionPane.OK_OPTION);
-      invalidOption = !cancel ? pane.getInvalidOption() : null;
-
-      if ( invalidOption != null ) {
-        String invalidOptionName = invalidOption.getLabel();
-        String errorDesc         = invalidOption.getInvalidInputMessage();
-        String mess = SwingUtil.RESOURCE.getString("InvalidInputMess");
-        if ( invalidOptionName != null && !invalidOptionName.trim().equals("") )
-          mess = mess.concat(": '").concat(invalidOptionName).concat("'");
-        if ( errorDesc != null && !errorDesc.trim().equals("") )
-          mess = mess.concat("\n").concat(errorDesc);
-        showMessageDialog(pane,mess,SwingUtil.RESOURCE.getString("Error"),JOptionPane.ERROR_MESSAGE);
-      }
-
-    } while ( invalidOption != null );
-    return pane.getMultipleOptionValues();
-  }
-
-  /**
-   * Zeigt einen modalen Ok/Abbrechen-Dialog mit einem Klassen-Auswahlfeld und
-   * einem Text-Eingabefeld fuer eine Beschreibung an. Eine Eingabe in beiden
-   * Feldern ist zwingend erforderlich.
-   * @param parent      Uebergeordnetes Fenster, in dem der Dialog angezeigt wird
-   *                    (kann <code>null</code> sein)
-   * @param title       Titel fuer den Dialog
-   * @param classOption Klassen, die im Dialog zur Auswahl gestellt werden
-   * @param defaultText Default-Wert fuer das Text-Eingabefeld
-   * @return Array mit 2 Werten (0 = ausgewaehlte Klasse [<code>Class</code>];
-   *         1 = eingegebene Beschreibung [<code>String</code>]), oder
-   *         <code>null</code>, falls der Dialog nicht ueber die Ok-Option
-   *         verlassen wurde
-   */
-  public static Object[] showClassAndDescInputDialog(Component parent, String title, Class[] classOption, String defaultText) {
-    String[] classDesc = new String[classOption.length];
-    for (int i=0; i<classDesc.length; i++)
-      classDesc[i] = classOption[i].getName();
-
-    return showMultipleInputDialog(
-      parent,
-      title,
-        new InputOption[] { new SelectionInputOption.Combo(SwingUtil.RESOURCE.getString("Class")+":",true,classOption,classDesc),
-                            new ManualInputOption.Text(SwingUtil.RESOURCE.getString("Description")+":",true,defaultText) }
-    );
-  }
-
-
-  /**
-   * Zeigt einen Dialog mit mehreren Options-Buttons dar.
-   * @param parent       Parent-Komponente, ueber der der Dialog angezeigt wird
-   * @param type         Art der Meldung ({@link JOptionPane#ERROR_MESSAGE},
-   *                     {@link JOptionPane#INFORMATION_MESSAGE} oder {@link JOptionPane#QUESTION_MESSAGE})
-   * @param title        Titel des Dialog-Fensters
-   * @param message      Meldung die angezeigt wird
-   * @param options      Bezeichnungen der Button, die zur Auswahl stehen
-   * @param initialValue Bezeichnung des standardmaessig ausgewaehlten Button
-   * @return Die Bezeichnung ({@code String}) des Buttons, der ausgewaehlt wurde,
-   *         oder {@code null}, wenn der Dialog ueber das System-Menu abgebrochen
-   *         wurde
-   */
-  public static Object showMultipleOptionDialog(Component parent, int type, String title, Object message, String[] options, String initialValue) {
-    JOptionPane optionPane = new JOptionPane();
-    optionPane.setMessageType(type);
-    optionPane.setOptionType(JOptionPane.OK_CANCEL_OPTION);
-    optionPane.setMessage( message );
-    optionPane.setOptions( options );
-    optionPane.setInitialValue(initialValue);
-    JDialog dialog = optionPane.createDialog(parent,title);
-    dialog.setVisible(true);
-    return optionPane.getValue();
-  }
-}

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/OperationTreePanel.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/OperationTreePanel.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/OperationTreePanel.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -45,6 +45,8 @@
 
 import de.schmitzm.lang.tree.OperationTree;
 import de.schmitzm.lang.tree.OperationTreeParser;
+import de.schmitzm.swing.input.ManualInputOption;
+import de.schmitzm.swing.input.SelectionInputOption;
 
 /**
  * Diese Klasse stellt eine Panel zur Vefuegung, mit der eine einfache arithmetische

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ResourceProviderManagerFrame.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ResourceProviderManagerFrame.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ResourceProviderManagerFrame.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -56,7 +56,11 @@
 
 import de.schmitzm.lang.LocaleComparator;
 import de.schmitzm.lang.ResourceProvider;
-import de.schmitzm.swing.event.InputOptionAdapter;
+import de.schmitzm.swing.input.InputOption;
+import de.schmitzm.swing.input.InputOptionAdapter;
+import de.schmitzm.swing.input.ManualInputOption;
+import de.schmitzm.swing.input.MultipleOptionPane;
+import de.schmitzm.swing.input.SelectionInputOption;
 
 
 /**

Deleted: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/SelectionInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/SelectionInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/SelectionInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -1,609 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Martin O. J. Schmitz.
- * 
- * This file is part of the SCHMITZM library - a collection of utility 
- * classes based on Java 1.6, focusing (not only) on Java Swing 
- * and the Geotools library.
- * 
- * The SCHMITZM project is hosted at:
- * http://wald.intevation.org/projects/schmitzm/
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public License (license.txt)
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- * or try this link: http://www.gnu.org/licenses/lgpl.html
- * 
- * Contributors:
- *     Martin O. J. Schmitz - initial API and implementation
- *     Stefan A. Tzeggai - additional utility classes
- ******************************************************************************/
-package de.schmitzm.swing;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.swing.BoxLayout;
-import javax.swing.Icon;
-import javax.swing.JComboBox;
-import javax.swing.JRadioButton;
-
-/**
- * Diese Klasse stellt eine Auswahl-Eingabe-Option fuer das {@link MultipleOptionPane}
- * dar. Die Klasse kann nicht direkt instanziiert werden.
- * Statt dessen sind die eingebetteten Klassen
- * <ul>
- * <li>{@link SelectionInputOption.Combo SelectionInputOption.Combo}</li>
- * </ul>
- * zu verwenden.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
- * @version 1.0
- */
-public abstract class SelectionInputOption<E> extends InputOption<E> {
-  /** Speichert die Objekte, die zur Auswahl stehen. */
-  protected E[] selectionObject = null;
-  /** Speichert die Objekte, die fuer die Auswahl angezeigt werden. */
-  protected Object[] displayObject   = null;
-  /** Speichert fuer jedes {@link #selectionObject} einen ToolTip, der
-   *  fuer das Auswahl-Objekt angezeigt wird. */
-  protected Map<Object,String> displayToolTip  = new HashMap<Object, String>();
-
-  /**
-   * Erzeugt eine neue Eingabe-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
-   */
-  protected SelectionInputOption(String label, boolean inputNeeded, E[] value, int defIdx, Object[] display) {
-    super(label,inputNeeded);
-    // Referenz auf Objekte merken und Komponente befuellen
-    setSelectionObjects(value,display);
-    setSelectedIndex(defIdx);
-  }
-
-  /**
-   * Erzeugt eine neue Eingabe-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
-   */
-  protected SelectionInputOption(String label, boolean inputNeeded, E[] value, E defValue, Object[] display) {
-    this(label,inputNeeded,value,defValue,display,null);
-  }
-
-  /**
-   * Erzeugt eine neue Eingabe-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
-   */
-  protected SelectionInputOption(String label, boolean inputNeeded, E[] value, E defValue, Object[] display, Map<Object,String> tooltip) {
-    super(label,inputNeeded);
-    // Referenz auf Objekte merken und Komponente befuellen
-    setSelectionObjects(value,display,tooltip);
-    setSelectedItem(defValue);
-  }
-
-  /**
-   * Erzeugt eine neue Eingabe-Option. Es wird (sofern vorhanden) 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
-   */
-  protected SelectionInputOption(String label, boolean inputNeeded, E[] value, Object[] display) {
-    this(label,inputNeeded,value,value.length > 0 ? 0 : -1, display);
-  }
-
-  /**
-   * Setzt die im Auswahlfeld zur Verfuegung stehenden Eintraege
-   * @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 void setSelectionObjects(E[] value, Object[] display) {
-    setSelectionObjects(value,display,null);
-  }
-  
-  /**
-   * Setzt die im Auswahlfeld zur Verfuegung stehenden Eintraege
-   * @param value       die zur Auswahl stehenden Objekte
-   * @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 void setSelectionObjects(E[] value, Object[] display, Map<Object,String> tooltip) {
-    // werden keine Wert angegeben, wird dies wie eine leere
-    // Menge behandelt
-    if (value == null)
-      value = (E[])new Object[0];
-    // Wurden keine speziellen Anzeigewerte angegeben, werden die
-    // Auswahl-Objekte verwendet
-    if (display == null)
-      display = value;
-    // Haben der Auswahl- und der Anzeige-Array unterschiedliche
-    // Laenge, wird dies nicht akzeptiert
-    if ( ( (Object[]) display).length != ( (E[]) value).length)
-      throw new IllegalArgumentException("display-Array and value-Array must have the same size!");
-
-    Object lastSelection = getValue();
-    this.selectionObject = value;
-    this.displayObject   = display;
-    this.displayToolTip  = tooltip;
-    performSelectionUpdate();
-    setSelectedItem(lastSelection);
-  }
-
-  /**
-   * Aktualisiert die Objekte in der der Auswahlkomponente. Wird aufgerufen,
-   * wenn dich die zur Auswahl stehenden Objekte aendern. Die Variablen
-   * {@link #selectionObject} und {@link #displayObject} sind dann bereits
-   * aktualisiert,
-   */
-  protected abstract void performSelectionUpdate();
-
-  /**
-   * Liefert immer <code>true</code>, da keine speziellen Anforderungen
-   * an die Auswahl-Eingabe gestellt werden.
-   */
-  protected boolean performIsInputValid() {
-    return true;
-  }
-
-  /**
-   * Prueft, ob im Auswahlfeld ein Eintrag ausgewaehlt wurde.
-   */
-  protected boolean performIsInputEmpty() {
-    return getSelectedIndex() < 0;
-  }
-
-  /**
-   * 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 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) {
-    setSelectedItem(newValue);
-    return true;
-  }
-
-  /**
-   * Setzt einen neuen Wert, mit der die Eingabe-Option belegt wird.
-   * Ruft lediglich {@link #performSetValue(Object)} auf. Ueberschreibt die
-   * Methode von {@link InputOption}, da die Ueberpruefung auf Aenderung
-   * (und Event-Ausloesung) in {@link #setSelectedIndex(int)} erfolgt.
-   * @param newValue neuer Wert
-   * @return <code>false</code> gdw. der Objekt-Typ fuer die Option nicht
-   *         zulaessig ist
-   */
-  public boolean setValue(E newValue) {
-    if ( !performSetValue(newValue) )
-      return false;
-    return true;
-  }
-
-  /**
-   * Liefert den Index, der in der Objekt-Liste ausgewaehlt wurde.
-   * @return <code>-1</code> falls kein Objekt ausgewaehlt wurde
-   */
-  public abstract int getSelectedIndex();
-
-  /**
-   * Setzt den Index, der in der Objekt-Liste ausgewaehlt wurde. <b>Da dies die
-   * Basis-Methode fuer alle Aenderungsoperationen darstellt, muss sie
-   * die Ueberpruefung auf Aenderung implementieren und ggf.
-   * {@link #fireOptionChanged(Object,Object)} ausloesen.</b>
-   * @param idx Listen-Index (-1 um eine Leer-Auswahl zu erzeugen)
-   */
-  public abstract void setSelectedIndex(int idx);
-
-  /**
-   * Setzt die Auswahl auf ein bestimmtes Objekt. Ist dieses nicht vorhanden,
-   * wird die Auswahlliste auf eine leere Auswahl eingestellt.
-   */
-  public void setSelectedItem(Object object) {
-    // altes Object in der neuen Objektliste suchen
-    int newIdx = -1;
-    for (int i=0; i<selectionObject.length && newIdx < 0; i++)
-//      if ( selectionObject[i] == object )
-      if ( selectionObject[i]==null && object==null ||
-           selectionObject[i]!=null && selectionObject[i].equals(object) )
-        newIdx = i;
-    setSelectedIndex(newIdx);
-  }
-
-  /**
-   * Liefert das Anzeige-Objekt der akuellen Auswahl.
-   */
-  public Object getSelectedDisplayItem() {
-    // altes Object in der neuen Objektliste suchen
-    if ( getSelectedIndex() >= 0 )
-      return displayObject[ getSelectedIndex() ];
-   return null;
-  }
-
-  /**
-   * Setzt die Auswahl auf ein bestimmtes Anzeige-Objekt. Ist dieses nicht vorhanden,
-   * wird die Auswahlliste auf eine leere Auswahl eingestellt.
-   */
-  public void setSelectedDisplayItem(Object object) {
-    // altes Object in der neuen Objektliste suchen
-    int newIdx = -1;
-    for (int i=0; i<displayObject.length && newIdx < 0; i++)
-//      if ( selectionObject[i] == object )
-      if ( displayObject[i]==null && object==null ||
-           displayObject[i]!=null && displayObject[i].equals(object) )
-        newIdx = i;
-    setSelectedIndex(newIdx);
-  }
-
-  /**
-   * Liefert die Anzahl der zur Auswahl stehenden Eintraege.
-   */
-  public int getSelectedItemCount() {
-    return selectionObject != null ? selectionObject.length : 0;
-  }
-
-  /**
-   * Diese Klasse stellt eine Auswahl-Option dar, die durch eine
-   * {@link JComboBox} dargestellt wird.
-   * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
-   * @version 1.0
-   */
-  public static class Combo<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 Combo(String label, boolean inputNeeded, E[] value, int defIdx, Object[] display) {
-      super(label,inputNeeded,value,defIdx, 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)
-     * @exception IllegalArgumentException falls sich die Array-Groessen von
-     *            <code>value</code> und <code>display</code> unterscheiden
-     */
-    public Combo(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 Combo(String label, boolean inputNeeded, E[] value, E defValue, Object[] display, Map<Object,String> tooltip) {
-      super(label,inputNeeded,value,defValue,display,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 Combo(String label, boolean inputNeeded, E[] value, Object[] display) {
-      super(label,inputNeeded,value,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 Combo(String label, boolean inputNeeded) {
-      super(label,inputNeeded,new Object[0],new Object[0]);
-    }
-
-    /**
-     * Erzeugt eine neue Instanz von {@link JComboBox}.
-     */
-    protected JComboBox createInputComponent() {
-      JComboBox comboBox = new JComboBox();
-      // Change Listener
-      comboBox.addItemListener( new ItemListener() {
-        Object oldValue = null;
-        public void itemStateChanged(ItemEvent e) {
-          if ( e.getStateChange() == e.SELECTED ) {
-            Object newValue = getValue();
-            if ( oldValue != newValue )
-              fireOptionChanged(oldValue,newValue);
-            oldValue = newValue;
-          }
-        }
-      });
-      return comboBox;
-    }
-
-    /**
-     * Befuellt die ComboBox-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;
-      }
-      // Combo-Box aktualisieren
-      ((JComboBox)inpComp).removeAllItems();
-      for (int i=0; i<displayObject.length; i++)
-        ((JComboBox)inpComp).addItem( displayObject[i] );
-      // Tooltips neu setzen
-      ((JComboBox)inpComp).setRenderer( new ToolTipComboBoxRenderer(displayToolTip) );
-    }
-
-    /**
-     * Liefert den Index, der in der ComboBox-Liste ausgewaehlt wurde.
-     * @return <code>-1</code> falls kein Objekt ausgewaehlt wurde
-     */
-    public int getSelectedIndex() {
-      return ((JComboBox)inpComp).getSelectedIndex();
-    }
-
-    /**
-     * Setzt den Index, der in der ComboBox-Liste ausgewaehlt wurde.
-     * @param idx Listen-Index (-1 um eine Leer-Auswahl zu erzeugen)
-     */
-    public void setSelectedIndex(int idx) {
-      Object oldValue = getValue();
-      ((JComboBox)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 ein {@link JPanel}
-   * mit vertikal angeordneten {@link JRadioButton JRadioButtons} dargestellt wird.
-   * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
-   * @version 1.0
-   */
-  public static class Radio<E> extends SelectionInputOption {
-    /** Gruppe, in der die RadioButton agieren. */
-    protected ButtonGroup buttonGroup;
-    /** Speichert die letzte Auswahl. */
-    protected Object lastSelection = null;
-    /** Liste der Buttons. */
-    protected Vector<JRadioButton> buttonList;
-
-    /** ActionListener, der auf die Button-Klicks reagiert und ggf. Events
-     *  feuert. */
-    private ActionListener actionListener = new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        Object newValue = getValue();
-        if ( lastSelection != newValue )
-          fireOptionChanged(lastSelection,newValue);
-        lastSelection = newValue;
-      }
-    };
-
-    /**
-     * 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 Radio(String label, boolean inputNeeded, E[] value, int defIdx, Object[] display) {
-      super(label,inputNeeded,value,defIdx, 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)
-     * @exception IllegalArgumentException falls sich die Array-Groessen von
-     *            <code>value</code> und <code>display</code> unterscheiden
-     */
-    public Radio(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 Radio(String label, boolean inputNeeded, E[] value, E defValue, Object[] display, Map<Object,String> tooltip) {
-      super(label,inputNeeded,value,defValue,display,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 Radio(String label, boolean inputNeeded, E[] value, Object[] display) {
-      super(label,inputNeeded,value,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 Radio(String label, boolean inputNeeded) {
-      super(label,inputNeeded,new Object[0],new Object[0]);
-    }
-
-    /**
-     * Erzeugt eine neues {@link JPanel}, in dem untereinander
-     * {@link JRadioButton JRadioButtons} fuer jede Auswahl-Option
-     * angeordnet werden.
-     */
-    protected JPanel createInputComponent() {
-      this.buttonGroup = new ButtonGroup();
-      this.buttonList  = new Vector<JRadioButton>();
-      JPanel panel = new JPanel();
-      panel.setLayout( new BoxLayout(panel,BoxLayout.Y_AXIS) );
-      return panel;
-    }
-
-    /**
-     * Befuellt das Panel neu mit RadioButtons.
-     */
-    protected void performSelectionUpdate() {
-      JPanel buttonPanel = ((JPanel)inpComp);
-      // Panel aktualisieren
-      buttonGroup = new ButtonGroup();
-      buttonPanel.removeAll();
-      if ( buttonList != null )
-        buttonList.clear();
-      for (int i=0; i<displayObject.length; i++) {
-        Object disObj = displayObject[i];
-        JRadioButton button = null;
-        if ( disObj instanceof Icon )
-          button = new JRadioButton((Icon)disObj);
-        else
-          button = new JRadioButton(disObj.toString());
-        button.addActionListener(actionListener);
-        if (this.displayToolTip != null)
-          button.setToolTipText( (String)displayToolTip.get(selectionObject[i]) );
-        buttonPanel.add(button);
-        buttonGroup.add(button);
-        buttonList.add(button);
-      }
-    }
-
-    /**
-     * Liefert den Index, der in der Button-Liste ausgewaehlt wurde.
-     * @return <code>-1</code> falls kein Objekt ausgewaehlt wurde
-     */
-    public int getSelectedIndex() {
-      if ( buttonGroup.getSelection() == null )
-        return -1;
-      return buttonList.indexOf( buttonGroup.getSelectedButton() );
-    }
-
-    /**
-     * Setzt den Index, der in der Button-Liste ausgewaehlt wurde.
-     * @param idx Listen-Index (-1 um eine Leer-Auswahl zu erzeugen)
-     */
-    public void setSelectedIndex(int idx) {
-// Event wird - glaube ich - bereits durch den ActionListener
-// des RadioButtons realisiert!
-//      Object oldValue = getValue();
-      if ( idx == -1 || idx >= buttonList.size() )
-        buttonGroup.setUnselected();
-      else
-        buttonList.elementAt(idx).setSelected(true);
-//      Object newValue = getValue();
-//      if ( oldValue != newValue || oldValue!=null && !oldValue.equals( getValue() ) )
-//        fireOptionChanged(oldValue,newValue);
-    }
-  }
-}

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/SwingUtil.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/SwingUtil.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/SwingUtil.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -92,6 +92,7 @@
 import de.schmitzm.io.IOUtil;
 import de.schmitzm.lang.LangUtil;
 import de.schmitzm.lang.ResourceProvider;
+import de.schmitzm.swing.input.MultipleOptionPane;
 
 /**
  * Diese Klasse beinhaltet statische Hilfsfunktionen fuer das Arbeiten mit

Deleted: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/event/InputOptionAdapter.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/event/InputOptionAdapter.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/event/InputOptionAdapter.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Martin O. J. Schmitz.
- * 
- * This file is part of the SCHMITZM library - a collection of utility 
- * classes based on Java 1.6, focusing (not only) on Java Swing 
- * and the Geotools library.
- * 
- * The SCHMITZM project is hosted at:
- * http://wald.intevation.org/projects/schmitzm/
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public License (license.txt)
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- * or try this link: http://www.gnu.org/licenses/lgpl.html
- * 
- * Contributors:
- *     Martin O. J. Schmitz - initial API and implementation
- *     Stefan A. Tzeggai - additional utility classes
- ******************************************************************************/
-package de.schmitzm.swing.event;
-
-import de.schmitzm.swing.InputOption;
-
-/**
- * Diese Klasse bildet eine Implementierung von {@link InputOptionListener},
- * die nichts macht.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
- * @version 1.0
- */
-public abstract class InputOptionAdapter implements InputOptionListener {
-  /**
-   * Wird aufgerufen, wenn sich der Eingabewert des Option geaendert hat.
-   * @param inputOption Option, die sich geaendert hat
-   * @param oldValue alter Wert
-   * @param newValue neuer Wert
-   */
-  public <E> void optionChanged(InputOption<E> inputOption, E oldValue, E newValue) {
-  }
-
-  /**
-   * Wird aufgerufen, wenn die Eingabe-Komponente der Option den Fokus erhaelt.
-   * @param inputOption Option, die den Focus erhalten hat
-   */
-  public <E> void optionGainedFocus(InputOption<E> inputOption) {
-  }
-
-  /**
-   * Wird aufgerufen, wenn die Eingabe-Komponente der Option den Fokus verliert.
-   * @param inputOption Option, die den Focus verloren hat
-   */
-  public <E>void optionLostFocus(InputOption<E> inputOption) {
-  }
-}

Deleted: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/event/InputOptionListener.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/event/InputOptionListener.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/event/InputOptionListener.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Martin O. J. Schmitz.
- * 
- * This file is part of the SCHMITZM library - a collection of utility 
- * classes based on Java 1.6, focusing (not only) on Java Swing 
- * and the Geotools library.
- * 
- * The SCHMITZM project is hosted at:
- * http://wald.intevation.org/projects/schmitzm/
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public License (license.txt)
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- * or try this link: http://www.gnu.org/licenses/lgpl.html
- * 
- * Contributors:
- *     Martin O. J. Schmitz - initial API and implementation
- *     Stefan A. Tzeggai - additional utility classes
- ******************************************************************************/
-package de.schmitzm.swing.event;
-
-import de.schmitzm.swing.InputOption;
-
-/**
- * Dieser Listener verfolgt die Eingaben in einer {@link schmitzm.swing.InputOption}.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
- * @version 1.0
- */
-public interface InputOptionListener {
-  /**
-   * Wird aufgerufen, wenn sich der Eingabewert des Option geaendert hat.
-   * @param inputOption Option, die sich geaendert hat
-   * @param oldValue alter Wert
-   * @param newValue neuer Wert
-   */
-  public <E> void optionChanged(InputOption<E> inputOption, E oldValue, E newValue);
-
-  /**
-   * Wird aufgerufen, wenn die Eingabe-Komponente der Option den Fokus
-   * erhaelt.
-   * @param inputOption Option, die den Focus erhalten hat
-   */
-  public <E> void optionGainedFocus(InputOption<E> inputOption);
-
-  /**
-   * Wird aufgerufen, wenn die Eingabe-Komponente der Option den Fokus
-   * verliert.
-   * @param inputOption Option, die den Focus verloren hat
-   */
-  public <E> void optionLostFocus(InputOption<E> inputOption);
-}

Added: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/BooleanInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/BooleanInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/BooleanInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -0,0 +1,151 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Martin O. J. Schmitz.
+ * 
+ * This file is part of the SCHMITZM library - a collection of utility 
+ * classes based on Java 1.6, focusing (not only) on Java Swing 
+ * and the Geotools library.
+ * 
+ * The SCHMITZM project is hosted at:
+ * http://wald.intevation.org/projects/schmitzm/
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License (license.txt)
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ * or try this link: http://www.gnu.org/licenses/lgpl.html
+ * 
+ * Contributors:
+ *     Martin O. J. Schmitz - initial API and implementation
+ *     Stefan A. Tzeggai - additional utility classes
+ ******************************************************************************/
+package de.schmitzm.swing.input;
+
+import javax.swing.JCheckBox;
+
+//import org.geotools.data.DataAccessFactory.Param;
+
+/**
+ * Diese Klasse stellt eine boolsche Eingabe-Option fuer das
+ * {@link MultipleOptionPane} dar. Diese wird durch eine {@link JCheckBox}
+ * dargestellt.
+ * 
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+ *         (University of Bonn/Germany)
+ * @version 1.0
+ */
+public class BooleanInputOption extends InputOption {
+	/**
+	 * Erzeugt eine neue Eingabe-Option.
+	 * 
+	 * @param label
+	 *            Beschreibung
+	 * @param defValue
+	 *            gibt an, ob die Checkbox standardmaessig aktiviert ist
+	 */
+	public BooleanInputOption(String label, Boolean defValue) {
+		super(label, false);
+		// Bei einer Checkbox soll die Beschreibung nicht oberhalb
+		// des Eingabefeldes zu stehen, sondern mit der Checkbox in
+		// einer Zeile
+		// -> JLabel entfernen und statt dessen den Text der Checkbox setzen
+		this.remove(this.descLabel);
+		((JCheckBox) inpComp).setText(label);
+		// Standardwert setzen
+		if (defValue != null)
+			setValue(defValue);
+	}
+
+	/**
+	 * Erzeugt eine neue Eingabe-Option. Diese ist standardmaessig deaktiviert.
+	 * 
+	 * @param label
+	 *            Beschreibung
+	 */
+	public BooleanInputOption(String label) {
+		this(label, false);
+	}
+
+//	/**
+//	 * Erzeugt eine neue Eingabe-Option.
+//	 */
+//	public BooleanInputOption(Param param, Boolean defValue) {
+//		this(param.title.toString(), defValue);
+//		setToolTipText(param.description.toString());
+//	}
+//
+//	/**
+//	 * Erzeugt eine neue Eingabe-Option.
+//	 */
+//	public BooleanInputOption(Param param) {
+//		this(param.title.toString(), (Boolean) param.sample);
+//		setToolTipText(param.description.toString());
+//	}
+
+	/**
+	 * Erzeugt eine neue Instanz von {@link JCheckBox}.
+	 */
+	protected JCheckBox createInputComponent() {
+		return new JCheckBox();
+	}
+
+	/**
+	 * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst auf
+	 * Gueltigkeit und ruft dann {@link #performGetValue()} auf.
+	 * 
+	 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig ist
+	 *         (siehe {@link #isInputValid()})
+	 */
+	public Boolean getValue() {
+		return (Boolean) super.getValue();
+	}
+
+	/**
+	 * Liefert immer <code>true</code>, da keine speziellen Anforderungen an die
+	 * Text-Eingabe gestellt werden.
+	 */
+	protected boolean performIsInputValid() {
+		return true;
+	}
+
+	/**
+	 * Liefert immer <code>false</code>, da es keine Leereingabe gibt. Eine
+	 * nicht aktivierte Checkbox bedeutet den Wert FALSE.
+	 */
+	protected boolean performIsInputEmpty() {
+		return false;
+	}
+
+	/**
+	 * Liefert <code>true</code>, falls die Checkbox aktiviert ist.
+	 * 
+	 * @return einen <code>boolean</code>-Wert (<b>kein</b> {@link Boolean}
+	 *         -Objekt!)
+	 */
+	protected Boolean performGetValue() {
+		return ((JCheckBox) inpComp).isSelected();
+	}
+
+	/**
+	 * (De)aktiviert die Checkbox.
+	 * 
+	 * @param active
+	 *            definiert den neuen Status (muss vom Typ {@link Boolean}
+	 *            sein!)
+	 * @return <code>false</code> falls kein {@link Boolean} uebergeben wird.
+	 */
+	protected boolean performSetValue(Object active) {
+		if (!(active instanceof Boolean))
+			return false;
+		((JCheckBox) inpComp).setSelected((Boolean) active);
+		return true;
+	}
+}

Added: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/BrowseInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/BrowseInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/BrowseInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -0,0 +1,161 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Martin O. J. Schmitz.
+ * 
+ * This file is part of the SCHMITZM library - a collection of utility 
+ * classes based on Java 1.6, focusing (not only) on Java Swing 
+ * and the Geotools library.
+ * 
+ * The SCHMITZM project is hosted at:
+ * http://wald.intevation.org/projects/schmitzm/
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License (license.txt)
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ * or try this link: http://www.gnu.org/licenses/lgpl.html
+ * 
+ * Contributors:
+ *     Martin O. J. Schmitz - initial API and implementation
+ *     Stefan A. Tzeggai - additional utility classes
+ ******************************************************************************/
+package de.schmitzm.swing.input;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JTextField;
+
+import de.schmitzm.swing.ExceptionDialog;
+import de.schmitzm.swing.SwingUtil;
+
+/**
+ * Die <code>BrowseInputOption</code> erweitert die {@linkplain ManualInputOption manuelle Text-Eingabe}
+ * um eine Browse-Aktion. Welche konkrete Aktion beim Klick auf den Browse-Button
+ * ausgefuehrt wird, bestimmt die jeweinige Implementierung.<br>
+ * Der Wert dieser Eingabe-Option stellt keinen Text dar, sondern ein
+ * zugehoeriges Objekt. Um ein Objekt sowohl ueber eine manuelle Texteingabe,
+ * als auch ueber die Browse-Aktion angeben zu koennen, spezifiziert
+ * <code>BrowseInputOption</code> zwei Methoden ({@link #convertFromString(String)},
+ * {@link #convertToString(Object)}), ueber die eine entsprechende Umwandung zu
+ * implementieren ist.
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * @version 1.0
+ */
+public abstract class BrowseInputOption  extends ManualInputOption {
+  /** Speichert den aktuellen Wert der Eingabe-Option. */
+  protected Object object = null;
+  /** Container enthaelt das Text-Eingabefeld und den Browse-Button. */
+  protected Container inpCompCont = new Container();
+  /** Der Button fuer die Browse-Aktion. */
+  protected JButton browseButton = new JButton("...");
+
+  /**
+   * Erzeugt eine neue Eingabe-Option.
+   * @param label Beschreibung der Eingabe
+   * @param inputNeeded gibt an, ob eine Eingabe in der Option erforderlich ist
+   * @param defValue Standard-Belegung fuer die Eingabe-Option
+   */
+  public BrowseInputOption(String label, boolean inputNeeded, Object defValue) {
+    super(label, inputNeeded, null);
+    setValue(defValue);
+
+    // Browse-Button formatieren
+    browseButton.setPreferredSize( new Dimension(30,10) );
+    browseButton.addActionListener( new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        browseAction();
+      }
+    });
+
+    // Eingabe-Feld formatieren
+    SwingUtil.setPreferredWidth(inpComp,200);
+    this.addInputOptionListener( new InputOptionAdapter() {
+      public void optionLostFocus(InputOption option) {
+        try {
+          setValue( convertFromString( ((JTextField)inpComp).getText() ) );
+        } catch (Exception err) {
+          ExceptionDialog.show(OPTION_COMPONENT,err,SwingUtil.RESOURCE.getString("Error"),SwingUtil.RESOURCE.getString("InvalidInputMess"));
+          setValue( getValue() );
+        }
+      }
+    });
+
+    // Neben dem Eingabefeld noch ein Browse-Button
+    inpCompCont.setLayout( new BorderLayout(10,0) );
+    inpCompCont.add(this.inpComp, BorderLayout.CENTER);
+    inpCompCont.add(this.browseButton, BorderLayout.EAST);
+    // normale Eingabe-Komponente durch Container ersetzen
+    remove(inpComp);
+    add(inpCompCont,BorderLayout.SOUTH);
+  }
+
+  /**
+   * Aktion des Browse-Button.
+   */
+  private void browseAction() {
+    Object newObj = performBrowse(this.getValue());
+    // Browse-Aktion abgebrochen
+    if ( newObj == null )
+      return;
+    this.setValue(newObj);
+  }
+
+  /**
+   * Liefert das zu der Text-Eingabe gehoerende Objekt.
+   */
+  protected Object performGetValue() {
+    return object;
+  }
+
+  /**
+   * Setzt den Wert der Eingabe-Option und befuellt entsprechend das
+   * Text-Feld der Eingabe-Option.
+   * @param newValue neuer Wert der Eingabe-Option (ein Objekt, <b>nicht</b> ein
+   *                 Wert fuer das Textfeld!)
+   * @return <code>false</code> falls das Objekt nicht in einen String umgewandelt
+   *         werden konnte
+   */
+  protected boolean performSetValue(Object newValue) {
+    try {
+      ((JTextField)inpComp).setText(convertToString(newValue));
+      this.object = newValue;
+      return true;
+    } catch (Exception err) {
+      return false;
+    }
+  }
+
+  /**
+   * Implementiert die Browse-Aktion die ausgefuehrt wird, wenn der Button
+   * der Eingabe-Option gedrueckt wird. Liefert ein neues Objekt fuer die
+   * Eingabe-Option.
+   * @param actValue aktueller Wert der Eingabe-Option
+   * @return <code>null</code> falls die Browse-Aktion abgebrochen wird
+   */
+  public abstract Object performBrowse(Object actValue);
+
+  /**
+   * Liefert das Objekt zu der Text-Eingabe der Option.
+   * @param objectStr Objekt-String
+   */
+  public abstract Object convertFromString(String objectStr);
+
+  /**
+   * Erzeugt einen (eindeutigen) String fuer ein Objekt.
+   * @param object Objekt
+   */
+  public abstract String convertToString(Object object);
+}

Added: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/ColorInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/ColorInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/ColorInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -0,0 +1,174 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Martin O. J. Schmitz.
+ * 
+ * This file is part of the SCHMITZM library - a collection of utility 
+ * classes based on Java 1.6, focusing (not only) on Java Swing 
+ * and the Geotools library.
+ * 
+ * The SCHMITZM project is hosted at:
+ * http://wald.intevation.org/projects/schmitzm/
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License (license.txt)
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ * or try this link: http://www.gnu.org/licenses/lgpl.html
+ * 
+ * Contributors:
+ *     Martin O. J. Schmitz - initial API and implementation
+ *     Stefan A. Tzeggai - additional utility classes
+ ******************************************************************************/
+package de.schmitzm.swing.input;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.BorderFactory;
+import javax.swing.JColorChooser;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+
+/**
+ * Diese Klasse stellt eine Farb-Eingabe-Option fuer das {@link MultipleOptionPane}
+ * dar. Diese wird durch eine {@link JLabel} in der jeweiligen Farbe dargestellt.
+ * Bei einem Klick auf das Label erscheint ein {@link JColorChooser}, ueber den
+ * der Optionswert (Farbe) geaendert werden kann.
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * @version 1.0
+ */
+public class ColorInputOption extends InputOption {
+  private   JColorChooser colorChooser;
+  private   JDialog       dialog;
+
+  /**
+   * Erzeugt eine neue Eingabe-Option.
+   * @param label     Beschreibung
+   * @param inpNeeded gibt an, ob eine Leer-Eingabe erlaubt ist
+   */
+  public ColorInputOption(String label, boolean inpNeeded) {
+    this(label,inpNeeded,null);
+  }
+
+  /**
+   * Erzeugt eine neue Eingabe-Option.
+   * @param label     Beschreibung
+   * @param inpNeeded gibt an, ob eine Leer-Eingabe erlaubt ist
+   * @param defColor  vorgeblendeter Optionswert
+   */
+  public ColorInputOption(String label, boolean inpNeeded, Color defColor) {
+    super(label, inpNeeded);
+    setValue( (defColor != null) ? defColor : new Color(0, 0, 0, 0));
+
+    // Dialog zum Farbe auswaehlen
+    colorChooser = new JColorChooser();
+    dialog = JColorChooser.createDialog(
+        this,
+        "Farbe auswaehlen",
+        true, //modal
+        colorChooser,
+        new ActionListener() { //OK button handler
+             public void actionPerformed(ActionEvent e) {
+                 // wird auf OK geklickt wird die ausgewaehlte Farbe
+                 // uebernommen
+                 setValue(colorChooser.getColor());
+               }
+             },
+        null // CANCEL button handler
+    );
+  }
+
+  /**
+   * Erzeugt eine neue Instanz von {@link JLabel}. Dieses ist transparent und
+   * schwart umrandet.<br>
+   * Bei einem Klick auf das Label oeffnet sich ein {@link JColorChooser}
+   * ueber den eine neue Farbe ausgewaehlt werden kann.
+   */
+  protected JComponent createInputComponent() {
+//    // Eigentlich sollte ein JLabel verwendet werden. Dieses nimmt aber
+//    // nicht automatisch die maximale Container-Breite des uebergeordneten
+//    // Containers (bei SpringLayout) an. Deshalb wird ein TextField "vergewaltigt".
+//    JTextField l = new JTextField("");
+//    l.setEditable(false);
+//    l.setBorder(null);
+    JLabel l = new JLabel(" ");
+    //////////////
+    l.setOpaque(true);
+    //l.setBorder(BorderFactory.createLineBorder(Color.BLACK));
+    l.setBorder(BorderFactory.createRaisedBevelBorder());
+    //l.setBorder(BorderFactory.createLoweredBevelBorder());
+
+    // Beim Klick auf das Label erscheint der Auswahl-Dialog
+    // fuer die Farben
+    l.addMouseListener( new MouseAdapter() {
+      public void mouseClicked(MouseEvent e) {
+        if ( e.getButton() == MouseEvent.BUTTON1 ) {
+          colorChooser.setColor( inpComp.getBackground() );
+          dialog.setVisible(true);
+        }
+      }
+    });
+    return l;
+  }
+
+  /**
+   * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
+   * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
+   * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig ist
+   *         (siehe {@link #isInputValid()})
+   */
+  public Color getValue() {
+    return (Color)super.getValue();
+  }
+
+  /**
+   * Liefert immer <code>true</code>, da keine speziellen Anforderungen
+   * an die Farb-Eingabe gestellt werden.
+   */
+  protected boolean performIsInputValid() {
+    return true;
+  }
+
+  /**
+   * Liefert immer <code>true</code>, wenn keine Farbe (<code>null</code>)
+   * ausgewaehlt ist.
+   */
+  protected boolean performIsInputEmpty() {
+    return inpComp.getBackground() == null;
+  }
+
+  /**
+   * Liefert die aktuell in der Option ausgewaehlte Farbe.
+   */
+  protected Color performGetValue() {
+    return inpComp.getBackground();
+  }
+
+  /**
+   * Setzt den Wert der Farb-Option.
+   * @param newValue neue Farbe (muss eine {@link Color}-Instanz sein)
+   * @return <code>false</code> falls keine {@link Color} uebergeben wird.
+   */
+  protected boolean performSetValue(Object newValue) {
+    if ( !(newValue instanceof Color) )
+      return false;
+    Color color = (Color)newValue;
+    this.inpComp.setBackground(color);
+    this.inpComp.setToolTipText("RGB value: " + color.getRed() + ", "
+                                              + color.getGreen() + ", "
+                                              + color.getBlue());
+    return true;
+  }
+}

Added: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/FileInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/FileInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/FileInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Martin O. J. Schmitz.
+ * 
+ * This file is part of the SCHMITZM library - a collection of utility 
+ * classes based on Java 1.6, focusing (not only) on Java Swing 
+ * and the Geotools library.
+ * 
+ * The SCHMITZM project is hosted at:
+ * http://wald.intevation.org/projects/schmitzm/
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License (license.txt)
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ * or try this link: http://www.gnu.org/licenses/lgpl.html
+ * 
+ * Contributors:
+ *     Martin O. J. Schmitz - initial API and implementation
+ *     Stefan A. Tzeggai - additional utility classes
+ ******************************************************************************/
+package de.schmitzm.swing.input;
+
+import java.io.File;
+
+import javax.swing.JFileChooser;
+
+/**
+ * Diese Eingabe-Option dient dazu eine Datei-Angabe zu vorzunehmen. Dies
+ * kann ueber manuelle Eingabe erfolgen, oder durch Browsen mittels einem
+ * {@link JFileChooser}. Der Wert, den die Eingabe-Option repraesentiert stellt
+ * ein {@link File}-Objekt dar.
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * @version 1.0
+ */
+public class FileInputOption extends BrowseInputOption {
+  private JFileChooser fileChooser = new JFileChooser();
+
+  /**
+   * Erzeugt eine neue Eingabe-Option.
+   * @param label Beschreibung der Eingabe-Option
+   * @param inputNeeded bestimmt, ob eine Eingabe erforderlich ist
+   * @param defValue Standard-Wert der vorgeblendet wird
+   */
+  public FileInputOption(String label, boolean inputNeeded, File defValue) {
+    super(label,inputNeeded,/*defValue == null ? new File(".") :*/ defValue);
+  }
+
+  /**
+   * Erzeugt eine neue Eingabe-Option.
+   * @param label Beschreibung der Eingabe-Option
+   * @param inputNeeded bestimmt, ob eine Eingabe erforderlich ist
+   */
+  public FileInputOption(String label, boolean inputNeeded) {
+    this(label,inputNeeded,null);
+  }
+
+  /**
+   * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
+   * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
+   * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig ist
+   *         (siehe {@link #isInputValid()})
+   */
+  public File getValue() {
+    return (File)super.getValue();
+  }
+
+  /**
+   * Liefert den Dateiauswahl-Dialog fuer die Browse-Aktion.
+   * @see JFileChooser
+   */
+  public JFileChooser getFileChooser() {
+    return fileChooser;
+  }
+
+  /**
+   * Liefert das ein {@link File}-Objekt zu der Text-Eingabe (Dateipfad)
+   * der Option.
+   * @param objectStr Objekt-String
+   */
+  public File convertFromString(String objectStr) {
+    return objectStr == null || objectStr.trim().equals("") ? null : new File(objectStr);
+  }
+
+  /**
+   * Liefert den kompletten Datei-Pfad fuer die durch die Eingabe-Option
+   * repraesentierten {@link File}.
+   * @param object {@link File}-Instanz
+   * @return {@code null}, fall kein {@link File}-Objekt uebergeben wird
+   */
+  public String convertToString(Object object) {
+//    if ( !(object instanceof File) )
+//      return null;
+    return ((File)object).getAbsolutePath();
+  }
+
+  /**
+   * Implementiert die Browse-Aktion die ausgefuehrt wird, wenn der Button der
+   * Eingabe-Option gedrueckt wird. Oeffnet einen {@link JFileChooser}.
+   * @param actValue aktueller Wert der Eingabe-Option
+   * @return <code>null</code> falls die Browse-Aktion abgebrochen wird
+   */
+  public File performBrowse(Object actValue) {
+    fileChooser.setSelectedFile( (File)actValue );
+    int ret = -1;
+    if ( fileChooser.getDialogType() == JFileChooser.OPEN_DIALOG )
+      ret = fileChooser.showOpenDialog(this.getInputComponent());
+    else
+      ret = fileChooser.showSaveDialog(this.getInputComponent());
+    if ( ret  == JFileChooser.APPROVE_OPTION )
+      return fileChooser.getSelectedFile();
+    return (File)actValue;
+  }
+}

Added: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -0,0 +1,418 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Martin O. J. Schmitz.
+ * 
+ * This file is part of the SCHMITZM library - a collection of utility 
+ * classes based on Java 1.6, focusing (not only) on Java Swing 
+ * and the Geotools library.
+ * 
+ * The SCHMITZM project is hosted at:
+ * http://wald.intevation.org/projects/schmitzm/
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License (license.txt)
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ * or try this link: http://www.gnu.org/licenses/lgpl.html
+ * 
+ * Contributors:
+ *     Martin O. J. Schmitz - initial API and implementation
+ *     Stefan A. Tzeggai - additional utility classes
+ ******************************************************************************/
+package de.schmitzm.swing.input;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.FlowLayout;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.util.Vector;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+
+/**
+ * Diese Klasse stellt die allgemeine Oberklasse fuer eine Eingabe-Option
+ * des {@link MultipleOptionPane} dar. Jede Option besteht aus einem
+ * {@linkplain #descLabel Label} und einem {@linkplain #inpComp Eingabefeld}.
+ * Die Art des Eingabefelds wird durch die Unterklassen spezifiziert.
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * @version 1.0
+ */
+public abstract class InputOption<E> extends JPanel {
+  /** Speichert eine Referenz auf die Eingabe-Option (<code>this</code>), damit
+   *  in inneren Klassen darauf referenziert werden kann. */
+  protected final Component OPTION_COMPONENT = this;
+  /** Enhaelt das Label mit der Beschreibung der Option, sowie ggf. das Obligatorisch-Kennzeichen. */
+  protected Container descLabelContainer = null;
+  /** Speichert die Beschreibung der Option */
+  protected JLabel    descLabel = null;
+  /** Kennzeichnet die Option als obligatorisch. */
+  protected JLabel    inputNeededLabel = null;
+  /** Speichert die Eingabe-Komponente der Option. */
+  protected JComponent inpComp   = null;
+  /** Kann eine Fehlermeldung enthalten, wenn die Eingabe nicht
+   *  valide ist. Kann direkt von {@link #performIsInputValid()} befuellt
+   *  werden. Wird automatisch befuellt, wenn {@link #performIsInputValid()}
+   *  eine Exception wirft. */
+  protected String invalidInputMess = "";
+
+  private   boolean   inpNeeded = false;
+  private   Vector    listeners = new Vector();
+  private   E         oldValue  = null;
+  
+  /** Label (hinter der Bezeichnung), mit dem obligatorische Felder markiert werden. */
+  private static String defaultInputNeededSign = "*";
+  /** Farbe, in der die Markierung für obligatorische Felder dargestellt wird. */
+  private static Color  defaultInputNeededSignColor = Color.RED;//new Color(240,100,100);
+
+  
+  /** 
+   * Liefert das Label (dargestellt hinter der Bezeichnung), mit dem
+   * obligatorische Felder markiert werden (Default: "*").
+   */
+  public static String getInputNeededSign() {
+    return defaultInputNeededSign;
+  }
+  
+  /** 
+   * Setzt das Label (dargestellt hinter der Bezeichnung), mit dem
+   * obligatorische Felder markiert werden (Default: "*").<br>
+   * Diese Einstellung wirkt sich erst auf neu erzeugte {@link InputOption}
+   * aus. Die Darstellung bestehender {@link InputOption}-Objekte aendert sich
+   * erst, wenn die inputNeeded-Eigenschaft neu gesetzt wird!
+   * @see #setInputNeeded(boolean)
+   */
+  public static void setInputNeededSign(String sign) {
+    defaultInputNeededSign = sign;
+  }
+
+  /** 
+   * Liefert die Farbe, mit der obligatorische Felder markiert werden
+   * (Default: {@link Color#RED}).
+   */
+  public static Color getInputNeededSignColor() {
+    return defaultInputNeededSignColor;
+  }
+  
+  /** 
+   * Setzt die Farbe, mit der obligatorische Felder markiert werden
+   * (Default: {@link Color#RED}).<br>
+   * Diese Einstellung wirkt sich erst auf neu erzeugte {@link InputOption}
+   * aus. Die Darstellung bestehender {@link InputOption}-Objekte aendert sich
+   * erst, wenn die inputNeeded-Eigenschaft neu gesetzt wird!
+   * @see #setInputNeeded(boolean)
+   */
+  public static void setInputNeededSignColor(Color signColor) {
+    defaultInputNeededSignColor = signColor;
+  }
+
+  /**
+   * Erzeugt eine neue Eingabe-Option.
+   * @param label       Beschreibung (wird im Label angezeigt)
+   * @param inputNeeded gibt an, ob eine Eingabe in der Option erforderlich ist
+   */
+  public InputOption(String label, boolean inputNeeded) {
+    this(label,inputNeeded,false);
+  }
+
+  /**
+   * Erzeugt eine neue Eingabe-Option.
+   * @param label       Beschreibung (wird im Label angezeigt)
+   * @param inputNeeded gibt an, ob eine Eingabe in der Option erforderlich ist
+   * @param centerInputComp bestimmt, ob die Eingabe-Komponente (siehe {@link #createInputComponent()})
+   *                        ins Zentrum des {@link BorderLayout} gelegt wird)
+   */
+  public InputOption(String label, boolean inputNeeded, boolean centerInputComp) {
+    this.inpNeeded = inputNeeded;
+
+    // Darstellung des Containers erzeugen
+    setLayout(new BorderLayout());
+    descLabel = new JLabel(label);
+    inputNeededLabel = new JLabel();
+    inputNeededLabel.setForeground(defaultInputNeededSignColor);
+    inpComp   = createInputComponent();
+    inpComp.addFocusListener( new FocusListener() {
+      public void focusGained(FocusEvent e) {
+        oldValue = getValue();
+        fireFocusGained();
+      }
+      public void focusLost(FocusEvent e) {
+        fireFocusLost();
+        if ( oldValue == null && getValue() != null ||
+             oldValue != null && !oldValue.equals( getValue() ) )
+          fireOptionChanged(oldValue,getValue());
+      }
+    });
+    setInputNeeded(inputNeeded);
+
+    // Elemente dem Container hinzufuegen
+    if ( label != null ) {
+      // put description and mandatory indicator in an
+      // container first
+      descLabelContainer = new Container();
+      descLabelContainer.setLayout( new FlowLayout(FlowLayout.LEFT,0,0) );
+      descLabelContainer.add( descLabel );
+      descLabelContainer.add( inputNeededLabel );
+      // add container to layout
+      add( descLabelContainer, BorderLayout.NORTH );
+      add( inpComp, centerInputComp ? BorderLayout.CENTER : BorderLayout.SOUTH );
+    } else {
+      add( inpComp, centerInputComp ? BorderLayout.CENTER : BorderLayout.NORTH );
+    }
+    doLayout();
+  }
+
+  /**
+   * Deaktiviert die Option, in dem die Eingabe-Komponente deaktiviert wird.
+   */
+  public void setEnabled(boolean enabled) {
+    super.setEnabled(enabled);
+    inpComp.setEnabled(enabled);
+  }
+
+  /**
+   * Setzt den Hilfetext fuer Eingabe-Komponente und Beschreibungslabel.
+   * @param text Hilfe-Text
+   */
+  public void setToolTipText(String text) {
+    super.setToolTipText(text);
+    if ( inpComp != null )
+      inpComp.setToolTipText(text);
+    if ( descLabel != null )
+      descLabel.setToolTipText(text);
+  }
+
+  /**
+   * Setzt den Fokus auf das Eingabe-Feld der {@code InputOption}.
+   */
+  public void grabFocus() {
+    inpComp.grabFocus();
+  }
+
+  /**
+   * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
+   * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
+   * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig ist
+   *         (siehe {@link #isInputValid()})
+   */
+  public E getValue() {
+    if ( !isInputValid() )
+      return null;
+    return performGetValue();
+  }
+
+  /**
+   * Setzt einen neuen Wert, mit der die Eingabe-Option belegt wird.
+   * Ruft {@link #performSetValue(Object)} auf und bewirkt ein
+   * {@link InputOptionListener#optionChanged(Object,Object)} fuer alle
+   * angeschlossenen {@link InputOptionListener}, falls sich der Wert der
+   * Option geaendert hat.
+   * @param newValue neuer Wert
+   * @return <code>false</code> gdw. der Objekt-Typ fuer die Option nicht
+   *         zulaessig ist
+   */
+  public boolean setValue(E newValue) {
+    // alten Wert speichern
+    oldValue = getValue();
+    if ( !performSetValue(newValue) )
+      return false;
+    newValue = getValue();
+    if ( oldValue==null && newValue!=null || oldValue!=null && newValue==null || oldValue!=null && !oldValue.equals( newValue ) )
+      fireOptionChanged(oldValue,getValue());
+    return true;
+  }
+
+  /**
+   * Liefert die Beschreibung der Eingabe-Option.
+   */
+  public String getLabel() {
+    return descLabel.getText();
+  }
+
+  /**
+   * Prueft, ob fuer das Feld zwingend eine Eingabe erforderlich ist.
+   */
+  public boolean inputNeeded() {
+    return inpNeeded;
+  }
+
+  /**
+   * Bestimmt, ob fuer das Feld zwingend eine Eingabe erforderlich ist.
+   */
+  public void setInputNeeded(boolean inpNeeded) {
+    this.inpNeeded = inpNeeded;
+//    if ( inpComp != null ) {
+//      if ( inpNeeded )
+//        inpComp.setBackground( defaultInputNeededBackground );
+//      else
+//        inpComp.setBackground( SwingUtil.getDefaultBackground() );
+//    }
+    if ( inputNeededLabel != null ) {
+      if ( inpNeeded )
+        inputNeededLabel.setText( " " + defaultInputNeededSign );
+      else
+        inputNeededLabel.setText( "" );
+    }
+      
+  }
+
+  /**
+   * Prueft, ob die Eingabe in dem Feld zulaessig ist. Die Implementierung
+   * prueft zuerst auf Leereingabe und ruft dann {@link #performIsInputValid()}
+   * auf.
+   * @return <code>false</code> falls die Option leer ist, aber eine Eingabe
+   *         erforderlich ist
+   */
+  public boolean isInputValid() {
+    // Leereingabe
+    if (  inputEmpty() )
+      return !inputNeeded();
+    try {
+      this.invalidInputMess = "";
+      return performIsInputValid();
+    } catch (Exception err) {
+      this.invalidInputMess = err.getMessage();
+      return false;
+    }
+  }
+
+  /**
+   * Prueft, ob die Eingabe in dem Feld zulaessig ist und wird ggf. eine
+   * Exception. Die Implementierung
+   */
+  public void checkInputAndError() throws Exception {
+    if ( !isInputValid() )
+      throw new Exception( getInvalidInputMessage() );
+  }
+
+  /**
+   * Liefert die letzte von {@link #isInputValid()} erzeugte
+   * Fehlermeldung.
+   */
+  public String getInvalidInputMessage() {
+    return invalidInputMess;
+  }
+
+  /**
+   * Prueft, ob das Feld eine Leereingabe beinhaltet.
+   * @see #performIsInputEmpty()
+   */
+  public boolean inputEmpty() {
+    return performIsInputEmpty();
+  }
+
+  /**
+   * Liefert eine Referenz auf die Eingabe-Komponente.<br>
+   * <b>Bemerke:</b><br>
+   * Uber diese Referenz sollte hoechsten ihr Layout beeinflusst werden, aber
+   * nicht ihr Verhalten, da ansonsten die Funktionalitaet der <code>InputOption</code>
+   * negativ beeinflusst werden kann!!
+   */
+  public JComponent getInputComponent() {
+    return inpComp;
+  }
+
+  /**
+   * Liefert eine Referenz auf das Beschreibungs-Label.<br>
+   * <b>Bemerke:</b><br>
+   * Uber diese Referenz sollte hoechsten das Layout beeinflusst werden, aber
+   * nicht das Verhalten, da ansonsten die Funktionalitaet der <code>InputOption</code>
+   * negativ beeinflusst werden kann!!
+   */
+  public JLabel getDescriptionLabel() {
+    return descLabel;
+  }
+
+  /**
+   * Erzeugt eine neue Instanz der Eingabe-Komponente. z.B. ein Text-Eingabefeld
+   * oder eine Combo-Box.
+   */
+  protected abstract JComponent createInputComponent();
+
+  /**
+   * Liefert den aktuellen Wert der Eingabe-Option.
+   */
+  protected abstract E performGetValue();
+
+  /**
+   * Setzt den aktuellen Wert der Eingabe-Option. Ist der Objekt-Typ fuer die
+   * Option nicht zulaessig, sollte nichts gemacht werden und <code>false</code>
+   * zurueckgegeben werden.
+   * @param newValue neuer Wert
+   * @return <code>false</code> gdw. der Objekt-Typ fuer die Eingabe-Option
+   *         nicht zulaessig ist
+   */
+  protected abstract boolean performSetValue(E newValue);
+
+  /**
+   * Prueft, ob die aktuelle Eingabe leer ist.
+   */
+  protected abstract boolean performIsInputEmpty();
+
+  /**
+   * Prueft, ob die aktuelle Eingabe leer ist.
+   */
+  protected abstract boolean performIsInputValid();
+
+  /**
+   * Fuegt der Eingabeoption einen Listener hinzu.
+   * @param l neuer Listener
+   */
+  public void addInputOptionListener(InputOptionListener l) {
+    listeners.add(l);
+  }
+
+  /**
+   * Entfernt einen Listener von der Eingabeoption.
+   * @param l zu entfernender Listener
+   */
+  public void removeInputOptionListener(InputOptionListener l) {
+    listeners.remove(l);
+  }
+
+  /**
+   * Informiert alle {@link InputOptionListener}, dass die Eingabe-Option
+   * den Fokus erhalten hat.
+   */
+  protected void fireFocusGained() {
+    for (int i=0; i<listeners.size(); i++)
+      if ( listeners.elementAt(i) instanceof InputOptionListener )
+        ((InputOptionListener)listeners.elementAt(i)).optionGainedFocus(this);
+  }
+
+  /**
+   * Informiert alle {@link InputOptionListener}, dass die Eingabe-Option
+   * den Fokus verloren hat.
+   */
+  protected void fireFocusLost() {
+    for (int i=0; i<listeners.size(); i++)
+      if ( listeners.elementAt(i) instanceof InputOptionListener )
+        ((InputOptionListener)listeners.elementAt(i)).optionLostFocus(this);
+  }
+
+  /**
+   * Informiert alle {@link InputOptionListener}, dass sich der Wert der
+   * Eingabeoption geaendert hat.
+   * @param oldValue alter Optionswert
+   * @param newValue neuer Optionswert
+   */
+  protected void fireOptionChanged(E oldValue, E newValue) {
+    for (int i=0; i<listeners.size(); i++)
+      if ( listeners.elementAt(i) instanceof InputOptionListener )
+        ((InputOptionListener)listeners.elementAt(i)).optionChanged(this,oldValue,newValue);
+  }
+
+}

Added: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOptionAdapter.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOptionAdapter.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOptionAdapter.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Martin O. J. Schmitz.
+ * 
+ * This file is part of the SCHMITZM library - a collection of utility 
+ * classes based on Java 1.6, focusing (not only) on Java Swing 
+ * and the Geotools library.
+ * 
+ * The SCHMITZM project is hosted at:
+ * http://wald.intevation.org/projects/schmitzm/
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License (license.txt)
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ * or try this link: http://www.gnu.org/licenses/lgpl.html
+ * 
+ * Contributors:
+ *     Martin O. J. Schmitz - initial API and implementation
+ *     Stefan A. Tzeggai - additional utility classes
+ ******************************************************************************/
+package de.schmitzm.swing.input;
+
+
+/**
+ * Diese Klasse bildet eine Implementierung von {@link InputOptionListener},
+ * die nichts macht.
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * @version 1.0
+ */
+public abstract class InputOptionAdapter implements InputOptionListener {
+  /**
+   * Wird aufgerufen, wenn sich der Eingabewert des Option geaendert hat.
+   * @param inputOption Option, die sich geaendert hat
+   * @param oldValue alter Wert
+   * @param newValue neuer Wert
+   */
+  public <E> void optionChanged(InputOption<E> inputOption, E oldValue, E newValue) {
+  }
+
+  /**
+   * Wird aufgerufen, wenn die Eingabe-Komponente der Option den Fokus erhaelt.
+   * @param inputOption Option, die den Focus erhalten hat
+   */
+  public <E> void optionGainedFocus(InputOption<E> inputOption) {
+  }
+
+  /**
+   * Wird aufgerufen, wenn die Eingabe-Komponente der Option den Fokus verliert.
+   * @param inputOption Option, die den Focus verloren hat
+   */
+  public <E>void optionLostFocus(InputOption<E> inputOption) {
+  }
+}

Added: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOptionListener.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOptionListener.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOptionListener.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Martin O. J. Schmitz.
+ * 
+ * This file is part of the SCHMITZM library - a collection of utility 
+ * classes based on Java 1.6, focusing (not only) on Java Swing 
+ * and the Geotools library.
+ * 
+ * The SCHMITZM project is hosted at:
+ * http://wald.intevation.org/projects/schmitzm/
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License (license.txt)
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ * or try this link: http://www.gnu.org/licenses/lgpl.html
+ * 
+ * Contributors:
+ *     Martin O. J. Schmitz - initial API and implementation
+ *     Stefan A. Tzeggai - additional utility classes
+ ******************************************************************************/
+package de.schmitzm.swing.input;
+
+
+/**
+ * Dieser Listener verfolgt die Eingaben in einer {@link schmitzm.swing.InputOption}.
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * @version 1.0
+ */
+public interface InputOptionListener {
+  /**
+   * Wird aufgerufen, wenn sich der Eingabewert des Option geaendert hat.
+   * @param inputOption Option, die sich geaendert hat
+   * @param oldValue alter Wert
+   * @param newValue neuer Wert
+   */
+  public <E> void optionChanged(InputOption<E> inputOption, E oldValue, E newValue);
+
+  /**
+   * Wird aufgerufen, wenn die Eingabe-Komponente der Option den Fokus
+   * erhaelt.
+   * @param inputOption Option, die den Focus erhalten hat
+   */
+  public <E> void optionGainedFocus(InputOption<E> inputOption);
+
+  /**
+   * Wird aufgerufen, wenn die Eingabe-Komponente der Option den Fokus
+   * verliert.
+   * @param inputOption Option, die den Focus verloren hat
+   */
+  public <E> void optionLostFocus(InputOption<E> inputOption);
+}

Added: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/ManualInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/ManualInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/ManualInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -0,0 +1,595 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Martin O. J. Schmitz.
+ * 
+ * This file is part of the SCHMITZM library - a collection of utility 
+ * classes based on Java 1.6, focusing (not only) on Java Swing 
+ * and the Geotools library.
+ * 
+ * The SCHMITZM project is hosted at:
+ * http://wald.intevation.org/projects/schmitzm/
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License (license.txt)
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ * or try this link: http://www.gnu.org/licenses/lgpl.html
+ * 
+ * Contributors:
+ *     Martin O. J. Schmitz - initial API and implementation
+ *     Stefan A. Tzeggai - additional utility classes
+ ******************************************************************************/
+package de.schmitzm.swing.input;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JCheckBox;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+
+import de.schmitzm.swing.SwingUtil;
+
+/**
+ * Diese Klasse stellt eine manuelle Eingabe-Option fuer das
+ * {@link MultipleOptionPane} dar. Die Eingabe erfolgt ueber ein
+ * {@link JTextField}. Ausser der "Input-Needed"-Restriktion, werden keine
+ * weiteren Anforderungen an die Eingabe gestellt. Die Klasse kann nicht direkt
+ * instanziiert werden. Statt dessen sind die eingebetteten Klassen
+ * <ul>
+ * <li>{@link ManualInputOption.Text ManualInputOption.Text}</li>
+ * <li>{@link ManualInputOption.Integer ManualInputOption.Integer}</li>
+ * <li>{@link ManualInputOption.Double ManualInputOption.Double}</li>
+ * </ul>
+ * zu verwenden.
+ * 
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+ *         (University of Bonn/Germany)
+ * @version 1.0
+ */
+public class ManualInputOption extends InputOption {
+	/**
+	 * Erzeugt eine neue Eingabe-Option.
+	 * 
+	 * @param label
+	 *            Beschreibung
+	 * @param inputNeeded
+	 *            gibt an, ob eine Eingabe erforderlich ist
+	 * @param defValue
+	 *            Wert der im Textfeld vorgeblendet wird
+	 */
+	protected ManualInputOption(String label, boolean inputNeeded,
+			Object defValue) {
+		super(label, inputNeeded);
+		((JTextField) inpComp).setText(defValue != null ? defValue.toString()
+				: "");
+	}
+
+	/**
+	 * Erzeugt eine neue Instanz von {@link JTextField}.
+	 */
+	protected JTextField createInputComponent() {
+		return new JTextField();
+	}
+
+	/**
+	 * Liefert immer <code>true</code>, da keine speziellen Anforderungen an die
+	 * Text-Eingabe gestellt werden.
+	 */
+	protected boolean performIsInputValid() {
+		return true;
+	}
+
+	/**
+	 * Prueft, ob im Eingabefeld ein Leerstring eingegeben wurde.
+	 */
+	protected boolean performIsInputEmpty() {
+		return ((JTextField) inpComp).getText().trim().equals("");
+	}
+
+	/**
+	 * Liefert die aktuelle Eingabe im {@link JTextField}.
+	 */
+	protected Object performGetValue() {
+		return ((JTextField) inpComp).getText();
+	}
+
+	/**
+	 * Setzt die aktuelle Eingabe im {@link JTextField}.
+	 * 
+	 * @param newValue
+	 *            neuer Wert (muss vom Typ {@link String} sein!)
+	 * @return <code>false</code> wenn kein {@link String} uebergeben wird
+	 */
+	protected boolean performSetValue(Object newValue) {
+		if (newValue == null)
+			newValue = "";
+		if (!(newValue instanceof String))
+			return false;
+		((JTextField) inpComp).setText((String) newValue);
+		return true;
+	}
+
+	/**
+	 * Diese Klasse stellt eine Eingabe-Option dar, in der ein beliebigen Text
+	 * eingegeben werden kann.
+	 * 
+	 * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+	 *         (University of Bonn/Germany)
+	 * @version 1.0
+	 */
+	public static class Text extends ManualInputOption {
+		/**
+		 * Erzeugt eine neue Eingabe-Option.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param inputNeeded
+		 *            gibt an, ob eine Eingabe erforderlich ist
+		 * @param defValue
+		 *            Wert der im Textfeld vorgeblendet wird
+		 */
+		public Text(String label, boolean inputNeeded, String defValue) {
+			super(label, inputNeeded, defValue);
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param inputNeeded
+		 *            gibt an, ob eine Eingabe erforderlich ist
+		 */
+		public Text(String label, boolean inputNeeded) {
+			this(label, inputNeeded, "");
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+		 * erforderlich ist.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 */
+		public Text(String label) {
+			this(label, true, "");
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+		 * erforderlich ist.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param defValue
+		 *            Wert der im Textfeld vorgeblendet wird
+		 */
+		public Text(String label, String defValue) {
+			this(label, true, defValue);
+		}
+		
+		/**
+		 * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
+		 * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
+		 * 
+		 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig
+		 *         ist (siehe {@link #isInputValid()})
+		 */
+		public String getValue() {
+			return (String) super.getValue();
+		}
+	}
+
+	/**
+	 * Diese Klasse stellt eine Eingabe-Option dar, in der ein Integer-Zahlen
+	 * eingegeben werden kann.
+	 * 
+	 * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+	 *         (University of Bonn/Germany)
+	 * @version 1.0
+	 */
+	public static class Integer extends ManualInputOption {
+		/**
+		 * Erzeugt eine neue Eingabe-Option.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param inputNeeded
+		 *            gibt an, ob eine Eingabe erforderlich ist
+		 * @param defValue
+		 *            Wert der im Textfeld vorgeblendet wird
+		 */
+		public Integer(String label, boolean inputNeeded, java.lang.Integer defValue) {
+			super(label, inputNeeded, defValue != null ? String.valueOf(defValue) : null);
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option. Auch wenn die leere Eingabe u.U.
+		 * nicht zulaessig ist, wird ein Leerstring vorgeblendet.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param inputNeeded
+		 *            gibt an, ob eine Eingabe erforderlich ist
+		 */
+		public Integer(String label, boolean inputNeeded) {
+			super(label, inputNeeded, "");
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+		 * erforderlich ist. Auch wenn die leere Eingabe u.U. nicht zulaessig
+		 * ist, wird ein Leerstring vorgeblendet.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 */
+		public Integer(String label) {
+			super(label, true, "");
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+		 * erforderlich ist.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 */
+		public Integer(String label, java.lang.Integer defValue) {
+			this(label, true, defValue);
+		}
+
+		/**
+		 * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
+		 * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
+		 * 
+		 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig
+		 *         ist (siehe {@link #isInputValid()})
+		 */
+		public java.lang.Integer getValue() {
+			return (java.lang.Integer) super.getValue();
+		}
+
+		/**
+		 * Transformiert die Text-Eingabe in einen Integer.
+		 * 
+		 * @return <code>null</code> falls das Eingabefeld leer ist.
+		 */
+		protected java.lang.Integer performGetValue() {
+			if (inputEmpty())
+				return null;
+			return java.lang.Integer.parseInt(((JTextField) inpComp).getText());
+		}
+
+		/**
+		 * Prueft, ob ein gueltiger Integer-Wert im Feld eingegeben wurde.
+		 */
+		protected boolean performIsInputValid() {
+			try {
+				java.lang.Integer.parseInt(((JTextField) inpComp).getText());
+			} catch (NumberFormatException err) {
+				return false;
+			}
+			return super.performIsInputValid();
+		}
+	}
+
+	/**
+	 * Diese Klasse stellt eine Eingabe-Option dar, in der ein Double-Zahlen
+	 * eingegeben werden kann.
+	 * 
+	 * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+	 *         (University of Bonn/Germany)
+	 * @version 1.0
+	 */
+	public static class Double extends ManualInputOption {
+		/**
+		 * Erzeugt eine neue Eingabe-Option.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param inputNeeded
+		 *            gibt an, ob eine Eingabe erforderlich ist
+		 * @param defValue
+		 *            Wert der im Textfeld vorgeblendet wird
+		 */
+		public Double(String label, boolean inputNeeded, double defValue) {
+			super(label, inputNeeded, String.valueOf(defValue));
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option. Auch wenn die leere Eingabe u.U.
+		 * nicht zulaessig ist, wird ein Leerstring vorgeblendet.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param inputNeeded
+		 *            gibt an, ob eine Eingabe erforderlich ist
+		 */
+		public Double(String label, boolean inputNeeded) {
+			super(label, inputNeeded, "");
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+		 * erforderlich ist. Auch wenn die leere Eingabe u.U. nicht zulaessig
+		 * ist, wird ein Leerstring vorgeblendet.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 */
+		public Double(String label) {
+			super(label, true, "");
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+		 * erforderlich ist.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param defValue
+		 *            Wert der im Textfeld vorgeblendet wird
+		 */
+		public Double(String label, int defValue) {
+			this(label, true, defValue);
+		}
+
+		/**
+		 * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
+		 * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
+		 * 
+		 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig
+		 *         ist (siehe {@link #isInputValid()})
+		 */
+		public java.lang.Double getValue() {
+			return (java.lang.Double) super.getValue();
+		}
+
+		/**
+		 * Transformiert die Text-Eingabe in einen Double.
+		 * 
+		 * @return <code>null</code> falls das Eingabefeld leer ist.
+		 */
+		protected java.lang.Double performGetValue() {
+			if (inputEmpty())
+				return null;
+			return java.lang.Double.parseDouble(((JTextField) inpComp)
+					.getText());
+		}
+
+		/**
+		 * Prueft, ob ein gueltiger Double-Wert im Feld eingegeben wurde.
+		 */
+		protected boolean performIsInputValid() {
+			try {
+				java.lang.Double.parseDouble(((JTextField) inpComp).getText());
+			} catch (NumberFormatException err) {
+				return false;
+			}
+			return super.performIsInputValid();
+		}
+	}
+
+	/**
+	 * Diese Klasse stellt eine Eingabe-Option dar, in der ein (verdecktes)
+	 * Passwort eingegeben werden kann. Zu beachten ist, dass der Rueckgabewert
+	 * dieser {@link InputOption} kein {@link String} ist, sondern ein
+	 * {@code char[]}.
+	 * 
+	 * @see JPasswordField#getPassword()
+	 * @see JPasswordField#getText()
+	 * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+	 *         (University of Bonn/Germany)
+	 * @version 1.0
+	 */
+	public static class Password extends ManualInputOption {
+		/**
+		 * Erzeugt eine neue Eingabe-Option.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param inputNeeded
+		 *            gibt an, ob eine Eingabe erforderlich ist
+		 * @param defValue
+		 *            Wert der im Textfeld vorgeblendet wird
+		 */
+		public Password(String label, boolean inputNeeded, String defValue) {
+			super(label, inputNeeded, defValue);
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param inputNeeded
+		 *            gibt an, ob eine Eingabe erforderlich ist
+		 */
+		public Password(String label, boolean inputNeeded) {
+			this(label, inputNeeded, "");
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+		 * erforderlich ist.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 */
+		public Password(String label) {
+			this(label, true, "");
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+		 * erforderlich ist.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param defValue
+		 *            Wert der im Textfeld vorgeblendet wird
+		 */
+		public Password(String label, String defValue) {
+			this(label, true, defValue);
+		}
+
+		/**
+		 * Erzeugt eine neue Instanz von {@link JPasswordField}.
+		 */
+		protected JPasswordField createInputComponent() {
+			return new JPasswordField();
+		}
+
+		/**
+		 * Liefert die aktuelle Eingabe im {@link JPasswordField}.
+		 */
+		protected Object performGetValue() {
+			return ((JPasswordField) inpComp).getPassword();
+		}
+
+		/**
+		 * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
+		 * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
+		 * 
+		 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig
+		 *         ist (siehe {@link #isInputValid()})
+		 */
+		public char[] getValue() {
+			return (char[]) super.getValue();
+		}
+	}
+
+	/**
+	 * Diese Klasse stellt eine Eingabe-Option dar, in der ein (verdecktes)
+	 * Passwort eingegeben werden kann. Neben dem Textfeld fuer die
+	 * Passwort-Eingabe enthaelt die Eingabe-Option noch eine Checkbox, ueber
+	 * die das Passwort im Klartext angezeigt werden kann.<br>
+	 * Zu beachten ist, dass der Rueckgabewert dieser {@link InputOption} kein
+	 * {@link String} ist, sondern ein {@code char[]}.
+	 * 
+	 * @see JPasswordField#getPassword()
+	 * @see JPasswordField#getText()
+	 * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+	 *         (University of Bonn/Germany)
+	 * @version 1.0
+	 */
+	public static class PasswordViewable extends Password {
+		private char oldEchoChar = '*';
+
+		/**
+		 * Container enthaelt das Text-Eingabefeld und die Checkbox, um das
+		 * Passwort sichtbar zu machen.
+		 */
+		protected Container inpCompCont = new Container();
+		/** Der Button fuer die Browse-Aktion. */
+		protected JCheckBox visibleCheckBox = new JCheckBox(
+				SwingUtil.R("ManualInputOption.PasswordVisible.visibility"),
+				false);
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param inputNeeded
+		 *            gibt an, ob eine Eingabe erforderlich ist
+		 * @param defValue
+		 *            Wert der im Textfeld vorgeblendet wird
+		 */
+		public PasswordViewable(String label, boolean inputNeeded,
+				String defValue) {
+			super(label, inputNeeded, defValue);
+
+			visibleCheckBox.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					setPasswortVisible(visibleCheckBox.isSelected());
+				}
+			});
+
+			// Neben dem Eingabefeld noch ein Browse-Button
+			inpCompCont.setLayout(new BorderLayout());
+			inpCompCont.add(this.inpComp, BorderLayout.CENTER);
+			inpCompCont.add(this.visibleCheckBox, BorderLayout.EAST);
+			// normale Eingabe-Komponente durch Container ersetzen
+			remove(inpComp);
+			add(inpCompCont, BorderLayout.SOUTH);
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param inputNeeded
+		 *            gibt an, ob eine Eingabe erforderlich ist
+		 */
+		public PasswordViewable(String label, boolean inputNeeded) {
+			this(label, inputNeeded, "");
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+		 * erforderlich ist.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 */
+		public PasswordViewable(String label) {
+			this(label, true, "");
+		}
+
+		/**
+		 * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+		 * erforderlich ist.
+		 * 
+		 * @param label
+		 *            Beschreibung
+		 * @param defValue
+		 *            Wert der im Textfeld vorgeblendet wird
+		 */
+		public PasswordViewable(String label, String defValue) {
+			this(label, true, defValue);
+		}
+
+		/**
+		 * Erzeugt eine neue Instanz von {@link JPasswordField}.
+		 */
+		protected JPasswordField createInputComponent() {
+			JPasswordField pwField = super.createInputComponent();
+			oldEchoChar = pwField.getEchoChar();
+			return pwField;
+		}
+
+		/**
+		 * Sets the passwort (in)visible in the component.
+		 */
+		public void setPasswortVisible(boolean visible) {
+			// remember old echo character
+			if (((JPasswordField) inpComp).getEchoChar() != 0)
+				oldEchoChar = ((JPasswordField) inpComp).getEchoChar();
+			((JPasswordField) inpComp).setEchoChar(visible ? 0 : oldEchoChar);
+			visibleCheckBox.setSelected(visible);
+		}
+
+		/**
+		 * Return whether the passwort is (in)visible in the component.
+		 */
+		public boolean isPasswortVisible() {
+			return ((JPasswordField) inpComp).getEchoChar() == 0;
+		}
+
+	}
+
+}

Added: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/MultipleOptionPane.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/MultipleOptionPane.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/MultipleOptionPane.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -0,0 +1,196 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Martin O. J. Schmitz.
+ * 
+ * This file is part of the SCHMITZM library - a collection of utility 
+ * classes based on Java 1.6, focusing (not only) on Java Swing 
+ * and the Geotools library.
+ * 
+ * The SCHMITZM project is hosted at:
+ * http://wald.intevation.org/projects/schmitzm/
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License (license.txt)
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ * or try this link: http://www.gnu.org/licenses/lgpl.html
+ * 
+ * Contributors:
+ *     Martin O. J. Schmitz - initial API and implementation
+ *     Stefan A. Tzeggai - additional utility classes
+ ******************************************************************************/
+package de.schmitzm.swing.input;
+
+import java.awt.Component;
+
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+
+import de.schmitzm.swing.SwingUtil;
+
+/**
+ * Diese Klasse erweitert {@link JOptionPane} um einen Ok/Abbrechen-Dialog, der
+ * mehrfache Werte gleichzeitig abfragt. Die Art der Eingaben wird ueber
+ * Instanzen der  Klasse {@link InputOption} spezifiziert.<br>
+ * Ueber die statische Funktion
+ * {@link #showMultipleInputDialog(Component,String,InputOption[])} kann ein
+ * solcher Dialog angezeigt werden.<br>
+ * Darueber hinaus bietet die statische Funktion
+ * {@link #showClassAndDescInputDialog(Component,String,Class[],String)} einen
+ * speziellen Dialog, der eine Auswahl an Klassennamen anzeigt und zu der
+ * ausgewaehlten Klasse eine Beschreibung abfragt.
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * @version 1.0
+ */
+public class MultipleOptionPane extends JOptionPane {
+  /** Speichert die Eingabe-Optionen des MultipleOptionPane. */
+  protected InputOption[] multipleOption = null;
+
+  /**
+   * Erzeugt einen neuen Ok/Abbrechen-Dialog mit mehrfachen Eingabefeldern.
+   * @param multipleOption Eingabe-Optionen
+   */
+  public MultipleOptionPane(InputOption[] multipleOption) {
+    super();
+    this.multipleOption = multipleOption.clone();
+    this.setMessageType(JOptionPane.INFORMATION_MESSAGE);
+    this.setOptionType(JOptionPane.OK_CANCEL_OPTION);
+    this.setMessage( this.multipleOption );
+  }
+
+  /**
+   * Liefert die Eingabe-Optionen des <code>MultipleOptionPane</code>.
+   */
+  public InputOption[] getMultipleOptions() {
+    return multipleOption.clone();
+  }
+
+  /**
+   * Prueft, ob die Eingaben in allen Felden zulaessig sind.
+   */
+  public boolean multipleOptionsValid() {
+    return getInvalidOption() == null;
+  }
+
+  /**
+   * Prueft, ob alle Eingaben zulaessig sind und gibt die erste fehlerhafte
+   * Option zurueck.
+   * @return <code>null</code> wenn alle Eingaben korrekt sind
+   */
+  private InputOption getInvalidOption() {
+    for (int i=0; i<multipleOption.length; i++)
+      if ( !multipleOption[i].isInputValid() )
+        return multipleOption[i];
+    return null;
+  }
+
+  /**
+   * Liefert die Eingaben, die in dem <code>MultipleOptionPane</code>
+   * gemacht wurden.
+   * @return <code>null</code> falls der Dialog noch aktiv ist oder
+   *         nicht ueber die Ok-Option verlassen wurde
+   */
+  public Object[] getMultipleOptionValues() {
+    if ( getValue() == null || (Integer)getValue() != JOptionPane.OK_OPTION)
+      return null;
+    Object[] value = new Object[ multipleOption.length ];
+    for (int i=0; i<value.length; i++)
+      value[i] = multipleOption[i].getValue();
+    return value;
+  }
+
+  /**
+   * Zeigt einen modalen Ok/Abbrechen-Dialog mit mehrfachen Eingabefeldern an.
+   * @param parent Uebergeordnetes Fenster, in dem der Dialog angezeigt wird
+   *               (kann <code>null</code> sein)
+   * @param title  Titel fuer den Dialog
+   * @param option Eingabefelder
+   * @return die Werte, die in den einzelnen Feldern gemacht wurden, oder
+   *         <code>null</code>, falls der Dialog nicht ueber die Ok-Option
+   *         verlassen wurde
+   */
+  public static Object[] showMultipleInputDialog(Component parent, String title, InputOption... option) {
+    MultipleOptionPane pane   = new MultipleOptionPane(option);
+    JDialog            dialog = pane.createDialog(parent,title);
+    InputOption        invalidOption = null;
+    do {
+      dialog.setVisible(true);
+      boolean cancel = pane.getValue() == null || ((Integer)pane.getValue() != JOptionPane.OK_OPTION);
+      invalidOption = !cancel ? pane.getInvalidOption() : null;
+
+      if ( invalidOption != null ) {
+        String invalidOptionName = invalidOption.getLabel();
+        String errorDesc         = invalidOption.getInvalidInputMessage();
+        String mess = SwingUtil.RESOURCE.getString("InvalidInputMess");
+        if ( invalidOptionName != null && !invalidOptionName.trim().equals("") )
+          mess = mess.concat(": '").concat(invalidOptionName).concat("'");
+        if ( errorDesc != null && !errorDesc.trim().equals("") )
+          mess = mess.concat("\n").concat(errorDesc);
+        showMessageDialog(pane,mess,SwingUtil.RESOURCE.getString("Error"),JOptionPane.ERROR_MESSAGE);
+      }
+
+    } while ( invalidOption != null );
+    return pane.getMultipleOptionValues();
+  }
+
+  /**
+   * Zeigt einen modalen Ok/Abbrechen-Dialog mit einem Klassen-Auswahlfeld und
+   * einem Text-Eingabefeld fuer eine Beschreibung an. Eine Eingabe in beiden
+   * Feldern ist zwingend erforderlich.
+   * @param parent      Uebergeordnetes Fenster, in dem der Dialog angezeigt wird
+   *                    (kann <code>null</code> sein)
+   * @param title       Titel fuer den Dialog
+   * @param classOption Klassen, die im Dialog zur Auswahl gestellt werden
+   * @param defaultText Default-Wert fuer das Text-Eingabefeld
+   * @return Array mit 2 Werten (0 = ausgewaehlte Klasse [<code>Class</code>];
+   *         1 = eingegebene Beschreibung [<code>String</code>]), oder
+   *         <code>null</code>, falls der Dialog nicht ueber die Ok-Option
+   *         verlassen wurde
+   */
+  public static Object[] showClassAndDescInputDialog(Component parent, String title, Class[] classOption, String defaultText) {
+    String[] classDesc = new String[classOption.length];
+    for (int i=0; i<classDesc.length; i++)
+      classDesc[i] = classOption[i].getName();
+
+    return showMultipleInputDialog(
+      parent,
+      title,
+        new InputOption[] { new SelectionInputOption.Combo(SwingUtil.RESOURCE.getString("Class")+":",true,classOption,classDesc),
+                            new ManualInputOption.Text(SwingUtil.RESOURCE.getString("Description")+":",true,defaultText) }
+    );
+  }
+
+
+  /**
+   * Zeigt einen Dialog mit mehreren Options-Buttons dar.
+   * @param parent       Parent-Komponente, ueber der der Dialog angezeigt wird
+   * @param type         Art der Meldung ({@link JOptionPane#ERROR_MESSAGE},
+   *                     {@link JOptionPane#INFORMATION_MESSAGE} oder {@link JOptionPane#QUESTION_MESSAGE})
+   * @param title        Titel des Dialog-Fensters
+   * @param message      Meldung die angezeigt wird
+   * @param options      Bezeichnungen der Button, die zur Auswahl stehen
+   * @param initialValue Bezeichnung des standardmaessig ausgewaehlten Button
+   * @return Die Bezeichnung ({@code String}) des Buttons, der ausgewaehlt wurde,
+   *         oder {@code null}, wenn der Dialog ueber das System-Menu abgebrochen
+   *         wurde
+   */
+  public static Object showMultipleOptionDialog(Component parent, int type, String title, Object message, String[] options, String initialValue) {
+    JOptionPane optionPane = new JOptionPane();
+    optionPane.setMessageType(type);
+    optionPane.setOptionType(JOptionPane.OK_CANCEL_OPTION);
+    optionPane.setMessage( message );
+    optionPane.setOptions( options );
+    optionPane.setInitialValue(initialValue);
+    JDialog dialog = optionPane.createDialog(parent,title);
+    dialog.setVisible(true);
+    return optionPane.getValue();
+  }
+}

Added: 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-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/SelectionInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -0,0 +1,613 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Martin O. J. Schmitz.
+ * 
+ * This file is part of the SCHMITZM library - a collection of utility 
+ * classes based on Java 1.6, focusing (not only) on Java Swing 
+ * and the Geotools library.
+ * 
+ * The SCHMITZM project is hosted at:
+ * http://wald.intevation.org/projects/schmitzm/
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License (license.txt)
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ * or try this link: http://www.gnu.org/licenses/lgpl.html
+ * 
+ * Contributors:
+ *     Martin O. J. Schmitz - initial API and implementation
+ *     Stefan A. Tzeggai - additional utility classes
+ ******************************************************************************/
+package de.schmitzm.swing.input;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.swing.BoxLayout;
+import javax.swing.Icon;
+import javax.swing.JComboBox;
+import javax.swing.JRadioButton;
+
+import de.schmitzm.swing.ButtonGroup;
+import de.schmitzm.swing.JPanel;
+import de.schmitzm.swing.ToolTipComboBoxRenderer;
+
+/**
+ * Diese Klasse stellt eine Auswahl-Eingabe-Option fuer das {@link MultipleOptionPane}
+ * dar. Die Klasse kann nicht direkt instanziiert werden.
+ * Statt dessen sind die eingebetteten Klassen
+ * <ul>
+ * <li>{@link SelectionInputOption.Combo SelectionInputOption.Combo}</li>
+ * </ul>
+ * zu verwenden.
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * @version 1.0
+ */
+public abstract class SelectionInputOption<E> extends InputOption<E> {
+  /** Speichert die Objekte, die zur Auswahl stehen. */
+  protected E[] selectionObject = null;
+  /** Speichert die Objekte, die fuer die Auswahl angezeigt werden. */
+  protected Object[] displayObject   = null;
+  /** Speichert fuer jedes {@link #selectionObject} einen ToolTip, der
+   *  fuer das Auswahl-Objekt angezeigt wird. */
+  protected Map<Object,String> displayToolTip  = new HashMap<Object, String>();
+
+  /**
+   * Erzeugt eine neue Eingabe-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
+   */
+  protected SelectionInputOption(String label, boolean inputNeeded, E[] value, int defIdx, Object[] display) {
+    super(label,inputNeeded);
+    // Referenz auf Objekte merken und Komponente befuellen
+    setSelectionObjects(value,display);
+    setSelectedIndex(defIdx);
+  }
+
+  /**
+   * Erzeugt eine neue Eingabe-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
+   */
+  protected SelectionInputOption(String label, boolean inputNeeded, E[] value, E defValue, Object[] display) {
+    this(label,inputNeeded,value,defValue,display,null);
+  }
+
+  /**
+   * Erzeugt eine neue Eingabe-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
+   */
+  protected SelectionInputOption(String label, boolean inputNeeded, E[] value, E defValue, Object[] display, Map<Object,String> tooltip) {
+    super(label,inputNeeded);
+    // Referenz auf Objekte merken und Komponente befuellen
+    setSelectionObjects(value,display,tooltip);
+    setSelectedItem(defValue);
+  }
+
+  /**
+   * Erzeugt eine neue Eingabe-Option. Es wird (sofern vorhanden) 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
+   */
+  protected SelectionInputOption(String label, boolean inputNeeded, E[] value, Object[] display) {
+    this(label,inputNeeded,value,value.length > 0 ? 0 : -1, display);
+  }
+
+  /**
+   * Setzt die im Auswahlfeld zur Verfuegung stehenden Eintraege
+   * @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 void setSelectionObjects(E[] value, Object[] display) {
+    setSelectionObjects(value,display,null);
+  }
+  
+  /**
+   * Setzt die im Auswahlfeld zur Verfuegung stehenden Eintraege
+   * @param value       die zur Auswahl stehenden Objekte
+   * @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 void setSelectionObjects(E[] value, Object[] display, Map<Object,String> tooltip) {
+    // werden keine Wert angegeben, wird dies wie eine leere
+    // Menge behandelt
+    if (value == null)
+      value = (E[])new Object[0];
+    // Wurden keine speziellen Anzeigewerte angegeben, werden die
+    // Auswahl-Objekte verwendet
+    if (display == null)
+      display = value;
+    // Haben der Auswahl- und der Anzeige-Array unterschiedliche
+    // Laenge, wird dies nicht akzeptiert
+    if ( ( (Object[]) display).length != ( (E[]) value).length)
+      throw new IllegalArgumentException("display-Array and value-Array must have the same size!");
+
+    Object lastSelection = getValue();
+    this.selectionObject = value;
+    this.displayObject   = display;
+    this.displayToolTip  = tooltip;
+    performSelectionUpdate();
+    setSelectedItem(lastSelection);
+  }
+
+  /**
+   * Aktualisiert die Objekte in der der Auswahlkomponente. Wird aufgerufen,
+   * wenn dich die zur Auswahl stehenden Objekte aendern. Die Variablen
+   * {@link #selectionObject} und {@link #displayObject} sind dann bereits
+   * aktualisiert,
+   */
+  protected abstract void performSelectionUpdate();
+
+  /**
+   * Liefert immer <code>true</code>, da keine speziellen Anforderungen
+   * an die Auswahl-Eingabe gestellt werden.
+   */
+  protected boolean performIsInputValid() {
+    return true;
+  }
+
+  /**
+   * Prueft, ob im Auswahlfeld ein Eintrag ausgewaehlt wurde.
+   */
+  protected boolean performIsInputEmpty() {
+    return getSelectedIndex() < 0;
+  }
+
+  /**
+   * 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 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) {
+    setSelectedItem(newValue);
+    return true;
+  }
+
+  /**
+   * Setzt einen neuen Wert, mit der die Eingabe-Option belegt wird.
+   * Ruft lediglich {@link #performSetValue(Object)} auf. Ueberschreibt die
+   * Methode von {@link InputOption}, da die Ueberpruefung auf Aenderung
+   * (und Event-Ausloesung) in {@link #setSelectedIndex(int)} erfolgt.
+   * @param newValue neuer Wert
+   * @return <code>false</code> gdw. der Objekt-Typ fuer die Option nicht
+   *         zulaessig ist
+   */
+  public boolean setValue(E newValue) {
+    if ( !performSetValue(newValue) )
+      return false;
+    return true;
+  }
+
+  /**
+   * Liefert den Index, der in der Objekt-Liste ausgewaehlt wurde.
+   * @return <code>-1</code> falls kein Objekt ausgewaehlt wurde
+   */
+  public abstract int getSelectedIndex();
+
+  /**
+   * Setzt den Index, der in der Objekt-Liste ausgewaehlt wurde. <b>Da dies die
+   * Basis-Methode fuer alle Aenderungsoperationen darstellt, muss sie
+   * die Ueberpruefung auf Aenderung implementieren und ggf.
+   * {@link #fireOptionChanged(Object,Object)} ausloesen.</b>
+   * @param idx Listen-Index (-1 um eine Leer-Auswahl zu erzeugen)
+   */
+  public abstract void setSelectedIndex(int idx);
+
+  /**
+   * Setzt die Auswahl auf ein bestimmtes Objekt. Ist dieses nicht vorhanden,
+   * wird die Auswahlliste auf eine leere Auswahl eingestellt.
+   */
+  public void setSelectedItem(Object object) {
+    // altes Object in der neuen Objektliste suchen
+    int newIdx = -1;
+    for (int i=0; i<selectionObject.length && newIdx < 0; i++)
+//      if ( selectionObject[i] == object )
+      if ( selectionObject[i]==null && object==null ||
+           selectionObject[i]!=null && selectionObject[i].equals(object) )
+        newIdx = i;
+    setSelectedIndex(newIdx);
+  }
+
+  /**
+   * Liefert das Anzeige-Objekt der akuellen Auswahl.
+   */
+  public Object getSelectedDisplayItem() {
+    // altes Object in der neuen Objektliste suchen
+    if ( getSelectedIndex() >= 0 )
+      return displayObject[ getSelectedIndex() ];
+   return null;
+  }
+
+  /**
+   * Setzt die Auswahl auf ein bestimmtes Anzeige-Objekt. Ist dieses nicht vorhanden,
+   * wird die Auswahlliste auf eine leere Auswahl eingestellt.
+   */
+  public void setSelectedDisplayItem(Object object) {
+    // altes Object in der neuen Objektliste suchen
+    int newIdx = -1;
+    for (int i=0; i<displayObject.length && newIdx < 0; i++)
+//      if ( selectionObject[i] == object )
+      if ( displayObject[i]==null && object==null ||
+           displayObject[i]!=null && displayObject[i].equals(object) )
+        newIdx = i;
+    setSelectedIndex(newIdx);
+  }
+
+  /**
+   * Liefert die Anzahl der zur Auswahl stehenden Eintraege.
+   */
+  public int getSelectedItemCount() {
+    return selectionObject != null ? selectionObject.length : 0;
+  }
+
+  /**
+   * Diese Klasse stellt eine Auswahl-Option dar, die durch eine
+   * {@link JComboBox} dargestellt wird.
+   * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+   * @version 1.0
+   */
+  public static class Combo<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 Combo(String label, boolean inputNeeded, E[] value, int defIdx, Object[] display) {
+      super(label,inputNeeded,value,defIdx, 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)
+     * @exception IllegalArgumentException falls sich die Array-Groessen von
+     *            <code>value</code> und <code>display</code> unterscheiden
+     */
+    public Combo(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 Combo(String label, boolean inputNeeded, E[] value, E defValue, Object[] display, Map<Object,String> tooltip) {
+      super(label,inputNeeded,value,defValue,display,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 Combo(String label, boolean inputNeeded, E[] value, Object[] display) {
+      super(label,inputNeeded,value,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 Combo(String label, boolean inputNeeded) {
+      super(label,inputNeeded,new Object[0],new Object[0]);
+    }
+
+    /**
+     * Erzeugt eine neue Instanz von {@link JComboBox}.
+     */
+    protected JComboBox createInputComponent() {
+      JComboBox comboBox = new JComboBox();
+      // Change Listener
+      comboBox.addItemListener( new ItemListener() {
+        Object oldValue = null;
+        public void itemStateChanged(ItemEvent e) {
+          if ( e.getStateChange() == e.SELECTED ) {
+            Object newValue = getValue();
+            if ( oldValue != newValue )
+              fireOptionChanged(oldValue,newValue);
+            oldValue = newValue;
+          }
+        }
+      });
+      return comboBox;
+    }
+
+    /**
+     * Befuellt die ComboBox-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;
+      }
+      // Combo-Box aktualisieren
+      ((JComboBox)inpComp).removeAllItems();
+      for (int i=0; i<displayObject.length; i++)
+        ((JComboBox)inpComp).addItem( displayObject[i] );
+      // Tooltips neu setzen
+      ((JComboBox)inpComp).setRenderer( new ToolTipComboBoxRenderer(displayToolTip) );
+    }
+
+    /**
+     * Liefert den Index, der in der ComboBox-Liste ausgewaehlt wurde.
+     * @return <code>-1</code> falls kein Objekt ausgewaehlt wurde
+     */
+    public int getSelectedIndex() {
+      return ((JComboBox)inpComp).getSelectedIndex();
+    }
+
+    /**
+     * Setzt den Index, der in der ComboBox-Liste ausgewaehlt wurde.
+     * @param idx Listen-Index (-1 um eine Leer-Auswahl zu erzeugen)
+     */
+    public void setSelectedIndex(int idx) {
+      Object oldValue = getValue();
+      ((JComboBox)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 ein {@link JPanel}
+   * mit vertikal angeordneten {@link JRadioButton JRadioButtons} dargestellt wird.
+   * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+   * @version 1.0
+   */
+  public static class Radio<E> extends SelectionInputOption {
+    /** Gruppe, in der die RadioButton agieren. */
+    protected ButtonGroup buttonGroup;
+    /** Speichert die letzte Auswahl. */
+    protected Object lastSelection = null;
+    /** Liste der Buttons. */
+    protected Vector<JRadioButton> buttonList;
+
+    /** ActionListener, der auf die Button-Klicks reagiert und ggf. Events
+     *  feuert. */
+    private ActionListener actionListener = new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        Object newValue = getValue();
+        if ( lastSelection != newValue )
+          fireOptionChanged(lastSelection,newValue);
+        lastSelection = newValue;
+      }
+    };
+
+    /**
+     * 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 Radio(String label, boolean inputNeeded, E[] value, int defIdx, Object[] display) {
+      super(label,inputNeeded,value,defIdx, 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)
+     * @exception IllegalArgumentException falls sich die Array-Groessen von
+     *            <code>value</code> und <code>display</code> unterscheiden
+     */
+    public Radio(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 Radio(String label, boolean inputNeeded, E[] value, E defValue, Object[] display, Map<Object,String> tooltip) {
+      super(label,inputNeeded,value,defValue,display,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 Radio(String label, boolean inputNeeded, E[] value, Object[] display) {
+      super(label,inputNeeded,value,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 Radio(String label, boolean inputNeeded) {
+      super(label,inputNeeded,new Object[0],new Object[0]);
+    }
+
+    /**
+     * Erzeugt eine neues {@link JPanel}, in dem untereinander
+     * {@link JRadioButton JRadioButtons} fuer jede Auswahl-Option
+     * angeordnet werden.
+     */
+    protected JPanel createInputComponent() {
+      this.buttonGroup = new ButtonGroup();
+      this.buttonList  = new Vector<JRadioButton>();
+      JPanel panel = new JPanel();
+      panel.setLayout( new BoxLayout(panel,BoxLayout.Y_AXIS) );
+      return panel;
+    }
+
+    /**
+     * Befuellt das Panel neu mit RadioButtons.
+     */
+    protected void performSelectionUpdate() {
+      JPanel buttonPanel = ((JPanel)inpComp);
+      // Panel aktualisieren
+      buttonGroup = new ButtonGroup();
+      buttonPanel.removeAll();
+      if ( buttonList != null )
+        buttonList.clear();
+      for (int i=0; i<displayObject.length; i++) {
+        Object disObj = displayObject[i];
+        JRadioButton button = null;
+        if ( disObj instanceof Icon )
+          button = new JRadioButton((Icon)disObj);
+        else
+          button = new JRadioButton(disObj.toString());
+        button.addActionListener(actionListener);
+        if (this.displayToolTip != null)
+          button.setToolTipText( (String)displayToolTip.get(selectionObject[i]) );
+        buttonPanel.add(button);
+        buttonGroup.add(button);
+        buttonList.add(button);
+      }
+    }
+
+    /**
+     * Liefert den Index, der in der Button-Liste ausgewaehlt wurde.
+     * @return <code>-1</code> falls kein Objekt ausgewaehlt wurde
+     */
+    public int getSelectedIndex() {
+      if ( buttonGroup.getSelection() == null )
+        return -1;
+      return buttonList.indexOf( buttonGroup.getSelectedButton() );
+    }
+
+    /**
+     * Setzt den Index, der in der Button-Liste ausgewaehlt wurde.
+     * @param idx Listen-Index (-1 um eine Leer-Auswahl zu erzeugen)
+     */
+    public void setSelectedIndex(int idx) {
+// Event wird - glaube ich - bereits durch den ActionListener
+// des RadioButtons realisiert!
+//      Object oldValue = getValue();
+      if ( idx == -1 || idx >= buttonList.size() )
+        buttonGroup.setUnselected();
+      else
+        buttonList.elementAt(idx).setSelected(true);
+//      Object newValue = getValue();
+//      if ( oldValue != newValue || oldValue!=null && !oldValue.equals( getValue() ) )
+//        fireOptionChanged(oldValue,newValue);
+    }
+  }
+}

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/log4j/LoggerFrame.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/log4j/LoggerFrame.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/log4j/LoggerFrame.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -56,8 +56,8 @@
 import org.apache.log4j.spi.LoggerRepository;
 
 import de.schmitzm.swing.ExceptionDialog;
-import de.schmitzm.swing.FileInputOption;
 import de.schmitzm.swing.SwingUtil;
+import de.schmitzm.swing.input.FileInputOption;
 import de.schmitzm.swing.table.ComponentRenderer;
 
 /**

Modified: trunk/schmitzm-core/src/test/java/de/schmitzm/testing/SwingUtilTest.java
===================================================================
--- trunk/schmitzm-core/src/test/java/de/schmitzm/testing/SwingUtilTest.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-core/src/test/java/de/schmitzm/testing/SwingUtilTest.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -7,11 +7,11 @@
 import org.junit.Test;
 
 import de.schmitzm.swing.ExceptionDialog;
-import de.schmitzm.swing.FileInputOption;
-import de.schmitzm.swing.ManualInputOption;
-import de.schmitzm.swing.ManualInputOption.PasswordViewable;
-import de.schmitzm.swing.MultipleOptionPane;
-import de.schmitzm.swing.SelectionInputOption;
+import de.schmitzm.swing.input.FileInputOption;
+import de.schmitzm.swing.input.ManualInputOption;
+import de.schmitzm.swing.input.MultipleOptionPane;
+import de.schmitzm.swing.input.SelectionInputOption;
+import de.schmitzm.swing.input.ManualInputOption.PasswordViewable;
 import de.schmitzm.swing.SwingUtil;
 public class SwingUtilTest extends TestingClass {
 

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/GTUtil.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/GTUtil.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/GTUtil.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -64,8 +64,8 @@
 import org.opengis.referencing.operation.MathTransform;
 import org.opengis.referencing.operation.TransformException;
 
-import de.schmitzm.swing.ManualInputOption;
-import de.schmitzm.swing.ManualInputOption.Text;
+import de.schmitzm.swing.input.ManualInputOption;
+import de.schmitzm.swing.input.ManualInputOption.Text;
 
 /**
  * Diese Klasse enthaelt allgemeine Funktionen fuer die Arbeit mit Geotools.

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/feature/FeatureTypeBuilderTableModel.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/feature/FeatureTypeBuilderTableModel.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/feature/FeatureTypeBuilderTableModel.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -55,10 +55,10 @@
 import com.vividsolutions.jts.geom.Polygon;
 
 import de.schmitzm.geotools.gui.GeotoolsGUIUtil;
-import de.schmitzm.swing.BooleanInputOption;
 import de.schmitzm.swing.ExceptionDialog;
-import de.schmitzm.swing.ManualInputOption;
-import de.schmitzm.swing.SelectionInputOption;
+import de.schmitzm.swing.input.BooleanInputOption;
+import de.schmitzm.swing.input.ManualInputOption;
+import de.schmitzm.swing.input.SelectionInputOption;
 import de.schmitzm.swing.table.AbstractMutableTableModel;
 import de.schmitzm.swing.table.ComponentRenderer;
 import de.schmitzm.temp.BaseTypeUtil;

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/CRSSelectionDialog.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/CRSSelectionDialog.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/CRSSelectionDialog.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -64,11 +64,11 @@
 import de.schmitzm.swing.ExceptionDialog;
 import de.schmitzm.swing.InputOption;
 import de.schmitzm.swing.JPanel;
-import de.schmitzm.swing.SelectionInputOption;
 import de.schmitzm.swing.StatusDialog;
 import de.schmitzm.swing.SwingUtil;
 import de.schmitzm.swing.SwingWorker;
-import de.schmitzm.swing.event.InputOptionAdapter;
+import de.schmitzm.swing.input.InputOptionAdapter;
+import de.schmitzm.swing.input.SelectionInputOption;
 
 /**
  * Dieser Dialog stellt verschiedene {@link CoordinateReferenceSystem} (CRS) zur

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/ColorMapPanel.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/ColorMapPanel.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/ColorMapPanel.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -38,8 +38,8 @@
 
 import de.schmitzm.swing.InputOption;
 import de.schmitzm.swing.JPanel;
-import de.schmitzm.swing.SelectionInputOption;
-import de.schmitzm.swing.event.InputOptionAdapter;
+import de.schmitzm.swing.input.InputOptionAdapter;
+import de.schmitzm.swing.input.SelectionInputOption;
 
 /**
  * Besides a {@linkplain ColorMapTable table} for the color map entries

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/FeatureInputOption.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/FeatureInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/FeatureInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -37,8 +37,8 @@
 
 import de.schmitzm.geotools.feature.FeatureTableModel;
 import de.schmitzm.swing.InputOption;
-import de.schmitzm.swing.MultipleOptionPane;
 import de.schmitzm.swing.SwingUtil;
+import de.schmitzm.swing.input.MultipleOptionPane;
 
 /**
  * {@linkplain InputOption Eingabe-Option} zur Definition eines {@link SimpleFeature} im

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/FeatureTypeInputOption.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/FeatureTypeInputOption.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/FeatureTypeInputOption.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -36,8 +36,8 @@
 
 import de.schmitzm.geotools.feature.FeatureTypeBuilderTableModel;
 import de.schmitzm.swing.InputOption;
-import de.schmitzm.swing.MultipleOptionPane;
 import de.schmitzm.swing.SwingUtil;
+import de.schmitzm.swing.input.MultipleOptionPane;
 import de.schmitzm.swing.table.MutableTable;
 
 /**

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/JMapEditorPane.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/JMapEditorPane.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/JMapEditorPane.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -71,8 +71,8 @@
 import de.schmitzm.geotools.map.event.LayerEditStartedEvent;
 import de.schmitzm.geotools.map.event.MapContextSynchronizer;
 import de.schmitzm.swing.InputOption;
-import de.schmitzm.swing.MultipleOptionPane;
 import de.schmitzm.swing.event.MouseInputType;
+import de.schmitzm.swing.input.MultipleOptionPane;
 
 
 /**

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/JMapEditorToolBar.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/JMapEditorToolBar.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/JMapEditorToolBar.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -49,9 +49,9 @@
 import de.schmitzm.geotools.map.event.LayerEditCanceledEvent;
 import de.schmitzm.geotools.map.event.LayerEditFinishedEvent;
 import de.schmitzm.swing.ExceptionDialog;
-import de.schmitzm.swing.ManualInputOption;
-import de.schmitzm.swing.MultipleOptionPane;
-import de.schmitzm.swing.SelectionInputOption;
+import de.schmitzm.swing.input.ManualInputOption;
+import de.schmitzm.swing.input.MultipleOptionPane;
+import de.schmitzm.swing.input.SelectionInputOption;
 
 /**
  * A toolbar to control the operations of a {@link JMapEditorPane}.

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/LayeredMapFrame.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/LayeredMapFrame.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/LayeredMapFrame.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -49,8 +49,8 @@
 import de.schmitzm.geotools.map.event.FeatureSelectedEvent;
 import de.schmitzm.geotools.map.event.GridCoverageSelectedEvent;
 import de.schmitzm.geotools.map.event.JMapPaneListener;
-import de.schmitzm.swing.SelectionInputOption;
 import de.schmitzm.swing.SwingUtil;
+import de.schmitzm.swing.input.SelectionInputOption;
 
 /**
  * Diese Klasse stellt ein Fenster dar, in dem layer-basiert Objekte grafisch

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/StyleToolBar.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/StyleToolBar.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/StyleToolBar.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -42,11 +42,11 @@
 import org.geotools.styling.StyleBuilder;
 
 import de.schmitzm.geotools.feature.FeatureUtil;
-import de.schmitzm.swing.ColorInputOption;
 import de.schmitzm.swing.InputOption;
-import de.schmitzm.swing.SelectionInputOption;
 import de.schmitzm.swing.SwingUtil;
-import de.schmitzm.swing.event.InputOptionListener;
+import de.schmitzm.swing.input.ColorInputOption;
+import de.schmitzm.swing.input.InputOptionListener;
+import de.schmitzm.swing.input.SelectionInputOption;
 
 /**
  * A toolbar to define simple parameters of a layer style.

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtDbServerSettings.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtDbServerSettings.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtDbServerSettings.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -17,13 +17,13 @@
 import org.geotools.jdbc.JDBCDataStoreFactory;
 
 import de.schmitzm.geotools.postgres.PGUtil;
-import de.schmitzm.swing.BooleanInputOption;
-import de.schmitzm.swing.ManualInputOption;
-import de.schmitzm.swing.ManualInputOption.PasswordViewable;
-import de.schmitzm.swing.ManualInputOption.Text;
-import de.schmitzm.swing.MultipleOptionPane;
-import de.schmitzm.swing.SelectionInputOption;
-import de.schmitzm.swing.SelectionInputOption.Combo;
+import de.schmitzm.swing.input.BooleanInputOption;
+import de.schmitzm.swing.input.ManualInputOption;
+import de.schmitzm.swing.input.MultipleOptionPane;
+import de.schmitzm.swing.input.SelectionInputOption;
+import de.schmitzm.swing.input.ManualInputOption.PasswordViewable;
+import de.schmitzm.swing.input.ManualInputOption.Text;
+import de.schmitzm.swing.input.SelectionInputOption.Combo;
 
 /**
  * This class describes all settings needed to connect to a WFS server. This
@@ -100,7 +100,7 @@
 		Text hostInput = new ManualInputOption.Text("Hostname", true,
 				dbServer.getHost());
 
-		de.schmitzm.swing.ManualInputOption.Integer portInput = new ManualInputOption.Integer("Port", true,
+		de.schmitzm.swing.input.ManualInputOption.Integer portInput = new ManualInputOption.Integer("Port", true,
 				dbServer.getPort());
 
 		Text databaseInput = new ManualInputOption.Text("Database", true,

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtWfsServerSettings.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtWfsServerSettings.java	2011-01-27 12:08:06 UTC (rev 1430)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtWfsServerSettings.java	2011-01-27 12:18:24 UTC (rev 1431)
@@ -12,13 +12,13 @@
 import org.geotools.data.wfs.WFSDataStoreFactory;
 
 import de.schmitzm.lang.LangUtil;
-import de.schmitzm.swing.BooleanInputOption;
-import de.schmitzm.swing.ManualInputOption;
-import de.schmitzm.swing.ManualInputOption.PasswordViewable;
-import de.schmitzm.swing.ManualInputOption.Text;
-import de.schmitzm.swing.MultipleOptionPane;
-import de.schmitzm.swing.SelectionInputOption;
-import de.schmitzm.swing.SelectionInputOption.Combo;
+import de.schmitzm.swing.input.BooleanInputOption;
+import de.schmitzm.swing.input.ManualInputOption;
+import de.schmitzm.swing.input.MultipleOptionPane;
+import de.schmitzm.swing.input.SelectionInputOption;
+import de.schmitzm.swing.input.ManualInputOption.PasswordViewable;
+import de.schmitzm.swing.input.ManualInputOption.Text;
+import de.schmitzm.swing.input.SelectionInputOption.Combo;
 
 /**
  * This class describes all settings needed to connect to a WFS server. This
@@ -124,14 +124,14 @@
 		versionInput
 				.setToolTipText("If you have problems with Curves in GML3, try version 1.0.0.");
 
-		de.schmitzm.swing.ManualInputOption.Integer maxFeaturesInput = new ManualInputOption.Integer(
+		de.schmitzm.swing.input.ManualInputOption.Integer maxFeaturesInput = new ManualInputOption.Integer(
 				"Max. features per request (0=no limit)", false,
 				wfsServer.getMaxFeatures());
 		maxFeaturesInput
 				.setToolTipText(WFSDataStoreFactory.MAXFEATURES.description
 						.toString());
 
-		de.schmitzm.swing.ManualInputOption.Integer timeoutInput = new ManualInputOption.Integer("Timout in ms:",
+		de.schmitzm.swing.input.ManualInputOption.Integer timeoutInput = new ManualInputOption.Integer("Timout in ms:",
 				false, wfsServer.getTimeout());
 		timeoutInput.setToolTipText(WFSDataStoreFactory.TIMEOUT.description
 				.toString());



More information about the Schmitzm-commits mailing list