org.controlsfx.samples.HelloValidation Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of controlsfx-samples Show documentation
Show all versions of controlsfx-samples Show documentation
High quality UI controls and other tools to complement the core JavaFX distribution
/**
* Copyright (c) 2014, 2019 ControlsFX
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of ControlsFX, any associated website, nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL CONTROLSFX BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.controlsfx.samples;
import java.time.LocalDate;
import java.util.Arrays;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Control;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.Slider;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Callback;
import org.controlsfx.ControlsFXSample;
import org.controlsfx.validation.ValidationResult;
import org.controlsfx.validation.ValidationSupport;
import org.controlsfx.validation.Validator;
import org.controlsfx.validation.decoration.CompoundValidationDecoration;
import org.controlsfx.validation.decoration.GraphicValidationDecoration;
import org.controlsfx.validation.decoration.StyleClassValidationDecoration;
import org.controlsfx.validation.decoration.ValidationDecoration;
public class HelloValidation extends ControlsFXSample {
private TextField textField = new TextField();
private ValidationSupport validationSupport = new ValidationSupport();
@Override public String getSampleName() {
return "Component Validation";
}
@Override public String getJavaDocURL() {
return Utils.JAVADOC_BASE + "org/controlsfx/validation/ValidationSupport.html";
}
@Override public String getSampleDescription() {
return "Component Validation";
}
@Override public Node getPanel(final Stage stage) {
GridPane root = new GridPane();
root.setVgap(10);
root.setHgap(10);
root.setPadding(new Insets(30, 30, 0, 30));
root.sceneProperty().addListener(new InvalidationListener() {
@Override public void invalidated(Observable o) {
if (root.getScene() != null) {
root.getScene().getStylesheets().add(HelloDecorator.class.getResource("validation.css").toExternalForm());
}
}
});
int row = 0;
// text field
validationSupport.registerValidator(textField, Validator.createEmptyValidator("Text is required"));
root.add(new Label("TextField"), 0, row);
root.add(textField, 1, row);
GridPane.setHgrow(textField, Priority.ALWAYS);
//combobox
row++;
ComboBox combobox = new ComboBox();
combobox.getItems().addAll("Item A", "Item B", "Item C");
validationSupport.registerValidator(combobox, (Control c, String newValue) ->
ValidationResult.fromErrorIf(combobox, "ComboBox Selection required", newValue == null || newValue.isEmpty())
.addInfoIf(combobox, "Item A is the first item", "Item A".equals(newValue))
.addInfoIf(combobox, "Item B is the second item", "Item B".equals(newValue))
.addInfoIf(combobox, "Item C is the third item", "Item C".equals(newValue))
);
root.add(new Label("ComboBox"), 0, row);
root.add(combobox, 1, row);
GridPane.setHgrow(combobox, Priority.ALWAYS);
//choicebox
row++;
ChoiceBox choiceBox = new ChoiceBox();
choiceBox.getItems().addAll("Item A", "Item B", "Item C");
validationSupport.registerValidator(choiceBox, Validator.createEmptyValidator("ChoiceBox Selection required"));
root.add(new Label("ChoiceBox"), 0, row);
root.add(choiceBox, 1, row);
GridPane.setHgrow(choiceBox, Priority.ALWAYS);
//checkbox
row++;
CheckBox checkBox = new CheckBox();
validationSupport.registerValidator(checkBox, (Control c, Boolean newValue) ->
ValidationResult.fromErrorIf(c, "Checkbox should be checked", !newValue));
root.add(new Label("CheckBox"), 0, row);
root.add(checkBox, 1, row);
GridPane.setHgrow(checkBox, Priority.ALWAYS);
//slider
row++;
Slider slider = new Slider(-50d, 50d, -10d);
slider.setShowTickLabels(true);
validationSupport.registerValidator(slider, (Control c, Double newValue) ->
ValidationResult.fromErrorIf(slider, "Slider value should be > 0", newValue <= 0));
root.add(new Label("Slider"), 0, row);
root.add(slider, 1, row);
GridPane.setHgrow(slider, Priority.ALWAYS);
// color picker
row++;
ColorPicker colorPicker = new ColorPicker(Color.RED);
validationSupport.registerValidator(colorPicker,
Validator.createEqualsValidator("Color should be WHITE or BLACK", Arrays.asList(Color.WHITE, Color.BLACK)));
root.add(new Label("Color Picker"), 0, row);
root.add(colorPicker, 1, row);
GridPane.setHgrow(colorPicker, Priority.ALWAYS);
// date picker
row++;
DatePicker datePicker = new DatePicker();
validationSupport.registerValidator(datePicker, false, (Control c, LocalDate newValue) ->
ValidationResult.fromWarningIf(datePicker, "The date should be today", !LocalDate.now().equals(newValue)));
root.add(new Label("Date Picker"), 0, row);
root.add(datePicker, 1, row);
GridPane.setHgrow(datePicker, Priority.ALWAYS);
ScrollPane scrollPane = new ScrollPane(root);
return scrollPane;
}
@Override public Node getControlPanel() {
GridPane grid = new GridPane();
grid.setVgap(10);
grid.setHgap(10);
grid.setPadding(new Insets(30, 30, 0, 30));
ValidationDecoration iconDecorator = new GraphicValidationDecoration();
ValidationDecoration cssDecorator = new StyleClassValidationDecoration();
ValidationDecoration compoundDecorator = new CompoundValidationDecoration(cssDecorator, iconDecorator);
int row = 0;
// --- validation decorator
Callback, ListCell> cellFactory = listView -> new ListCell() {
@Override protected void updateItem(ValidationDecoration decorator, boolean empty) {
super.updateItem(decorator, empty);
if (empty) {
setText("");
} else {
if (decorator instanceof StyleClassValidationDecoration) {
setText("Style Class Validation Decorator");
} else if (decorator instanceof GraphicValidationDecoration) {
setText("Graphic Validation Decorator");
} else if (decorator instanceof CompoundValidationDecoration) {
setText("Compound Validation Decorator");
} else {
setText("Unknown decorator type!");
}
}
}
};
ComboBox decoratorBox = new ComboBox<>();
decoratorBox.getItems().addAll(iconDecorator, cssDecorator, compoundDecorator);
decoratorBox.setCellFactory(cellFactory);
decoratorBox.setButtonCell(cellFactory.call(null));
decoratorBox.getSelectionModel().selectedItemProperty().addListener((o,old,decorator) ->
validationSupport.setValidationDecorator(decorator));
decoratorBox.getSelectionModel().select(0);
Label validationDecoratorLabel = new Label("Validation Decorator: ");
validationDecoratorLabel.getStyleClass().add("property");
grid.add(validationDecoratorLabel, 0, row);
grid.add(decoratorBox, 1, row);
GridPane.setHgrow(decoratorBox, Priority.ALWAYS);
row++;
ToggleButton btnToggleRequired = new ToggleButton("Toggle TextField required status");
btnToggleRequired.setSelected(ValidationSupport.isRequired(textField));
btnToggleRequired.setOnAction(e -> {
ValidationSupport.setRequired(textField, btnToggleRequired.isSelected());
});
grid.add(btnToggleRequired, 1, row, 1, 1);
return grid;
}
public static void main(String[] args) {
launch(args);
}
}