/* * @(#)TextFieldsDemo.java 5/19/2013 * * Copyright 2002 - 2013 JIDE Software Inc. All rights reserved. */ package jidefx.examples.fields; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.geometry.Insets; import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.scene.control.Label; import javafx.scene.control.ListView; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.Region; import javafx.scene.layout.VBox; import jidefx.examples.demo.AbstractFxDemo; import jidefx.scene.control.decoration.DecorationPane; import jidefx.scene.control.field.DateField; import jidefx.scene.control.field.FormattedTextField; import jidefx.scene.control.field.SpinnerStyle; import jidefx.utils.FXUtils; import net.miginfocom.layout.AC; import net.miginfocom.layout.CC; import net.miginfocom.layout.LC; import org.tbee.javafx.scene.layout.MigPane; import java.util.Calendar; import java.util.Date; public class SpinnerStyleDemo extends AbstractFxDemo { private DecorationPane _decorationPane; private FormattedTextField<Date> _noBorderField; private FormattedTextField<Date> _borderedField; private FormattedTextField<Date> _customizedField; private final static String DATE_FORMAT = "EEEE yyyy.MMMM.dd G"; public SpinnerStyleDemo() { } public String getName() { return "Spinner Style Demo"; } public static void main(String[] args) { launch(args); } public Region getDemoPanel() { MigPane pane = new MigPane(new LC().width("450px").minHeight("450px").insets("20 10 10 10"), new AC().index(0).align("right").gap("30px").index(1).fill().grow().gap("6px").fill(), new AC().gap("50px")); Label title = new Label("Customizing Spinner Buttons"); title.setStyle("-fx-font-size: 1.4em;"); pane.add(title, new CC().span(2).alignX("left").wrap()); Label noBorderLabel = new Label("Using FormattedText itself:"); _noBorderField = DateField.createDateField(DATE_FORMAT, Calendar.getInstance().getTime()); pane.add(noBorderLabel); pane.add(_noBorderField, new CC().wrap()); addDecorator(noBorderLabel, _noBorderField); Label borderedLabel = new Label("Using FormattedText.asSpinner:"); _borderedField = new DateField(DATE_FORMAT, Calendar.getInstance().getTime()) { @Override protected Button createDecreaseSpinnerButton() { Button decreaseSpinnerButton = super.createDecreaseSpinnerButton(); decreaseSpinnerButton.setId("decreaseSpinnerButton"); return decreaseSpinnerButton; } }; pane.add(borderedLabel); Node borderedDecorationPane = _borderedField.asSpinner(); pane.add(borderedDecorationPane, new CC().wrap()); addDecorator(borderedLabel, _borderedField); Label customizedLabel = new Label("Customized Buttons using CSS:"); _customizedField = new DateField(DATE_FORMAT, Calendar.getInstance().getTime()); Node node = _customizedField.asSpinner(); node.setId("customField"); pane.add(customizedLabel); pane.add(node, new CC().wrap()); pane.getStylesheets().add(SpinnerStyleDemo.class.getResource("CustomFields.css").toExternalForm()); addDecorator(customizedLabel, _customizedField); HBox.setHgrow(pane, Priority.ALWAYS); HBox hBox = new HBox(6, pane); hBox.setPadding(new Insets(0, 20, 0, 0)); // demo code to create field with all the styles for screenshot purpose /* for (SpinnerStyle style : SpinnerStyle.values()) { FormattedTextField field1 = new LocalDateField(DATE_FORMAT, LocalDate.now()); pane.add(new Label(style.name())); pane.add(field1.asSpinner(style), new CC().wrap()); FormattedTextField field2 = new LocalDateField(DATE_FORMAT, LocalDate.now()); pane.add(new Label(style.name() + " (non-editable)")); pane.add(field2.asSpinner(style), new CC().wrap()); field2.setEditable(false); } */ _decorationPane = new DecorationPane(hBox); return _decorationPane; } private static void addDecorator(Label label, FormattedTextField<?> field) { field.setSpinnersVisible(true); field.installAdjustmentMouseHandler(label, 1); } @Override public Region getOptionsPanel() { VBox optionPane = new VBox(); optionPane.setSpacing(10); ListView<SpinnerStyle> styleListView = new ListView<>(); styleListView.getItems().addAll(SpinnerStyle.values()); CheckBox editableCheckBox = new CheckBox("Editable"); editableCheckBox.setSelected(true); styleListView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<SpinnerStyle>() { @Override public void changed(ObservableValue<? extends SpinnerStyle> observable, SpinnerStyle oldValue, SpinnerStyle newValue) { _noBorderField.setSpinnerStyle(newValue); _borderedField.setSpinnerStyle(newValue); _customizedField.setSpinnerStyle(newValue); } }); editableCheckBox.selectedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { FXUtils.setRecursively(_decorationPane, new FXUtils.Handler() { @Override public boolean condition(Object c) { return c instanceof FormattedTextField; } @Override public void action(Object c) { ((FormattedTextField) c).setEditable(newValue); } }); } }); optionPane.getChildren().addAll(editableCheckBox, new Label("Pre-defined Styles"), styleListView); return optionPane; } @Override public String getDemoFolder() { return "src/field"; } }