29 30 import com.sun.javafx.collections.ObservableListWrapper; 31 import java.lang.reflect.Constructor; 32 import java.lang.reflect.Method; 33 import java.time.LocalDate; 34 import java.time.Month; 35 import java.util.Arrays; 36 import java.util.EnumSet; 37 import java.util.Set; 38 import javafx.beans.property.SimpleObjectProperty; 39 import javafx.beans.property.SimpleStringProperty; 40 import javafx.beans.property.StringProperty; 41 import javafx.beans.value.ObservableValue; 42 import javafx.collections.FXCollections; 43 import javafx.collections.ObservableList; 44 import javafx.geometry.HPos; 45 import javafx.geometry.Rectangle2D; 46 import javafx.scene.Node; 47 import javafx.scene.control.Accordion; 48 import javafx.scene.control.Button; 49 import javafx.scene.control.ButtonBuilder; 50 import javafx.scene.control.CheckBox; 51 import javafx.scene.control.CheckBoxBuilder; 52 import javafx.scene.control.ChoiceBox; 53 import javafx.scene.control.ColorPicker; 54 import javafx.scene.control.ComboBox; 55 import javafx.scene.control.Control; 56 import javafx.scene.control.DatePicker; 57 import javafx.scene.control.Hyperlink; 58 import javafx.scene.control.HyperlinkBuilder; 59 import javafx.scene.control.Label; 60 import javafx.scene.control.LabelBuilder; 61 import javafx.scene.control.ListView; 62 import javafx.scene.control.Menu; 63 import javafx.scene.control.MenuBar; 64 import javafx.scene.control.MenuItem; 65 import javafx.scene.control.Pagination; 66 import javafx.scene.control.PasswordField; 67 import javafx.scene.control.PasswordFieldBuilder; 68 import javafx.scene.control.ProgressBar; 69 import javafx.scene.control.ProgressBarBuilder; 70 import javafx.scene.control.ProgressIndicator; 71 import javafx.scene.control.ProgressIndicatorBuilder; 72 import javafx.scene.control.RadioButton; 73 import javafx.scene.control.RadioButtonBuilder; 74 import javafx.scene.control.ScrollBar; 75 import javafx.scene.control.ScrollBarBuilder; 76 import javafx.scene.control.ScrollPane; 77 import javafx.scene.control.Separator; 78 import javafx.scene.control.SeparatorBuilder; 79 import javafx.scene.control.Slider; 80 import javafx.scene.control.SliderBuilder; 81 import javafx.scene.control.SplitMenuButton; 82 import javafx.scene.control.SplitMenuButtonBuilder; 83 import javafx.scene.control.SplitPane; 84 import javafx.scene.control.SplitPaneBuilder; 85 import javafx.scene.control.Tab; 86 import javafx.scene.control.TabPane; 87 import javafx.scene.control.TableColumn; 88 import javafx.scene.control.TableColumn.CellDataFeatures; 89 import javafx.scene.control.TableView; 90 import javafx.scene.control.TextArea; 91 import javafx.scene.control.TextAreaBuilder; 92 import javafx.scene.control.TextField; 93 import javafx.scene.control.TextFieldBuilder; 94 import javafx.scene.control.TitledPane; 95 import javafx.scene.control.ToggleButton; 96 import javafx.scene.control.ToggleButtonBuilder; 97 import javafx.scene.control.ToolBar; 98 import javafx.scene.control.TreeItem; 99 import javafx.scene.control.TreeTableColumn; 100 import javafx.scene.control.TreeTableView; 101 import javafx.scene.control.TreeView; 102 import javafx.scene.image.Image; 103 import javafx.scene.image.ImageView; 104 import javafx.scene.layout.HBox; 105 import javafx.scene.layout.StackPaneBuilder; 106 import javafx.scene.layout.VBox; 107 import javafx.scene.paint.Color; 108 import javafx.scene.shape.Circle; 109 import javafx.scene.shape.Rectangle; 110 import javafx.scene.text.TextAlignment; 111 import javafx.util.Callback; 112 113 public enum ControlsFactory implements NodeFactory { 114 115 Buttons(new ControlFactory() { 116 public Control createControl() { 117 return ButtonBuilder.create().text("Button the first line" + "\nthe sec long line" + "\nthe third line").focusTraversable(false).graphic(new Rectangle(10, 10, Color.RED)).build(); 118 } 119 120 public Class getControlClass() { 121 return Button.class; 122 } 123 }), 124 ChoiceBoxes(new ControlFactory() { 125 public Control createControl() { 126 return new ChoiceBox() { 127 { 128 getItems().addAll(Arrays.asList("one", "two", "three")); 129 setFocusTraversable(false); 130 getSelectionModel().select(0); 131 } 132 }; 133 } 134 135 public Class getControlClass() { 136 return ChoiceBox.class; 137 } 166 ps.maxPageIndicatorCountProperty().set(3); 167 return ps; 168 } 169 170 public Class getControlClass() { 171 return Pagination.class; 172 } 173 }), 174 ColorPickers(new ControlFactory() { 175 public Control createControl() { 176 ColorPicker cp = new ColorPicker(); 177 return cp; 178 } 179 180 public Class getControlClass() { 181 return ColorPicker.class; 182 } 183 }), 184 CheckBoxes(new ControlFactory() { 185 public Control createControl() { 186 return CheckBoxBuilder.create().text("Check box the first line" + "\nthe sec long line" + "\nthe third line").graphic(new Rectangle(20, 20, Color.web("lightblue"))).focusTraversable(false).build(); 187 } 188 189 public Class getControlClass() { 190 return CheckBox.class; 191 } 192 }), 193 RadioButtons(new ControlFactory() { 194 public Control createControl() { 195 return RadioButtonBuilder.create().text("Radio the first line" + "\nthe sec long line" + "\nthe third line").graphic(new Rectangle(20, 20, Color.web("lightblue"))).focusTraversable(false).textAlignment(TextAlignment.RIGHT).build(); 196 } 197 198 public Class getControlClass() { 199 return RadioButton.class; 200 } 201 }), 202 TextFields(new ControlFactory() { 203 public Control createControl() { 204 return TextFieldBuilder.create().text("Text box the first line" + "\nthe sec long line" + "\nthe third line").focusTraversable(false).build(); 205 } 206 207 public Class getControlClass() { 208 return TextField.class; 209 } 210 }), 211 TextAreas(new ControlFactory() { 212 public Control createControl() { 213 return TextAreaBuilder.create().maxWidth(100).maxHeight(50).text("Text area the first line" + "\nthe sec long line" + "\nthe third line").focusTraversable(false).build(); 214 } 215 216 public Class getControlClass() { 217 return TextArea.class; 218 } 219 }), 220 PasswordFields(new ControlFactory() { 221 public Control createControl() { 222 return PasswordFieldBuilder.create().promptText("Password box the first line" + "\nthe sec long line" + "\nthe third line").focusTraversable(false).build(); 223 } 224 225 public Class getControlClass() { 226 return PasswordField.class; 227 } 228 }), 229 Sliders(new ControlFactory() { 230 public Control createControl() { 231 return SliderBuilder.create().min(0).max(100).value(20).focusTraversable(false).build(); 232 } 233 234 public Class getControlClass() { 235 return Slider.class; 236 } 237 }), 238 Labels(new ControlFactory() { 239 public Control createControl() { 240 return LabelBuilder.create().text("Label the first line" + "\nthe sec longlong line" + "\nthe third line").focusTraversable(false).graphic(new Rectangle(20, 20, Color.web("lightblue"))).build(); 241 } 242 243 public Class getControlClass() { 244 return Label.class; 245 } 246 }), 247 Hyperlinks(new ControlFactory() { 248 public Control createControl() { 249 return HyperlinkBuilder.create().text("Hyperlink the first line" + "\nthe sec long line" + "\nthe third line").focusTraversable(false).graphic(new Circle(10, Color.BLUE)).build(); 250 } 251 252 public Class getControlClass() { 253 return Hyperlink.class; 254 } 255 }), 256 ImageView(new ControlFactory() { 257 public Node createControl() { 258 return new ImageView(new Image(ControlsFactory.class.getResourceAsStream("big_tiger_e0.gif"))); 259 } 260 261 public Class getControlClass() { 262 return ImageView.class; 263 } 264 }), 265 MediaView(new ControlFactory() { 266 public Node createControl() { 267 // Lines are disabled due to impossibleness of stream using. 268 // String path = System.getProperty("user.dir"); 269 // while (path.indexOf("\\") != -1) { 282 Method setViewport = mediaViewCl.getDeclaredMethod("setViewport", Rectangle2D.class); 283 setViewport.invoke(node, new Rectangle2D(0, 0, 100, 100)); 284 node.setStyle("-fx-stroke: black;"); 285 } catch (Exception ignored) { 286 ignored.printStackTrace(); 287 } 288 return node; 289 } 290 291 public Class getControlClass() { 292 Class controlClass = null; 293 try { 294 controlClass = Class.forName("javafx.scene.media.MediaView"); 295 } catch (Exception ignored) { 296 } 297 return controlClass; 298 } 299 }), 300 Separators(new ControlFactory() { 301 public Control createControl() { 302 Separator sep = SeparatorBuilder.create().halignment(HPos.CENTER).build(); 303 sep.setPrefWidth(80); 304 return sep; 305 } 306 307 public Class getControlClass() { 308 return Separator.class; 309 } 310 }), 311 ScrollBars(new ControlFactory() { 312 public Control createControl() { 313 return ScrollBarBuilder.create().value(45).min(0).max(100).focusTraversable(false).build(); 314 } 315 316 public Class getControlClass() { 317 return ScrollBar.class; 318 } 319 }), 320 ScrollPanes(new ControlFactory() { 321 public Node createControl() { 322 ScrollPane pane = new ScrollPane(); 323 HBox hbox = new HBox(30); 324 VBox vbox1 = new VBox(10); 325 vbox1.getChildren().addAll(new Label("one"), new Button("two"), new CheckBox("three"), new RadioButton("four"), new Label("five")); 326 VBox vbox2 = new VBox(10); 327 vbox2.getChildren().addAll(new Label("one"), new Button("two"), new CheckBox("three"), new RadioButton("four"), new Label("five")); 328 hbox.getChildren().addAll(vbox1, vbox2); 329 pane.setContent(hbox); 330 pane.setFocusTraversable(false); 331 return pane; 332 } 333 334 public Class getControlClass() { 335 return ScrollPane.class; 336 } 337 }), 338 ProgressIndicators(new ControlFactory() { 339 public Node createControl() { 340 return ProgressIndicatorBuilder.create().progress(0.85).focusTraversable(false).build(); 341 } 342 343 public Class getControlClass() { 344 return ProgressIndicator.class; 345 } 346 }), 347 ProgressBars(new ControlFactory() { 348 public Node createControl() { 349 return ProgressBarBuilder.create().progress(0.25).focusTraversable(false).build(); 350 } 351 352 public Class getControlClass() { 353 return ProgressBar.class; 354 } 355 }), 356 ListViews(new ControlFactory() { 357 public Node createControl() { 358 ListView list = new ListView(); 359 ObservableListWrapper<String> items = new ObservableListWrapper<String>(Arrays.asList("One", "Two", "Three", "Four", "Five", "Six", "long line long line long line long line")); 360 list.setItems(items); 361 list.setPrefWidth(100); 362 list.setPrefHeight(100); 363 list.setFocusTraversable(false); 364 return list; 365 } 366 367 public Class getControlClass() { 368 return ListView.class; 369 } 370 }), 371 PressedToggleButtons(new ControlFactory() { 372 public Control createControl() { 373 return ToggleButtonBuilder.create().selected(true).text("Button the first line" + "\nthe sec long line" + "\nthe third line").focusTraversable(false).graphic(new Rectangle(10, 10, Color.RED)).build(); 374 } 375 376 public Class getControlClass() { 377 return ToggleButton.class; 378 } 379 }), 380 UnPressedToggleButtons(new ControlFactory() { 381 public Control createControl() { 382 return ToggleButtonBuilder.create().selected(false).text("Button the first line" + "\nthe sec long line" + "\nthe third line").focusTraversable(false).graphic(new Rectangle(10, 10, Color.RED)).build(); 383 } 384 385 public Class getControlClass() { 386 return ToggleButton.class; 387 } 388 }), 389 Toolbars(new ControlFactory() { 390 public Node createControl() { 391 ToolBar toolbar = new ToolBar(); 392 toolbar.getItems().addAll(new Button("One"), new Button("Two"), new Separator(), SplitMenuButtonBuilder.create().text("three").build()); 393 toolbar.setFocusTraversable(false); 394 return toolbar; 395 } 396 397 public Class getControlClass() { 398 return ToolBar.class; 399 } 400 }), 401 Menubars(new ControlFactory() { 402 public Node createControl() { 403 MenuBar menubar = new MenuBar(); 404 menubar.getMenus().addAll(new Menu("File")); 405 menubar.setFocusTraversable(false); 406 return menubar; 407 } 408 409 public Class getControlClass() { 410 return MenuBar.class; 411 } 412 }), 413 SplitMenuButtons(new ControlFactory() { 414 public Node createControl() { 415 SplitMenuButton smb = SplitMenuButtonBuilder.create() 416 .text("Split box the first line" + "\nthe sec long line" + "\nthe third line") 417 .items(new MenuItem("Split box the first line" + "\nthe sec long line" + "\nthe third line", 418 new Rectangle(10, 10, Color.BLUE))) 419 .graphic(new Rectangle(10, 10, Color.RED)) 420 .build(); 421 smb.setMinWidth(100); 422 smb.setFocusTraversable(false); 423 return smb; 424 } 425 426 public Class getControlClass() { 427 return SplitMenuButton.class; 428 } 429 }), 430 TabPanes(new ControlFactory() { 431 public Node createControl() { 432 TabPane pane = new TabPane(); 433 Tab tab = new Tab(); 434 tab.setText("tab 1"); 435 HBox content1 = new HBox(10); 436 content1.getChildren().addAll(new Button("Button"), new Label("Label"), new Rectangle(40, 40, Color.TOMATO)); 437 tab.setContent(content1); 438 Tab tab2 = new Tab(); 439 tab2.setText("tab 2"); 440 tab2.setContent(new Circle(40, Color.RED)); 474 @Override 475 public ObservableValue<Node> call(final CellDataFeatures<Person, Node> p) { 476 SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>(); 477 text.setValue(new Label(p.getValue().getFirstName())); 478 return text; 479 } 480 }); 481 TableColumn<Person, Node> column2 = new TableColumn<Person, Node>("Last Name"); 482 column2.setCellValueFactory(new Callback<CellDataFeatures<Person, Node>, ObservableValue<Node>>() { 483 @Override 484 public ObservableValue<Node> call(final CellDataFeatures<Person, Node> p) { 485 SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>(); 486 text.setValue(new Label(p.getValue().getLastName())); 487 return text; 488 } 489 }); 490 TableView table = new TableView(items); 491 table.getColumns().setAll(column1, column2); 492 table.setPrefHeight(100); 493 table.setPrefWidth(100); 494 table.setMinHeight(Control.USE_PREF_SIZE); 495 table.setFocusTraversable(false); 496 return table; 497 } 498 499 public Class getControlClass() { 500 return TableView.class; 501 } 502 }), 503 TreeTableViews(new ControlFactory() { 504 public Node createControl() { 505 ObservableList<TreeItem> items = FXCollections.observableArrayList(); 506 for (int i = 0; i < 10; i++) { 507 items.add(new TreeItem(new Person("name " + i, "surname " + i))); 508 } 509 TreeTableColumn<Person, Node> column1 = new TreeTableColumn<Person, Node>("First Name"); 510 column1.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Person, Node>, ObservableValue<Node>>() { 511 @Override 512 public ObservableValue<Node> call(final TreeTableColumn.CellDataFeatures<Person, Node> p) { 513 SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>(); 514 text.setValue(new Label(p.getValue().getValue().getFirstName())); 515 return text; 516 } 517 }); 518 TreeTableColumn<Person, Node> column2 = new TreeTableColumn<Person, Node>("Last Name"); 519 column2.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Person, Node>, ObservableValue<Node>>() { 520 @Override 521 public ObservableValue<Node> call(final TreeTableColumn.CellDataFeatures<Person, Node> p) { 522 SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>(); 523 text.setValue(new Label(p.getValue().getValue().getLastName())); 524 return text; 525 } 526 }); 527 TreeTableView treeTable = new TreeTableView(); 528 treeTable.setRoot(new TreeItem(new Person("root", "root"))); 529 treeTable.getRoot().getChildren().addAll(items); 530 treeTable.getRoot().setExpanded(true); 531 treeTable.getColumns().setAll(column1, column2); 532 treeTable.setPrefHeight(100); 533 treeTable.setPrefWidth(100); 534 treeTable.setMinHeight(Control.USE_PREF_SIZE); 535 treeTable.setFocusTraversable(false); 536 return treeTable; 537 } 538 539 public Class getControlClass() { 540 return TreeTableView.class; 541 } 542 }), 543 TreeViews(new ControlFactory() { 544 public Node createControl() { 545 TreeItem<String> root = new TreeItem<String>("ROOT", new Rectangle(20, 20, Color.CHOCOLATE)); 546 root.setExpanded(true); 547 TreeItem<String> firstBrunch = new TreeItem<String>("brunch 1"); 548 firstBrunch.setExpanded(true); 549 firstBrunch.getChildren().addAll(new TreeItem<String>("first item"), new TreeItem<String>("second item", new Rectangle(20, 20, Color.DARKGREY))); 550 root.getChildren().addAll(firstBrunch); 551 TreeItem<String> secondBrunch = new TreeItem<String>("brunch 2"); 552 secondBrunch.getChildren().addAll(new TreeItem<String>("first item"), new TreeItem<String>("second item", new Rectangle(20, 20, Color.DARKGREY))); 553 root.getChildren().addAll(secondBrunch); 554 TreeView tree = new TreeView(root); 567 pane1.setGraphic(new Label("title 1\nLong text long text")); 568 pane1.setContent(new Rectangle(100, 40, Color.SKYBLUE)); 569 TitledPane pane2 = new TitledPane(); 570 pane2.setGraphic(new Label("title 2\nLong text long text")); 571 pane2.setContent(new Rectangle(100, 40, Color.BLUEVIOLET)); 572 Accordion acc = new Accordion(); 573 acc.getPanes().addAll(pane1, pane2); 574 acc.setExpandedPane(pane2); 575 pane2.setAnimated(false); 576 acc.setFocusTraversable(false); 577 acc.setMinWidth(100); 578 return acc; 579 } 580 581 public Class getControlClass() { 582 return Accordion.class; 583 } 584 }), 585 SplitPanes(new ControlFactory() { 586 public Node createControl() { 587 SplitPane pane = SplitPaneBuilder.create().items( 588 StackPaneBuilder.create().children(new Rectangle(40, 40, Color.WHITESMOKE)).build(), 589 StackPaneBuilder.create().children(new Rectangle(40, 40, Color.BLUE)).build(), 590 StackPaneBuilder.create().children(new Rectangle(40, 40, Color.RED)).build()).prefWidth(150).prefHeight(150).build(); 591 pane.setMinWidth(100); 592 pane.setDividerPositions(0.33, 0.67); 593 pane.setFocusTraversable(false); 594 return pane; 595 } 596 597 public Class getControlClass() { 598 return SplitPane.class; 599 } 600 }), 601 DatePickers(new ControlFactory() { 602 public Node createControl() { 603 final DatePicker datePicker = new DatePicker(); 604 datePicker.setFocusTraversable(false); 605 datePicker.setValue(LocalDate.of(2042, Month.MAY, 9)); 606 return datePicker; 607 } 608 609 public Class getControlClass() { 610 return DatePicker.class; | 29 30 import com.sun.javafx.collections.ObservableListWrapper; 31 import java.lang.reflect.Constructor; 32 import java.lang.reflect.Method; 33 import java.time.LocalDate; 34 import java.time.Month; 35 import java.util.Arrays; 36 import java.util.EnumSet; 37 import java.util.Set; 38 import javafx.beans.property.SimpleObjectProperty; 39 import javafx.beans.property.SimpleStringProperty; 40 import javafx.beans.property.StringProperty; 41 import javafx.beans.value.ObservableValue; 42 import javafx.collections.FXCollections; 43 import javafx.collections.ObservableList; 44 import javafx.geometry.HPos; 45 import javafx.geometry.Rectangle2D; 46 import javafx.scene.Node; 47 import javafx.scene.control.Accordion; 48 import javafx.scene.control.Button; 49 import javafx.scene.control.CheckBox; 50 import javafx.scene.control.ChoiceBox; 51 import javafx.scene.control.ColorPicker; 52 import javafx.scene.control.ComboBox; 53 import javafx.scene.control.Control; 54 import javafx.scene.control.DatePicker; 55 import javafx.scene.control.Hyperlink; 56 import javafx.scene.control.Label; 57 import javafx.scene.control.ListView; 58 import javafx.scene.control.Menu; 59 import javafx.scene.control.MenuBar; 60 import javafx.scene.control.MenuItem; 61 import javafx.scene.control.Pagination; 62 import javafx.scene.control.PasswordField; 63 import javafx.scene.control.ProgressBar; 64 import javafx.scene.control.ProgressIndicator; 65 import javafx.scene.control.RadioButton; 66 import javafx.scene.control.ScrollBar; 67 import javafx.scene.control.ScrollPane; 68 import javafx.scene.control.Separator; 69 import javafx.scene.control.Slider; 70 import javafx.scene.control.SplitMenuButton; 71 import javafx.scene.control.SplitPane; 72 import javafx.scene.control.Tab; 73 import javafx.scene.control.TabPane; 74 import javafx.scene.control.TableColumn; 75 import javafx.scene.control.TableColumn.CellDataFeatures; 76 import javafx.scene.control.TableView; 77 import javafx.scene.control.TextArea; 78 import javafx.scene.control.TextField; 79 import javafx.scene.control.TitledPane; 80 import javafx.scene.control.ToggleButton; 81 import javafx.scene.control.ToolBar; 82 import javafx.scene.control.TreeItem; 83 import javafx.scene.control.TreeTableColumn; 84 import javafx.scene.control.TreeTableView; 85 import javafx.scene.control.TreeView; 86 import javafx.scene.image.Image; 87 import javafx.scene.image.ImageView; 88 import javafx.scene.layout.HBox; 89 import javafx.scene.layout.StackPane; 90 import javafx.scene.layout.VBox; 91 import javafx.scene.paint.Color; 92 import javafx.scene.shape.Circle; 93 import javafx.scene.shape.Rectangle; 94 import javafx.scene.text.TextAlignment; 95 import javafx.util.Callback; 96 97 public enum ControlsFactory implements NodeFactory { 98 99 Buttons(new ControlFactory() { 100 public Control createControl() { 101 Button b = new Button("Button the first line" + "\nthe sec long line" + "\nthe third line"); 102 b.setFocusTraversable(false); 103 b.setGraphic(new Rectangle(10, 10, Color.RED)); 104 return b; 105 } 106 107 public Class getControlClass() { 108 return Button.class; 109 } 110 }), 111 ChoiceBoxes(new ControlFactory() { 112 public Control createControl() { 113 return new ChoiceBox() { 114 { 115 getItems().addAll(Arrays.asList("one", "two", "three")); 116 setFocusTraversable(false); 117 getSelectionModel().select(0); 118 } 119 }; 120 } 121 122 public Class getControlClass() { 123 return ChoiceBox.class; 124 } 153 ps.maxPageIndicatorCountProperty().set(3); 154 return ps; 155 } 156 157 public Class getControlClass() { 158 return Pagination.class; 159 } 160 }), 161 ColorPickers(new ControlFactory() { 162 public Control createControl() { 163 ColorPicker cp = new ColorPicker(); 164 return cp; 165 } 166 167 public Class getControlClass() { 168 return ColorPicker.class; 169 } 170 }), 171 CheckBoxes(new ControlFactory() { 172 public Control createControl() { 173 CheckBox cb = new CheckBox("Check box the first line" + "\nthe sec long line" + "\nthe third line"); 174 cb.setFocusTraversable(false); 175 cb.setGraphic(new Rectangle(20, 20, Color.web("lightblue"))); 176 return cb; 177 } 178 179 public Class getControlClass() { 180 return CheckBox.class; 181 } 182 }), 183 RadioButtons(new ControlFactory() { 184 public Control createControl() { 185 RadioButton rb = new RadioButton("Radio the first line" + "\nthe sec long line" + "\nthe third line"); 186 rb.setFocusTraversable(false); 187 rb.setGraphic(new Rectangle(20, 20, Color.web("lightblue"))); 188 rb.setTextAlignment(TextAlignment.RIGHT); 189 return rb; 190 } 191 192 public Class getControlClass() { 193 return RadioButton.class; 194 } 195 }), 196 TextFields(new ControlFactory() { 197 public Control createControl() { 198 TextField tf = new TextField("Text box the first line" + "\nthe sec long line" + "\nthe third line"); 199 tf.setFocusTraversable(false); 200 return tf; 201 } 202 203 public Class getControlClass() { 204 return TextField.class; 205 } 206 }), 207 TextAreas(new ControlFactory() { 208 public Control createControl() { 209 TextArea ta = new TextArea("Text area the first line" + "\nthe sec long line" + "\nthe third line"); 210 ta.setFocusTraversable(false); 211 ta.setMaxSize(100, 50); 212 return ta; 213 } 214 215 public Class getControlClass() { 216 return TextArea.class; 217 } 218 }), 219 PasswordFields(new ControlFactory() { 220 public Control createControl() { 221 PasswordField pf = new PasswordField(); 222 pf.setPromptText("Password box the first line" + "\nthe sec long line" + "\nthe third line"); 223 pf.setFocusTraversable(false); 224 return pf; 225 } 226 227 public Class getControlClass() { 228 return PasswordField.class; 229 } 230 }), 231 Sliders(new ControlFactory() { 232 public Control createControl() { 233 Slider s = new Slider(); 234 s.setMin(0); 235 s.setMax(100); 236 s.setValue(20); 237 s.setFocusTraversable(false); 238 return s; 239 } 240 241 public Class getControlClass() { 242 return Slider.class; 243 } 244 }), 245 Labels(new ControlFactory() { 246 public Control createControl() { 247 Label l = new Label("Label the first line" + "\nthe sec longlong line" + "\nthe third line"); 248 l.setFocusTraversable(false); 249 l.setGraphic(new Rectangle(20, 20, Color.web("lightblue"))); 250 return l; 251 } 252 253 public Class getControlClass() { 254 return Label.class; 255 } 256 }), 257 Hyperlinks(new ControlFactory() { 258 public Control createControl() { 259 Hyperlink hl = new Hyperlink("Hyperlink the first line" + "\nthe sec long line" + "\nthe third line"); 260 hl.setFocusTraversable(false); 261 hl.setGraphic(new Circle(10, Color.BLUE)); 262 return hl; 263 } 264 265 public Class getControlClass() { 266 return Hyperlink.class; 267 } 268 }), 269 ImageView(new ControlFactory() { 270 public Node createControl() { 271 return new ImageView(new Image(ControlsFactory.class.getResourceAsStream("big_tiger_e0.gif"))); 272 } 273 274 public Class getControlClass() { 275 return ImageView.class; 276 } 277 }), 278 MediaView(new ControlFactory() { 279 public Node createControl() { 280 // Lines are disabled due to impossibleness of stream using. 281 // String path = System.getProperty("user.dir"); 282 // while (path.indexOf("\\") != -1) { 295 Method setViewport = mediaViewCl.getDeclaredMethod("setViewport", Rectangle2D.class); 296 setViewport.invoke(node, new Rectangle2D(0, 0, 100, 100)); 297 node.setStyle("-fx-stroke: black;"); 298 } catch (Exception ignored) { 299 ignored.printStackTrace(); 300 } 301 return node; 302 } 303 304 public Class getControlClass() { 305 Class controlClass = null; 306 try { 307 controlClass = Class.forName("javafx.scene.media.MediaView"); 308 } catch (Exception ignored) { 309 } 310 return controlClass; 311 } 312 }), 313 Separators(new ControlFactory() { 314 public Control createControl() { 315 Separator sep = new Separator(); 316 sep.setHalignment(HPos.CENTER); 317 sep.setPrefWidth(80); 318 return sep; 319 } 320 321 public Class getControlClass() { 322 return Separator.class; 323 } 324 }), 325 ScrollBars(new ControlFactory() { 326 public Control createControl() { 327 ScrollBar sb = new ScrollBar(); 328 sb.setValue(45); 329 sb.setMin(0); 330 sb.setMax(100); 331 sb.setFocusTraversable(false); 332 return sb; 333 } 334 335 public Class getControlClass() { 336 return ScrollBar.class; 337 } 338 }), 339 ScrollPanes(new ControlFactory() { 340 public Node createControl() { 341 ScrollPane pane = new ScrollPane(); 342 HBox hbox = new HBox(30); 343 VBox vbox1 = new VBox(10); 344 vbox1.getChildren().addAll(new Label("one"), new Button("two"), new CheckBox("three"), new RadioButton("four"), new Label("five")); 345 VBox vbox2 = new VBox(10); 346 vbox2.getChildren().addAll(new Label("one"), new Button("two"), new CheckBox("three"), new RadioButton("four"), new Label("five")); 347 hbox.getChildren().addAll(vbox1, vbox2); 348 pane.setContent(hbox); 349 pane.setFocusTraversable(false); 350 return pane; 351 } 352 353 public Class getControlClass() { 354 return ScrollPane.class; 355 } 356 }), 357 ProgressIndicators(new ControlFactory() { 358 public Node createControl() { 359 ProgressIndicator pi = new ProgressIndicator(0.85); 360 pi.setFocusTraversable(false); 361 return pi; 362 } 363 364 public Class getControlClass() { 365 return ProgressIndicator.class; 366 } 367 }), 368 ProgressBars(new ControlFactory() { 369 public Node createControl() { 370 ProgressBar pb = new ProgressBar(0.25); 371 pb.setFocusTraversable(false); 372 return pb; 373 } 374 375 public Class getControlClass() { 376 return ProgressBar.class; 377 } 378 }), 379 ListViews(new ControlFactory() { 380 public Node createControl() { 381 ListView list = new ListView(); 382 383 // The following requires --add-exports javafx.base/com.sun.javafx.collections=ALL-UNNAMED 384 ObservableListWrapper<String> items = new ObservableListWrapper<String>(Arrays.asList("One", "Two", "Three", "Four", "Five", "Six", "long line long line long line long line")); 385 list.setItems(items); 386 list.setPrefWidth(100); 387 list.setPrefHeight(100); 388 list.setFocusTraversable(false); 389 return list; 390 } 391 392 public Class getControlClass() { 393 return ListView.class; 394 } 395 }), 396 PressedToggleButtons(new ControlFactory() { 397 public Control createControl() { 398 ToggleButton tb = new ToggleButton("Button the first line" + "\nthe sec long line" + "\nthe third line"); 399 tb.setFocusTraversable(false); 400 tb.setGraphic(new Rectangle(10, 10, Color.RED)); 401 tb.setSelected(true); 402 return tb; 403 } 404 405 public Class getControlClass() { 406 return ToggleButton.class; 407 } 408 }), 409 UnPressedToggleButtons(new ControlFactory() { 410 public Control createControl() { 411 ToggleButton tb = new ToggleButton("Button the first line" + "\nthe sec long line" + "\nthe third line"); 412 tb.setFocusTraversable(false); 413 tb.setGraphic(new Rectangle(10, 10, Color.RED)); 414 tb.setSelected(false); 415 return tb; 416 } 417 418 public Class getControlClass() { 419 return ToggleButton.class; 420 } 421 }), 422 Toolbars(new ControlFactory() { 423 public Node createControl() { 424 ToolBar toolbar = new ToolBar(); 425 SplitMenuButton smb = new SplitMenuButton(); 426 smb.setText("three"); 427 toolbar.getItems().addAll(new Button("One"), new Button("Two"), new Separator(), smb); 428 toolbar.setFocusTraversable(false); 429 return toolbar; 430 } 431 432 public Class getControlClass() { 433 return ToolBar.class; 434 } 435 }), 436 Menubars(new ControlFactory() { 437 public Node createControl() { 438 MenuBar menubar = new MenuBar(); 439 menubar.getMenus().addAll(new Menu("File")); 440 menubar.setFocusTraversable(false); 441 return menubar; 442 } 443 444 public Class getControlClass() { 445 return MenuBar.class; 446 } 447 }), 448 SplitMenuButtons(new ControlFactory() { 449 public Node createControl() { 450 SplitMenuButton smb = new SplitMenuButton(new MenuItem("Split box the first line" + "\nthe sec long line" + "\nthe third line", 451 new Rectangle(10, 10, Color.BLUE))); 452 smb.setText("Split box the first line" + "\nthe sec long line" + "\nthe third line"); 453 smb.setGraphic(new Rectangle(10, 10, Color.RED)); 454 smb.setMinWidth(100); 455 smb.setFocusTraversable(false); 456 return smb; 457 } 458 459 public Class getControlClass() { 460 return SplitMenuButton.class; 461 } 462 }), 463 TabPanes(new ControlFactory() { 464 public Node createControl() { 465 TabPane pane = new TabPane(); 466 Tab tab = new Tab(); 467 tab.setText("tab 1"); 468 HBox content1 = new HBox(10); 469 content1.getChildren().addAll(new Button("Button"), new Label("Label"), new Rectangle(40, 40, Color.TOMATO)); 470 tab.setContent(content1); 471 Tab tab2 = new Tab(); 472 tab2.setText("tab 2"); 473 tab2.setContent(new Circle(40, Color.RED)); 507 @Override 508 public ObservableValue<Node> call(final CellDataFeatures<Person, Node> p) { 509 SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>(); 510 text.setValue(new Label(p.getValue().getFirstName())); 511 return text; 512 } 513 }); 514 TableColumn<Person, Node> column2 = new TableColumn<Person, Node>("Last Name"); 515 column2.setCellValueFactory(new Callback<CellDataFeatures<Person, Node>, ObservableValue<Node>>() { 516 @Override 517 public ObservableValue<Node> call(final CellDataFeatures<Person, Node> p) { 518 SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>(); 519 text.setValue(new Label(p.getValue().getLastName())); 520 return text; 521 } 522 }); 523 TableView table = new TableView(items); 524 table.getColumns().setAll(column1, column2); 525 table.setPrefHeight(100); 526 table.setPrefWidth(100); 527 table.setFocusTraversable(false); 528 return table; 529 } 530 531 public Class getControlClass() { 532 return TableView.class; 533 } 534 }), 535 TreeTableViews(new ControlFactory() { 536 public Node createControl() { 537 ObservableList<TreeItem> items = FXCollections.observableArrayList(); 538 for (int i = 0; i < 10; i++) { 539 items.add(new TreeItem(new Person("name " + i, "surname " + i))); 540 } 541 TreeTableColumn<Person, Node> column1 = new TreeTableColumn<Person, Node>("First Name"); 542 column1.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Person, Node>, ObservableValue<Node>>() { 543 @Override 544 public ObservableValue<Node> call(final TreeTableColumn.CellDataFeatures<Person, Node> p) { 545 SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>(); 546 text.setValue(new Label(p.getValue().getValue().getFirstName())); 547 return text; 548 } 549 }); 550 TreeTableColumn<Person, Node> column2 = new TreeTableColumn<Person, Node>("Last Name"); 551 column2.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Person, Node>, ObservableValue<Node>>() { 552 @Override 553 public ObservableValue<Node> call(final TreeTableColumn.CellDataFeatures<Person, Node> p) { 554 SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>(); 555 text.setValue(new Label(p.getValue().getValue().getLastName())); 556 return text; 557 } 558 }); 559 TreeTableView treeTable = new TreeTableView(); 560 treeTable.setRoot(new TreeItem(new Person("root", "root"))); 561 treeTable.getRoot().getChildren().addAll(items); 562 treeTable.getRoot().setExpanded(true); 563 treeTable.getColumns().setAll(column1, column2); 564 treeTable.setPrefHeight(100); 565 treeTable.setPrefWidth(100); 566 treeTable.setFocusTraversable(false); 567 return treeTable; 568 } 569 570 public Class getControlClass() { 571 return TreeTableView.class; 572 } 573 }), 574 TreeViews(new ControlFactory() { 575 public Node createControl() { 576 TreeItem<String> root = new TreeItem<String>("ROOT", new Rectangle(20, 20, Color.CHOCOLATE)); 577 root.setExpanded(true); 578 TreeItem<String> firstBrunch = new TreeItem<String>("brunch 1"); 579 firstBrunch.setExpanded(true); 580 firstBrunch.getChildren().addAll(new TreeItem<String>("first item"), new TreeItem<String>("second item", new Rectangle(20, 20, Color.DARKGREY))); 581 root.getChildren().addAll(firstBrunch); 582 TreeItem<String> secondBrunch = new TreeItem<String>("brunch 2"); 583 secondBrunch.getChildren().addAll(new TreeItem<String>("first item"), new TreeItem<String>("second item", new Rectangle(20, 20, Color.DARKGREY))); 584 root.getChildren().addAll(secondBrunch); 585 TreeView tree = new TreeView(root); 598 pane1.setGraphic(new Label("title 1\nLong text long text")); 599 pane1.setContent(new Rectangle(100, 40, Color.SKYBLUE)); 600 TitledPane pane2 = new TitledPane(); 601 pane2.setGraphic(new Label("title 2\nLong text long text")); 602 pane2.setContent(new Rectangle(100, 40, Color.BLUEVIOLET)); 603 Accordion acc = new Accordion(); 604 acc.getPanes().addAll(pane1, pane2); 605 acc.setExpandedPane(pane2); 606 pane2.setAnimated(false); 607 acc.setFocusTraversable(false); 608 acc.setMinWidth(100); 609 return acc; 610 } 611 612 public Class getControlClass() { 613 return Accordion.class; 614 } 615 }), 616 SplitPanes(new ControlFactory() { 617 public Node createControl() { 618 StackPane sp1 = new StackPane(new Rectangle(40, 40, Color.WHITESMOKE)); 619 StackPane sp2 = new StackPane(new Rectangle(40, 40, Color.BLUE)); 620 StackPane sp3 = new StackPane(new Rectangle(40, 40, Color.RED)); 621 SplitPane pane = new SplitPane(sp1, sp2, sp3); 622 pane.setPrefSize(150, 150); 623 pane.setMinWidth(100); 624 pane.setDividerPositions(0.33, 0.67); 625 pane.setFocusTraversable(false); 626 return pane; 627 } 628 629 public Class getControlClass() { 630 return SplitPane.class; 631 } 632 }), 633 DatePickers(new ControlFactory() { 634 public Node createControl() { 635 final DatePicker datePicker = new DatePicker(); 636 datePicker.setFocusTraversable(false); 637 datePicker.setValue(LocalDate.of(2042, Month.MAY, 9)); 638 return datePicker; 639 } 640 641 public Class getControlClass() { 642 return DatePicker.class; |