[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