All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.chrlembeck.util.swing.formatter.FormattedTextFieldVerifier Maven / Gradle / Ivy

The newest version!
package de.chrlembeck.util.swing.formatter;

import java.text.ParseException;

import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JFormattedTextField.AbstractFormatter;

/**
 * InputVerifier für FormattedTextFields, der auf Grundlage des Formatters des Textfields die Eingaben in den
 * Textfeldern auf konsistenz überprüft. Kann der Formatter die Eingaben fehlerfrei konvertieren, wird die Eingabe als
 * valide anerkannt, ansonsten abgewiesen.
 *
 * @author Christoph Lembeck
 */
public class FormattedTextFieldVerifier extends InputVerifier {

    /**
     * Modifier, der die Komponente je nach überprüfungsstatus visuell anpassen kann. (Optional)
     */
    private final InputVerifierComponentModifier modifier;

    /**
     * Erstellt eine neue Instanz mit dem übergebenen Modifier zur Anpassung der überprüften Textfelder.
     * 
     * @param modifier
     *            Modifier zur Anpassung der überprüften Textfelder.
     */
    public FormattedTextFieldVerifier(final InputVerifierComponentModifier modifier) {
        this.modifier = modifier;
    }

    /**
     * Prüft die Eingabe mit Hilfe des Formatters des FormattedTextFields. Anschließend wir die Text-Komponente ggf. mit
     * Hilfe des optionalen Modifiers angepasst.
     */
    @Override
    public boolean verify(final JComponent input) {
        if (input instanceof JFormattedTextField) {
            final JFormattedTextField ftf = (JFormattedTextField) input;
            final AbstractFormatter formatter = ftf.getFormatter();
            if (formatter != null) {
                final String text = ftf.getText();
                try {
                    formatter.stringToValue(text);
                    modifyComponent(input, true);
                    return true;
                } catch (final ParseException pe) {
                    modifyComponent(input, false);
                    return false;
                }
            }
        }
        modifyComponent(input, true);
        return true;
    }

    /**
     * Passt das Textfeld mit Hilfe des gepeicherten Modifizierers an.
     * 
     * @param component
     *            Textfeld, auf dem die Prüfung stattgefunden hat.
     * @param isValid
     *            true, falls die Eingabe erlaubt ist, false bei einer falschen Eingabe.
     */
    private void modifyComponent(final JComponent component,
            final boolean isValid) {
        if (modifier != null) {
            modifier.modifyComponent(component, isValid);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy