package examples; import javafx.application.Application; import javafx.collections.FXCollections; import javafx.geometry.Insets; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.scene.control.Label; import javafx.scene.control.Separator; 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 syntheticafx.base.RootPane; import syntheticafx.base.SyntheticaFX; import syntheticafx.base.TitledBorderPane; import syntheticafx.base.XComboBox; public class XComboBoxDemo extends Application { public Parent createContent() { Pane centerPane = new FlowPane(4, 0); centerPane.setStyle("-fx-padding: 10"); XComboBox combo = new XComboBox<>(FXCollections.observableArrayList("John Doe", "John Meyer", "John Williams")); combo.setEditable(true); combo.setPromptText("Username"); //combo.setClearButtonPosition(HPos.LEFT); combo.addTrailingNode(createInnerButton("Find")); combo.setPrefWidth(250); centerPane.getChildren().add(combo); BorderPane content = new BorderPane(); content.setCenter(centerPane); content.setRight(createOptionPane(combo)); return content; } public Pane createOptionPane(XComboBox combo) { GridPane grid = new GridPane(); grid.setVgap(10); grid.setHgap(10); grid.setPadding(new Insets(5)); int row = 0; grid.add(new Label("Button-Text"), 0, row); TextField textField = new TextField("Submit"); grid.add(textField, 1, row); row++; CheckBox innermost = new CheckBox("Add Innermost"); grid.add(innermost, 1, row); row++; Button button = new Button("Add Leading Button"); button.setOnAction(e -> combo.addLeadingNode(createInnerButton(textField.getText()), innermost.isSelected())); grid.add(button, 1, row); row++; Button button2 = new Button("Add Trailing Button"); button2.setOnAction(e -> combo.addTrailingNode(createInnerButton(textField.getText()), innermost.isSelected())); grid.add(button2, 1, row); row++; Button button3 = new Button("Remove All Nodes"); button3.setOnAction(e -> combo.removeAllNodes()); grid.add(button3, 1, row); row++; grid.add(new Separator(), 1, row); row++; CheckBox cb = new CheckBox("Editable"); cb.setSelected(combo.isEditable()); cb.selectedProperty().addListener((o, ov, nv) -> combo.setEditable(nv)); grid.add(cb, 1, row); row++; CheckBox cb2 = new CheckBox("Clearable"); combo.clearableProperty().addListener((o, ov, nv) -> cb2.setSelected(nv)); cb2.selectedProperty().addListener((o, ov, nv) -> combo.setClearable(nv)); grid.add(cb2, 1, row); return new TitledBorderPane("Options", grid); } private Button createInnerButton(String text) { Button button = new Button(text); button.setStyle("-fx-border-image-source:null; -fx-padding: -2 3; -fx-background-color:#DEF; -fx-border-color:#ACF; -fx-background-radius: 8; -fx-border-radius: 8"); button.setFocusTraversable(false); return button; } @Override public void start(Stage primaryStage) throws Exception { SyntheticaFX.init("syntheticafx.theme.modena.SyntheticaFXModena"); //SyntheticaFX.init("syntheticafx.theme.standard.SyntheticaFXStandard"); primaryStage.setScene(new Scene(new RootPane(primaryStage, createContent()))); primaryStage.setTitle(getClass().getSimpleName()); primaryStage.show(); } public static void main(String[] args) { launch(args); } }