import javafx.application.Application; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.geometry.HPos; import javafx.geometry.Insets; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.CheckBox; import javafx.scene.control.CheckMenuItem; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.RadioMenuItem; import javafx.scene.control.Separator; import javafx.scene.control.SeparatorMenuItem; import javafx.scene.control.TextField; import javafx.scene.layout.BorderPane; import javafx.scene.layout.FlowPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.Pane; import javafx.stage.Stage; import com.jyloo.syntheticafx.OptionControlBox; import com.jyloo.syntheticafx.RootPane; import com.jyloo.syntheticafx.SyntheticaFX; import com.jyloo.syntheticafx.TitledBorderPane; public class OptionControlBoxDemo extends Application { public Parent createContent() { Pane centerPane = new FlowPane(4, 0); centerPane.setStyle("-fx-padding: 10"); // Slider Example /* OptionControlBox optionBox = new OptionControlBox(){ Slider fromSlider; Slider toSlider; ReadOnlyDoubleWrapper valueSum; { fromSlider = new Slider(0, 100, 50); fromSlider.setMajorTickUnit(20); fromSlider.setShowTickMarks(true); toSlider = new Slider(0, 100, 50); toSlider.setMajorTickUnit(20); toSlider.setShowTickMarks(true); valueSum = new ReadOnlyDoubleWrapper(this, "valueSum", 0); valueSum.bind(fromSlider.valueProperty().add(toSlider.valueProperty())); setNodes(fromSlider, toSlider); } @Override protected boolean isEmpty() { return valueSum.get() == 0; } @Override public void clearValue() { fromSlider.setValue(0); toSlider.setValue(0); } @Override public ObservableValue getProperty() { return valueSum; } }; */ // ComboBox Example ComboBox combo = new ComboBox<>(FXCollections.observableArrayList("Combo Item 1", "Combo Item 2", "Combo Item 3")); combo.getSelectionModel().select(1); OptionControlBox> optionBox = new OptionControlBox>(){ @Override public void clearValue() { combo.setValue(null); } @Override public ObservableValue getProperty() { return combo.valueProperty(); } }; optionBox.setNodes(combo); CheckMenuItem mi = new CheckMenuItem("Item A"); mi.setSelected(true); optionBox.getMenuItems().add(mi); optionBox.getMenuItems().add(new SeparatorMenuItem()); optionBox.getMenuItems().add(new CheckMenuItem("Item B")); optionBox.getMenuItems().add(new CheckMenuItem("Item C")); optionBox.getMenuItems().add(new RadioMenuItem("Item D")); optionBox.setOnAction((e) -> System.err.println(e)); centerPane.getChildren().add(optionBox); BorderPane content = new BorderPane(); content.setCenter(centerPane); content.setRight(createOptionPane(optionBox)); return content; } public Pane createOptionPane(OptionControlBox control) { GridPane grid = new GridPane(); grid.setVgap(10); grid.setHgap(10); grid.setPadding(new Insets(5)); int row = 0; grid.add(new Label("OptionButtonTooltipText"), 0, row); TextField textField = new TextField("Options"); control.optionButtonTooltipTextProperty().bind(textField.textProperty()); grid.add(textField, 1, row); row++; grid.add(new Label("ClearButtonPosition"), 0, row); ComboBox combo = new ComboBox<>(); combo.setItems(FXCollections.observableArrayList(HPos.values())); combo.getItems().remove(HPos.CENTER); combo.setValue(control.getClearButtonPosition()); control.clearButtonPositionProperty().addListener((o, ov, nv) -> combo.setValue(nv)); combo.valueProperty().addListener((o, ov, nv) -> control.setClearButtonPosition(nv)); grid.add(combo, 1, row); row++; grid.add(new Label("OptionButtonPosition"), 0, row); ComboBox combo2 = new ComboBox<>(); combo2.setItems(FXCollections.observableArrayList(HPos.values())); combo2.getItems().remove(HPos.CENTER); combo2.setValue(control.getOptionButtonPosition()); control.optionButtonPositionProperty().addListener((o, ov, nv) -> combo2.setValue(nv)); combo2.valueProperty().addListener((o, ov, nv) -> control.setOptionButtonPosition(nv)); grid.add(combo2, 1, row); row++; grid.add(new Separator(), 1, row); row++; CheckBox cb = new CheckBox("Clearable"); cb.setSelected(control.isClearable()); control.clearableProperty().addListener((o, ov, nv) -> cb.setSelected(nv)); cb.selectedProperty().addListener((o, ov, nv) -> control.setClearable(nv)); grid.add(cb, 1, row); row++; CheckBox cb2 = new CheckBox("Menu Enabled"); cb2.setSelected(control.isMenuEnabled()); cb2.selectedProperty().addListener((o, ov, nv) -> control.setMenuEnabled(nv)); grid.add(cb2, 1, row); row++; CheckBox cb3 = new CheckBox("Option Button Visible"); cb3.setSelected(control.isOptionButtonVisible()); cb3.selectedProperty().addListener((o, ov, nv) -> control.setOptionButtonVisible(nv)); grid.add(cb3, 1, row); return new TitledBorderPane("Options", grid); } @Override public void start(Stage primaryStage) throws Exception { SyntheticaFX.init("com.jyloo.syntheticafx.SyntheticaFXModena"); //SyntheticaFX.init("com.jyloo.syntheticafx.SyntheticaFXStandard"); primaryStage.setScene(new Scene(new RootPane(primaryStage, createContent()))); primaryStage.setTitle(getClass().getSimpleName()); primaryStage.show(); } public static void main(String[] args) { launch(args); } }