/* * @(#)ComboBoxesDemo.java 5/19/2013 * * Copyright 2002 - 2013 JIDE Software Inc. All rights reserved. */ package jidefx.examples.combobox; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.event.Event; import javafx.event.EventHandler; import javafx.geometry.*; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.control.*; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.Region; import javafx.scene.paint.Color; import javafx.scene.text.Font; import jidefx.examples.demo.AbstractFxDemo; import jidefx.scene.control.combobox.*; import jidefx.scene.control.decoration.DecorationPane; import jidefx.scene.control.decoration.DecorationUtils; import jidefx.scene.control.decoration.Decorator; import jidefx.scene.control.field.*; 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; public class ComboBoxesDemo extends AbstractFxDemo { public ComboBoxesDemo() { } public String getName() { return "FormattedComboBox/PopupField Demo"; } public static void main(String[] args) { launch(args); } public static final String PREFIX_COMBO_BOX_FORM = "ComboBoxForm"; public Region getDemoPanel() { Parent pane1 = createComboBoxFields(); Parent pane2 = createPopupFields(); HBox.setHgrow(pane1, Priority.ALWAYS); HBox.setHgrow(pane2, Priority.ALWAYS); HBox pane = new HBox(6, pane1, new Separator(Orientation.VERTICAL), pane2); return new DecorationPane(pane); } public static Parent createComboBoxFields() { MigPane pane = new MigPane(new LC().minWidth("450px").minHeight("600px").insets("20 10 10 10"), new AC().index(0).align("right").gap("20px").index(1).fill().grow().gap("6px").fill(), new AC().gap("6px")); Label title = new Label("ComboBoxes"); title.setStyle("-fx-font-size:1.4em;"); pane.add(title, new CC().span(2).alignX("left").wrap()); final CheckBox editableCheckBox = new CheckBox("Editable"); editableCheckBox.setSelected(false); editableCheckBox.selectedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { FXUtils.setRecursively(pane, new FXUtils.Handler() { @Override public boolean condition(Object c) { return c instanceof ComboBoxBase; } @Override public void action(Object c) { ((ComboBoxBase) c).setEditable(newValue); } }); } }); final CheckBox disableCheckBox = new CheckBox("Disable"); disableCheckBox.setSelected(false); disableCheckBox.selectedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { FXUtils.setRecursively(pane, new FXUtils.Handler() { @Override public boolean condition(Object c) { return c instanceof ComboBoxBase; } @Override public void action(Object c) { ((ComboBoxBase) c).setDisable(newValue); } }); } }); HBox hBox = new HBox(10, editableCheckBox, disableCheckBox); pane.add(hBox, new CC().spanX(2).alignX("right").gapBottom("10px").wrap()); Label dateLabel = new Label("java.util.Date:"); dateLabel.setId(PREFIX_COMBO_BOX_FORM + "dateLabel"); DateComboBox dateComboBox = new DateComboBox(); dateComboBox.setId(PREFIX_COMBO_BOX_FORM + "dateField"); pane.add(dateLabel); pane.add(dateComboBox, new CC().wrap()); addDecoratorForFormattedComboBox(dateLabel, dateComboBox); Label calendarLabel = new Label("java.util.Calendar:"); calendarLabel.setId(PREFIX_COMBO_BOX_FORM + "calendarLabel"); CalendarComboBox calendarComboBox = new CalendarComboBox(); calendarComboBox.setId(PREFIX_COMBO_BOX_FORM + "calendarField"); pane.add(calendarLabel); pane.add(calendarComboBox, new CC().wrap()); calendarComboBox.setOnShowing(new EventHandler<Event>() { @Override public void handle(Event event) { System.out.println("showing"); } }); calendarComboBox.setOnHidden(new EventHandler<Event>() { @Override public void handle(Event event) { System.out.println("hidden"); } }); addDecoratorForFormattedComboBox(calendarLabel, calendarComboBox); Label localDateLabel = new Label("java.time.LocalDate:"); localDateLabel.setId(PREFIX_COMBO_BOX_FORM + "localDateLabel"); LocalDateComboBox localDateComboBox = new LocalDateComboBox(); localDateComboBox.setId(PREFIX_COMBO_BOX_FORM + "localDateField"); pane.add(localDateLabel); pane.add(localDateComboBox, new CC().wrap()); addDecoratorForFormattedComboBox(localDateLabel, localDateComboBox); Label localDateTimeLabel = new Label("java.time.LocalDateTime:"); localDateTimeLabel.setId(PREFIX_COMBO_BOX_FORM + "localDateTimeLabel"); LocalDateTimeComboBox localDateTimeComboBox = new LocalDateTimeComboBox(); localDateTimeComboBox.setId(PREFIX_COMBO_BOX_FORM + "localDateTimeField"); pane.add(localDateTimeLabel); pane.add(localDateTimeComboBox, new CC().wrap()); addDecoratorForFormattedComboBox(localDateTimeLabel, localDateTimeComboBox); Label colorLabel = new Label("javafx.scene.paint.Color:"); colorLabel.setId(PREFIX_COMBO_BOX_FORM + "colorLabel"); ColorComboBox colorComboBox = new ColorComboBox(); colorComboBox.setId(PREFIX_COMBO_BOX_FORM + "colorField"); pane.add(colorLabel); pane.add(colorComboBox, new CC().wrap()); addDecoratorForFormattedComboBox(colorLabel, colorComboBox); Label integerLabel = new Label("Integer:"); integerLabel.setId(PREFIX_COMBO_BOX_FORM + "integerLabel"); IntegerComboBox integerComboBox = new IntegerComboBox(-50, 50, 0); integerComboBox.setId(PREFIX_COMBO_BOX_FORM + "integerField"); pane.add(integerLabel); pane.add(integerComboBox, new CC().wrap()); addDecoratorForFormattedComboBox(integerLabel, integerComboBox); Label fontLabel = new Label("javafx.scene.text.Font:"); fontLabel.setId(PREFIX_COMBO_BOX_FORM + "fontLabel"); FontComboBox fontComboBox = new FontComboBox(); fontComboBox.setId(PREFIX_COMBO_BOX_FORM + "fontField"); pane.add(fontLabel); pane.add(fontComboBox, new CC().wrap()); addDecoratorForFormattedComboBox(fontLabel, fontComboBox); Label point2DLabel = new Label("javafx.geometry.Point2D:"); point2DLabel.setId(PREFIX_COMBO_BOX_FORM + "point2DLabel"); Point2DComboBox point2DComboBox = new Point2DComboBox(); point2DComboBox.setId(PREFIX_COMBO_BOX_FORM + "point2DField"); point2DComboBox.setValue(new Point2D(10, 20)); pane.add(point2DLabel); pane.add(point2DComboBox, new CC().wrap()); addDecoratorForFormattedComboBox(point2DLabel, point2DComboBox); Label point3DLabel = new Label("javafx.geometry.Point3D:"); point3DLabel.setId(PREFIX_COMBO_BOX_FORM + "point3DLabel"); Point3DComboBox point3DComboBox = new Point3DComboBox(); point3DComboBox.setId(PREFIX_COMBO_BOX_FORM + "point3DField"); point3DComboBox.setValue(new Point3D(10, 20, 30)); pane.add(point3DLabel); pane.add(point3DComboBox, new CC().wrap()); addDecoratorForFormattedComboBox(point3DLabel, point3DComboBox); Label insetsLabel = new Label("javafx.geometry.Insets:"); insetsLabel.setId(PREFIX_COMBO_BOX_FORM + "insetsLabel"); InsetsComboBox insetsComboBox = new InsetsComboBox(); insetsComboBox.setId(PREFIX_COMBO_BOX_FORM + "insetsField"); pane.add(insetsLabel); pane.add(insetsComboBox, new CC().wrap()); addDecoratorForFormattedComboBox(insetsLabel, insetsComboBox); Label dimension2DLabel = new Label("javafx.geometry.Dimension2D:"); dimension2DLabel.setId(PREFIX_COMBO_BOX_FORM + "dimension2DLabel"); Dimension2DComboBox dimension2DComboBox = new Dimension2DComboBox(); dimension2DComboBox.setId(PREFIX_COMBO_BOX_FORM + "dimension2DField"); dimension2DComboBox.setValue(new Dimension2D(10, 20)); pane.add(dimension2DLabel); pane.add(dimension2DComboBox, new CC().wrap()); addDecoratorForFormattedComboBox(dimension2DLabel, dimension2DComboBox); Label rectangle2DLabel = new Label("javafx.geometry.Rectangle2D:"); rectangle2DLabel.setId(PREFIX_COMBO_BOX_FORM + "rectangle2DLabel"); Rectangle2DComboBox rectangle2DComboBox = new Rectangle2DComboBox(); rectangle2DComboBox.setId(PREFIX_COMBO_BOX_FORM + "rectangle2DField"); rectangle2DComboBox.setValue(new Rectangle2D(10, 20, 30, 40)); pane.add(rectangle2DLabel); pane.add(rectangle2DComboBox, new CC().wrap()); addDecoratorForFormattedComboBox(rectangle2DLabel, rectangle2DComboBox); Label boundingBoxLabel = new Label("javafx.geometry.BoundingBox:"); boundingBoxLabel.setId(PREFIX_COMBO_BOX_FORM + "boundingBoxLabel"); BoundingBoxComboBox boundingBoxComboBox = new BoundingBoxComboBox(); boundingBoxComboBox.setId(PREFIX_COMBO_BOX_FORM + "boundingBoxField"); boundingBoxComboBox.setValue(new BoundingBox(10, 20, 30, 40, 50, 60)); pane.add(boundingBoxLabel); pane.add(boundingBoxComboBox, new CC().wrap()); addDecoratorForFormattedComboBox(boundingBoxLabel, boundingBoxComboBox); return pane; } public static Parent createPopupFields() { MigPane pane = new MigPane(new LC().minWidth("450px").minHeight("450px").insets("20 10 10 10"), new AC().index(0).align("right").gap("20px").index(1).fill().grow().gap("6px").fill(), new AC().gap("6px")); Label title = new Label("PopupFields"); title.setStyle("-fx-font-size:1.4em;"); pane.add(title, new CC().span(2).alignX("left").wrap()); final CheckBox showSpinnersCheckBox = new CheckBox("Show Spinners"); showSpinnersCheckBox.setSelected(false); showSpinnersCheckBox.selectedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { FXUtils.setRecursively(pane, new FXUtils.Handler() { @Override public boolean condition(Object c) { return c instanceof FormattedTextField; } @Override public void action(Object c) { if (c instanceof PopupField) { ((FormattedTextField) c).setSpinnersVisible(newValue); ((PopupField) c).setPopupButtonVisible(!newValue); } else { ((FormattedTextField) c).setSpinnersVisible(newValue); } } }); } }); final CheckBox editableCheckBox = new CheckBox("Editable"); editableCheckBox.setSelected(true); editableCheckBox.selectedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { FXUtils.setRecursively(pane, new FXUtils.Handler() { @Override public boolean condition(Object c) { return c instanceof FormattedTextField; } @Override public void action(Object c) { ((FormattedTextField) c).setEditable(newValue); } }); } }); final CheckBox disableCheckBox = new CheckBox("Disable"); disableCheckBox.setSelected(false); disableCheckBox.selectedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { FXUtils.setRecursively(pane, new FXUtils.Handler() { @Override public boolean condition(Object c) { return c instanceof FormattedTextField; } @Override public void action(Object c) { ((FormattedTextField) c).setDisable(newValue); } }); } }); HBox hBox = new HBox(10, showSpinnersCheckBox, editableCheckBox, disableCheckBox); pane.add(hBox, new CC().spanX(2).alignX("right").gapBottom("10px").wrap()); Label dateLabel = new Label("java.util.Date:"); dateLabel.setId(PREFIX_COMBO_BOX_FORM + "dateLabel"); PopupField dateField = DateField.createDateField(); dateField.setId(PREFIX_COMBO_BOX_FORM + "dateField"); pane.add(dateLabel); pane.add(dateField, new CC().wrap()); addDecoratorForPopupField(dateLabel, dateField); Label calendarLabel = new Label("java.util.Calendar:"); calendarLabel.setId(PREFIX_COMBO_BOX_FORM + "calendarLabel"); PopupField calendarField = CalendarField.createCalendarField(Calendar.getInstance()); calendarField.setId(PREFIX_COMBO_BOX_FORM + "calendarField"); pane.add(calendarLabel); pane.add(calendarField, new CC().wrap()); addDecoratorForPopupField(calendarLabel, calendarField); Label localDateLabel = new Label("java.time.LocalDate:"); localDateLabel.setId(PREFIX_COMBO_BOX_FORM + "localDateLabel"); PopupField localDateField = LocalDateField.createLocalDateField(); localDateField.setId(PREFIX_COMBO_BOX_FORM + "localDateField"); pane.add(localDateLabel); pane.add(localDateField, new CC().wrap()); addDecoratorForPopupField(localDateLabel, localDateField); Label localDateTimeLabel = new Label("java.time.LocalDateTime:"); localDateTimeLabel.setId(PREFIX_COMBO_BOX_FORM + "localDateTimeLabel"); PopupField localDateTimeField = LocalDateTimeField.createLocalDateTimeField(); localDateTimeField.setId(PREFIX_COMBO_BOX_FORM + "localTimeField"); pane.add(localDateTimeLabel); pane.add(localDateTimeField, new CC().wrap()); addDecoratorForPopupField(localDateTimeLabel, localDateTimeField); Label colorLabel = new Label("javafx.scene.paint.Color:"); colorLabel.setId(PREFIX_COMBO_BOX_FORM + "colorLabel"); ColorField colorField = new ColorField(ColorField.ColorFormat.RGB); colorField.setValue(Color.WHITE); colorField.setId(PREFIX_COMBO_BOX_FORM + "colorField"); pane.add(colorLabel); pane.add(colorField, new CC().wrap()); addDecoratorForPopupField(colorLabel, colorField); Label integerLabel = new Label("Integer:"); integerLabel.setId(PREFIX_COMBO_BOX_FORM + "integerLabel"); IntegerField integerField = new IntegerField(-50, 50, 0); integerField.setId(PREFIX_COMBO_BOX_FORM + "integerField"); pane.add(integerLabel); pane.add(integerField, new CC().wrap()); addDecoratorForPopupField(integerLabel, integerField); Label fontLabel = new Label("javafx.scene.text.Font:"); fontLabel.setId(PREFIX_COMBO_BOX_FORM + "fontLabel"); FontField fontField = new FontField(); fontField.setValue(Font.getDefault()); fontField.setId(PREFIX_COMBO_BOX_FORM + "fontField"); pane.add(fontLabel); pane.add(fontField, new CC().wrap()); addDecoratorForPopupField(fontLabel, fontField); Label point2DLabel = new Label("javafx.geometry.Point2D:"); point2DLabel.setId(PREFIX_COMBO_BOX_FORM + "point2DLabel"); Point2DField point2DField = new Point2DField(); point2DField.setValue(new Point2D(10, 20)); point2DField.setId(PREFIX_COMBO_BOX_FORM + "point2DField"); pane.add(point2DLabel); pane.add(point2DField, new CC().wrap()); addDecoratorForPopupField(point2DLabel, point2DField); Label point3DLabel = new Label("javafx.geometry.Point3D:"); point3DLabel.setId(PREFIX_COMBO_BOX_FORM + "point3DLabel"); Point3DField point3DField = new Point3DField(); point3DField.setValue(new Point3D(10, 20, 30)); point3DField.setId(PREFIX_COMBO_BOX_FORM + "point3DField"); pane.add(point3DLabel); pane.add(point3DField, new CC().wrap()); addDecoratorForPopupField(point3DLabel, point3DField); Label insetsLabel = new Label("javafx.geometry.Insets:"); insetsLabel.setId(PREFIX_COMBO_BOX_FORM + "insetsLabel"); InsetsField insetsField = new InsetsField(); insetsField.setValue(new Insets(15, 25, 35, 45)); insetsField.setId(PREFIX_COMBO_BOX_FORM + "insetsField"); pane.add(insetsLabel); pane.add(insetsField, new CC().wrap()); addDecoratorForPopupField(insetsLabel, insetsField); Label dimension2DLabel = new Label("javafx.geometry.Dimension2D:"); dimension2DLabel.setId(PREFIX_COMBO_BOX_FORM + "dimension2DLabel"); Dimension2DField dimension2DField = new Dimension2DField(); dimension2DField.setValue(new Dimension2D(10, 20)); dimension2DField.setId(PREFIX_COMBO_BOX_FORM + "dimension2DField"); pane.add(dimension2DLabel); pane.add(dimension2DField, new CC().wrap()); addDecoratorForPopupField(dimension2DLabel, dimension2DField); Label rectangle2DLabel = new Label("javafx.geometry.Rectangle2D:"); rectangle2DLabel.setId(PREFIX_COMBO_BOX_FORM + "rectangle2DLabel"); Rectangle2DField rectangle2DField = new Rectangle2DField(); rectangle2DField.setValue(new Rectangle2D(10, 20, 30, 40)); rectangle2DField.setId(PREFIX_COMBO_BOX_FORM + "rectangle2DField"); pane.add(rectangle2DLabel); pane.add(rectangle2DField, new CC().wrap()); addDecoratorForPopupField(rectangle2DLabel, rectangle2DField); Label boundingBoxLabel = new Label("javafx.geometry.BoundingBox:"); boundingBoxLabel.setId(PREFIX_COMBO_BOX_FORM + "boundingBoxLabel"); BoundingBoxField boundingBoxField = new BoundingBoxField(); boundingBoxField.setValue(new BoundingBox(10, 20, 30, 40, 50, 60)); boundingBoxField.setId(PREFIX_COMBO_BOX_FORM + "boundingBoxField"); pane.add(boundingBoxLabel); pane.add(boundingBoxField, new CC().wrap()); addDecoratorForPopupField(boundingBoxLabel, boundingBoxField); return pane; } private static void addDecoratorForFormattedComboBox(Label label, FormattedComboBox<?> field) { ImageView tip = new ImageView(new Image("/jidefx/examples/fields/formatted.png")); Tooltip tooltip = new Tooltip("Pattern:" + field.getEditor().getPattern()); Tooltip.install(tip, tooltip); DecorationUtils.install(label, new Decorator<Node>(tip, Pos.CENTER_RIGHT, new Point2D(80, 0))); field.getEditor().installAdjustmentMouseHandler(label, 1); } private static void addDecoratorForPopupField(Label label, PopupField<?> field) { field.setPopupButtonVisible(true); ImageView tip = new ImageView(new Image("/jidefx/examples/fields/formatted.png")); Tooltip tooltip = new Tooltip("Pattern:" + field.getPattern()); Tooltip.install(tip, tooltip); DecorationUtils.install(label, new Decorator<Node>(tip, Pos.CENTER_RIGHT, new Point2D(80, 0))); field.installAdjustmentMouseHandler(label, 1); } @Override public String getDemoFolder() { return "src/combobox"; } }