[JAVA] Verwenden Sie ControlsFX / Validation

Umgebung

Validierung in ControlsFX

Verwenden Sie die Validierungsfunktion von ControlsFX, um die Eingabeprüfung in JavaFX-Anwendungen zu implementieren. Es sieht wie folgt aus.

0.png

Wenn Sie den Cursor auf das Fehlersymbol setzen, wird eine Fehlermeldung als Werkzeugchip angezeigt. (Es fühlt sich ein wenig schwer zu bemerken)

0e.png

Vorbereitung

Da ControlsFX verwendet wird, fügen Sie der Abhängigkeit von Gradle oder Maven ControlsFX hinzu. Wenn Sie direkt importieren möchten, laden Sie diese bitte von [hier] herunter (http://fxexperience.com/controlsfx/).

Validator Validator bietet einen grundlegenden Mechanismus zum Überprüfen Ihrer Eingabe, und Sie können auch Ihre eigenen Bedingungen definieren. Sie können einen Validator mit den folgenden vier Methoden erstellen.

Validator<T>:: Bewegung
createEmptyValicator Setzen Sie die leere Eingabe auf ERROR
createEqualsValidator Stellen Sie ERROR für Eingaben ein, die nicht in der Liste enthalten sind
createRegexValidator Setzen Sie ERROR auf eine Eingabe, die nicht mit dem regulären Ausdruck übereinstimmt
createPredicateValidator Angegebenes Prädikat<S>Stellen Sie die Eingabe ein, die nicht mit ERROR übereinstimmt

Prädikat <S> ist eine funktionale Schnittstelle, die einen ** Steuerwert ** annimmt und einen Booleschen zurückgibt. Sie können Ihre bevorzugten Bedingungen mithilfe von Lambda-Ausdrücken implementieren, sodass Sie klar schreiben können und dies nützlich ist. Geben Sie außerdem die Fehlerstufe (Severity.ERROR oder Severity.WARNING) und die Fehlermeldung im Argument an. Validator (ControlsFX): API Document

Um mehrere Validatoren in einem Steuerelement festzulegen, müssen Sie "Validator :: kombinieren" verwenden, um die Validatoren zu synthetisieren, auf die hier nicht eingegangen wird. (Es gibt auch eine Möglichkeit, dies mit nur einem zu tun, z. B. "Bitte im Format eingeben" als leeren Scheck.)

Ein Codebeispiel für die Validierung ist unten angegeben.

ValidationSupport "Valicator" wird verwendet, indem es in der "ValidationSupport" -Klasse registriert wird. Danach erfolgt die Validierung automatisch jedes Mal, wenn der Eingabeinhalt geändert wird, sodass die gesamte Validierung nur mit dem folgenden Beispiel funktioniert.

Verwenden Sie "ValidationSupport :: registerValidator", um den Validator zu registrieren. Sie können festlegen, ob das erforderliche Symbol zum Zeitpunkt der Registrierung angezeigt werden soll.

In initialisieren etc.


ValidationSupport support = new ValidationSupport();
support.registerValidator(textField1, false, Validator.createEmptyValidator(
                "Text is required",
                Severity.WARNING));
support.registerValidator(textField2, Validator.createEqualsValidator(
                "A or B or C is required",
                Arrays.asList("A", "B", "C")));
support.registerValidator(textField3, Validator.createRegexValidator(
                "Number is required",
                Pattern.compile("^[0-9]+$"), Severity.ERROR));
support.registerValidator(checkBox, Validator.createEqualsValidator(
                "Check is required",
                Collections.singletonList(true)));
support.registerValidator(comboBox, Validator.createEqualsValidator(
                "First item is required",
                Collections.singletonList(comboBox.getItems().get(0))));
support.registerValidator(colorPicker, Validator.createEqualsValidator(
                "WHITE or BLACK is required",
                Arrays.asList(Color.WHITE, Color.BLACK)));
support.registerValidator(slider, Validator.createPredicateValidator(
                (Double value) ->  value > 0.0,
                "Positive number is required"));

//Verwenden des statischen Imports
// import static org.controlsfx.validation.Validator.*;
//Dann jedes Mal Validator.Du musst nicht schreiben

5.png

Die ValidationSupport-Klasse verfügt über Eigenschaften für das gesamte Validierungsergebnis. Dies ist nützlich, um einen Mechanismus zu implementieren, der dem gesamten Ergebnis folgt.

//Schaltflächen, die nur gültig sind, wenn alle Ergebnisse gültig sind
Button buttonValidated= new Button();
buttonValidated.disableProperty().bind(support.invalidProperty());

//ListView, um alle Fehlermeldungen anzuzeigen
ListView<ValidationMessage> listView = new ListView<>();
support.validationResultProperty().addListener((o, oldValue, newValue) ->
                listView.getItems().setAll(newValue.getMessages()));

ValidationSupport (ControlsFX): API Document

Wenn Sie die Fehleranzeige per CSS ändern möchten

Im obigen Beispiel wird der Fehler nur mit dem Standardsymbol angezeigt. Sie können dies jedoch ändern. Wenn Sie "StyleClassValidateionDecoration" verwenden, wird dem Steuerelement eine Stilklasse hinzugefügt, "Warnung" für Warnungen und "Fehler" für Fehler. Der Implementierer muss den Stil zum Zeitpunkt des Fehlers in der auf "Szene" angewendeten CSS-Datei beschreiben. Es kann auch in Kombination mit der Symbolanzeige verwendet werden.

//Nur für CSS
support.setValidationDecorator(new StyleClassValidationDecoration());
//Wenn Sie Symbole und CSS zusammen verwenden
support.setValidationDecorator(new CompoundValidationDecoration(
    new GraphicValidationDecoration(), 
    new StyleClassValidationDecoration()));

Main.css


.warning{
    -fx-border-color: orange;
    -fx-border-width: 2;
}
.error{
    -fx-border-color: red;
    -fx-border-width: 2;
}

Wo kann man FXML usw. lesen?


scene.getStylesheets().addAll(getClass().getResource("Main.css").toExternalForm());

Das Folgende ist die Bildschirmanzeige, wenn Sie das Symbol und CSS zusammen verwenden.

5e.png

Nur im Fall von CSS gibt es keine Möglichkeit, den Werkzeugchip anzuzeigen. Daher ist es erforderlich, einen Entwurf zu erstellen, um den Fehlerinhalt zu übermitteln.

Wenn Sie Symbole und Werkzeugchips neu gestalten möchten

Es gibt eine Möglichkeit, Symbole und QuickInfos neu zu gestalten, indem Sie "GraphicValidationDecoration" erben und die entsprechende Methode überschreiben.

GraphicValidationDecoration:: Erläuterung
createErrorNode Fehlersymbol
createWarningNode Warnsymbol
createRequireDecorations Erforderliches Symbol
createTooltip Tooltip

Ich denke, es wäre einfacher, einen Teil davon unter Bezugnahme auf die Originalquelle neu zu schreiben. GraphicValidationDecoration (ControlsFX): API Document bitbucket: GraphicValidationDecoration

Code zum Festlegen der geerbten Klasse


support.setValidationDecorator(new YourGraphicValidationDecoration());

Vorsichtsmaßnahmen beim Überprüfen benutzerdefinierter Steuerelemente

Der ControlsFX-Validator weiß nicht, welche Eigenschaft des von Ihnen erstellten benutzerdefinierten Steuerelements überprüft werden soll. Wenn Sie ein Steuerelement validieren möchten, das nicht dem JavaFX-Standard entspricht, müssen Sie es mit dem folgenden Code unterrichten. Klicken Sie hier für eine offizielle Erklärung

//Wenn Sie den Wert einer Eigenschaft für das YourControl-Steuerelement überprüfen möchten
ValueExtractor.addObservableValueExtractor( 
        c -> c instanceof YourControl, 
        c -> ((YourControl)c).someProperty());

Referenz

ControlsFX: sample Quelle: GIT FXML,CSS: GIT

Recommended Posts

Verwenden Sie ControlsFX / Validation
[Rails] Verwendung der Validierung
Verwenden Sie before_action! !!
Verwenden Sie XMLHttpRequest
[Schienen] Verwenden Sie die Validierung für einen bestimmten Controller
Verwenden Sie AutosizingTextView