1 /* 2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package test.css.controls; 26 27 import com.sun.javafx.collections.ObservableListWrapper; 28 import javafx.scene.control.skin.CellSkinBase; 29 import javafx.scene.control.skin.ColorPickerSkin; 30 import javafx.scene.control.skin.PaginationSkin; 31 import javafx.scene.control.skin.ProgressIndicatorSkin; 32 import javafx.scene.control.skin.TableColumnHeader; 33 import javafx.scene.control.skin.TextInputControlSkin; 34 import javafx.scene.control.skin.TreeCellSkin; 35 import java.lang.reflect.Constructor; 36 import java.lang.reflect.Method; 37 import java.time.LocalDate; 38 import java.time.Month; 39 import java.time.format.DateTimeFormatter; 40 import java.time.format.DateTimeFormatterBuilder; 41 import java.util.*; 42 import javafx.application.ConditionalFeature; 43 import javafx.application.Platform; 44 import javafx.beans.property.SimpleObjectProperty; 45 import javafx.beans.value.ObservableValue; 46 import javafx.collections.FXCollections; 47 import javafx.collections.ObservableList; 48 import javafx.css.CssMetaData; 49 import javafx.css.Styleable; 50 import javafx.geometry.HPos; 51 import javafx.geometry.Pos; 52 import javafx.scene.Node; 53 import javafx.scene.chart.BarChart; 54 import javafx.scene.chart.CategoryAxis; 55 import javafx.scene.chart.LineChart; 56 import javafx.scene.chart.NumberAxis; 57 import javafx.scene.chart.PieChart; 58 import javafx.scene.chart.XYChart; 59 import javafx.scene.control.Accordion; 60 import javafx.scene.control.Button; 61 import javafx.scene.control.CheckBox; 62 import javafx.scene.control.ChoiceBox; 63 import javafx.scene.control.ColorPicker; 64 import javafx.scene.control.ComboBox; 65 import javafx.scene.control.Control; 66 import javafx.scene.control.DatePicker; 67 import javafx.scene.control.Hyperlink; 68 import javafx.scene.control.Label; 69 import javafx.scene.control.ListView; 70 import javafx.scene.control.Menu; 71 import javafx.scene.control.MenuBar; 72 import javafx.scene.control.MenuItem; 73 import javafx.scene.control.Pagination; 74 import javafx.scene.control.PasswordField; 75 import javafx.scene.control.ProgressBar; 76 import javafx.scene.control.ProgressIndicator; 77 import javafx.scene.control.RadioButton; 78 import javafx.scene.control.ScrollBar; 79 import javafx.scene.control.ScrollPane; 80 import javafx.scene.control.Separator; 81 import javafx.scene.control.Slider; 82 import javafx.scene.control.SplitMenuButton; 83 import javafx.scene.control.SplitPane; 84 import javafx.scene.control.Tab; 85 import javafx.scene.control.TabPane; 86 import javafx.scene.control.TableColumn; 87 import javafx.scene.control.TableColumn.CellDataFeatures; 88 import javafx.scene.control.TableView; 89 import javafx.scene.control.TextField; 90 import javafx.scene.control.TitledPane; 91 import javafx.scene.control.ToggleButton; 92 import javafx.scene.control.ToolBar; 93 import javafx.scene.control.TreeItem; 94 import javafx.scene.control.TreeView; 95 import javafx.scene.image.Image; 96 import javafx.scene.image.ImageView; 97 import javafx.scene.layout.FlowPane; 98 import javafx.scene.layout.HBox; 99 import javafx.scene.layout.StackPane; 100 import javafx.scene.layout.TilePane; 101 import javafx.scene.layout.VBox; 102 import javafx.scene.paint.Color; 103 import javafx.scene.shape.Circle; 104 import javafx.scene.shape.Rectangle; 105 import javafx.scene.text.Text; 106 import javafx.util.Callback; 107 import javafx.util.StringConverter; 108 109 /** 110 * 111 * @author sergey.lugovoy@oracle.com 112 */ 113 public enum ControlPage { 114 Accordions(Accordion.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 115 public Node createControl() { 116 TitledPane pane1 = new TitledPane(); 117 pane1.setText("title 1\nLong text long text"); 118 pane1.setContent(new Rectangle(100, 40, Color.SKYBLUE)); 119 pane1.setFocusTraversable(false); 120 TitledPane pane2 = new TitledPane(); 121 pane2.setText("title 2\nLong text long text"); 122 pane2.setContent(new Rectangle(100, 40, Color.BLUEVIOLET)); 123 Accordion acc = new Accordion(); 124 acc.getPanes().addAll(pane1, pane2); 125 acc.setExpandedPane(pane2); 126 pane2.setAnimated(false); 127 pane2.setFocusTraversable(false); 128 acc.setFocusTraversable(false); 129 return acc; 130 } 131 }, 200), Buttons(Button.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 132 public Control createControl() { 133 Button temp = new Button("Button the first line" + "\nthe sec long line" + "\nthe third line"); 134 temp.setFocusTraversable(false); 135 temp.setGraphic(new Rectangle(10, 10, Color.RED)); 136 return temp; 137 } 138 }, 200, 100), ChoiceBoxes(ChoiceBox.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 139 public Control createControl() { 140 return new ChoiceBox() { 141 { 142 getItems().addAll(Arrays.asList("one", "two", "three")); 143 this.getSelectionModel().select(0); 144 setFocusTraversable(false); 145 } 146 }; 147 } 148 }), CheckBoxes(CheckBox.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 149 public Control createControl() { 150 CheckBox temp = new CheckBox("Check box the first line" + "\nthe sec long line" + "\nthe third line"); 151 temp.setFocusTraversable(false); 152 temp.setGraphic(new Rectangle(20, 20, Color.web("lightblue"))); 153 return temp; 154 } 155 }, 200, 100), ComboBoxes(ComboBox.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 156 @Override 157 public Control createControl() { 158 return new ComboBox() { 159 { 160 getItems().addAll(Arrays.asList("one", "two", "three")); 161 getSelectionModel().select(0); 162 setFocusTraversable(false); 163 } 164 }; 165 } 166 }), Hyperlinks(Hyperlink.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 167 public Control createControl() { 168 Hyperlink temp = new Hyperlink("Hyperlink the first line" + "\nthe sec long line" + "\nthe third line"); 169 temp.setFocusTraversable(false); 170 temp.setGraphic(new Circle(10, Color.BLUE)); 171 return temp; 172 } 173 }, 200, 100), Labels(new ArrayList<CssMetaData<? extends Styleable, ?>>(Label.getClassCssMetaData()) { 174 { 175 addAll(Text.getClassCssMetaData()); 176 } 177 }, new ControlsCSSApp.ControlFactory() { 178 public Control createControl() { 179 Label temp = new Label("Label the first line" + "\nthe sec longlong line" + "\nthe third line"); 180 temp.setFocusTraversable(false); 181 temp.setGraphic(new Rectangle(20, 20, Color.web("lightblue"))); 182 return temp; 183 } 184 }, 200), ListViews(ListView.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 185 public Node createControl() { 186 ListView list = new ListView(); 187 ObservableListWrapper<String> items = new ObservableListWrapper<String>(Arrays.asList("One", "Two", "Three", "Four", "Five", "Six", "long line long line long line long line")); 188 list.setItems(items); 189 list.setPrefWidth(100); 190 list.setPrefHeight(100); 191 list.setFocusTraversable(false); 192 return list; 193 } 194 }, 150), PasswordFields(PasswordField.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 195 public Control createControl() { 196 PasswordField temp = new PasswordField(); 197 temp.setPromptText("Password box the first line" + "\nthe sec long line" + "\nthe third line"); 198 temp.setFocusTraversable(false); 199 return temp; 200 } 201 }), PressedToggleButtons(ToggleButton.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 202 public Control createControl() { 203 ToggleButton temp = new ToggleButton("Button the first line" + "\nthe sec long line" + "\nthe third line"); 204 temp.setSelected(true); 205 temp.setFocusTraversable(false); 206 temp.setGraphic(new Rectangle(10, 10, Color.RED)); 207 return temp; 208 } 209 }, 200, 120), ProgressIndicators(new ArrayList<CssMetaData<? extends Styleable, ?>>(ProgressIndicator.getClassCssMetaData()) { 210 { 211 addAll(ProgressIndicatorSkin.getClassCssMetaData()); 212 } 213 }, new ControlsCSSApp.ControlFactory() { 214 public Node createControl() { 215 ProgressIndicator temp = new ProgressIndicator(0.85); 216 temp.setPrefSize(100, 100); 217 temp.setFocusTraversable(false); 218 return temp; 219 } 220 }), ProgressBars(ProgressBar.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 221 public Node createControl() { 222 ProgressBar temp = new ProgressBar(0.25); 223 temp.setFocusTraversable(false); 224 return temp; 225 } 226 }, 200, 100), RadioButtons(RadioButton.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 227 public Control createControl() { 228 RadioButton temp = new RadioButton("Radio the first line" + "\nthe sec long line" + "\nthe third line"); 229 temp.setFocusTraversable(false); 230 temp.setGraphic(new Rectangle(20, 20, Color.web("lightblue"))); 231 return temp; 232 } 233 }, 200, 100), TextFields(new ArrayList<CssMetaData<? extends Styleable, ?>>(TextField.getClassCssMetaData()) { 234 { 235 addAll(TextInputControlSkin.getClassCssMetaData()); 236 } 237 }, new ControlsCSSApp.ControlFactory() { 238 public Control createControl() { 239 TextField temp = new TextField("Text box the first line" + "\nthe sec long line" + "\nthe third line"); 240 temp.setFocusTraversable(false); 241 return temp; 242 } 243 }), Sliders(Slider.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 244 public Control createControl() { 245 Slider temp = new Slider(); 246 temp.setMin(0); 247 temp.setMax(100); 248 temp.setValue(20); 249 temp.setFocusTraversable(false); 250 return temp; 251 } 252 }, 200), Separators(Separator.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 253 public Control createControl() { 254 Separator sep = new Separator(); 255 sep.setHalignment(HPos.CENTER); 256 sep.setPrefWidth(80); 257 return sep; 258 } 259 }, 150), ScrollBars(ScrollBar.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 260 public Control createControl() { 261 ScrollBar temp = new ScrollBar(); 262 temp.setValue(45); 263 temp.setMin(0); 264 temp.setMax(100); 265 temp.setFocusTraversable(false); 266 return temp; 267 } 268 }, 150), ScrollPanes(ScrollPane.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 269 public Node createControl() { 270 ScrollPane pane = new ScrollPane(); 271 HBox hbox = new HBox(30); 272 VBox vbox1 = new VBox(10); 273 vbox1.getChildren().addAll(new Label("one"), new Button("two"), new CheckBox("three"), new RadioButton("four"), new Label("five")); 274 VBox vbox2 = new VBox(10); 275 vbox2.getChildren().addAll(new Label("one"), new Button("two"), new CheckBox("three"), new RadioButton("four"), new Label("five")); 276 hbox.getChildren().addAll(vbox1, vbox2); 277 pane.setContent(hbox); 278 pane.setFocusTraversable(false); 279 return pane; 280 } 281 }, 150), UnPressedToggleButtons(ToggleButton.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 282 public Control createControl() { 283 ToggleButton temp = new ToggleButton("Button the first line" + "\nthe sec long line" + "\nthe third line"); 284 temp.setGraphic(new Rectangle(10, 10, Color.RED)); 285 temp.setSelected(false); 286 temp.setFocusTraversable(false); 287 return temp; 288 } 289 }, 200, 120), Toolbars(ToolBar.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 290 public Node createControl() { 291 ToolBar toolbar = new ToolBar(); 292 SplitMenuButton temp = new SplitMenuButton(); 293 temp.setText("three"); 294 toolbar.getItems().addAll(new Button("One"), new Button("Two"), new Separator(), temp); 295 toolbar.setFocusTraversable(false); 296 return toolbar; 297 } 298 }, 250, 150), Menubars(MenuBar.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 299 public Node createControl() { 300 MenuBar menubar = new MenuBar(); 301 Menu firstMenu = new Menu("File"); 302 MenuItem firstMenuFirstItem = new MenuItem("Save"); 303 MenuItem firstMenuSecondItem = new MenuItem("Open"); 304 MenuItem firstMenuThirdItem = new MenuItem("Exit"); 305 firstMenu.getItems().addAll(firstMenuFirstItem, firstMenuSecondItem, firstMenuThirdItem); 306 Menu secondMenu = new Menu("Edit"); 307 MenuItem secondMenuFirstItem = new MenuItem("Undo"); 308 MenuItem secondMenuSecondItem = new MenuItem("Cut"); 309 MenuItem secondMenuThirdItem = new MenuItem("Copy"); 310 secondMenu.getItems().addAll(secondMenuFirstItem, secondMenuSecondItem, secondMenuThirdItem); 311 Menu thirdMenu = new Menu("Help"); 312 MenuItem thirdMenuFirstItem = new MenuItem("Help Contents"); 313 MenuItem thirdMenuSecondItem = new MenuItem("About"); 314 thirdMenu.getItems().addAll(thirdMenuFirstItem, thirdMenuSecondItem); 315 menubar.getMenus().addAll(firstMenu, secondMenu, thirdMenu); 316 menubar.setFocusTraversable(false); 317 return menubar; 318 } 319 }, 250, 150), SplitMenuButtons(SplitMenuButton.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 320 public Node createControl() { 321 SplitMenuButton smb = new SplitMenuButton(new MenuItem("Split box the first line" + "\nthe sec long line" + "\nthe third line", new Rectangle(10, 10, Color.BLUE))); 322 smb.setText("Split box the first line" + "\nthe sec long line" + "\nthe third line"); 323 smb.setGraphic(new Rectangle(10, 10, Color.RED)); 324 smb.setFocusTraversable(false); 325 return smb; 326 } 327 }, 200, 120), TabPanes(TabPane.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 328 public Node createControl() { 329 TabPane pane = new TabPane(); 330 Tab tab = new Tab(); 331 tab.setText("tab 1"); 332 HBox content1 = new HBox(10); 333 content1.getChildren().addAll(new Button("Button"), new Label("Label"), new Rectangle(40, 40, Color.TOMATO)); 334 tab.setContent(content1); 335 Tab tab2 = new Tab(); 336 tab2.setText("tab 2"); 337 tab2.setContent(new Circle(40, Color.RED)); 338 pane.getTabs().addAll(tab, tab2); 339 pane.setFocusTraversable(false); 340 return pane; 341 } 342 }, 200), TitledPanes(TitledPane.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 343 public Node createControl() { 344 TitledPane tpane = new TitledPane(); 345 tpane.setText("Title"); 346 VBox content = new VBox(5); 347 content.getChildren().addAll(new Label("Label"), new Button("Button"), new CheckBox("Check box")); 348 tpane.setContent(content); 349 tpane.setAnimated(false); 350 tpane.setFocusTraversable(false); 351 return tpane; 352 } 353 }, 150), TableViews(new ArrayList<CssMetaData<? extends Styleable, ?>>(TableView.getClassCssMetaData()) { 354 { 355 addAll(CellSkinBase.getClassCssMetaData()); 356 addAll(TableColumnHeader.getClassCssMetaData()); 357 } 358 }, new ControlsCSSApp.ControlFactory() { 359 public Node createControl() { 360 ObservableList<ControlsCSSApp.Person> items = FXCollections.observableArrayList(); 361 for (int i = 0; i < 10; i++) { 362 items.add(new ControlsCSSApp.Person("name " + i, "surname " + i)); 363 } 364 TableColumn<ControlsCSSApp.Person, Node> column1 = new TableColumn<ControlsCSSApp.Person, Node>("First Name"); 365 column1.setCellValueFactory(new Callback<CellDataFeatures<ControlsCSSApp.Person, Node>, ObservableValue<Node>>() { 366 @Override 367 public ObservableValue<Node> call(final CellDataFeatures<ControlsCSSApp.Person, Node> p) { 368 SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>(); 369 text.setValue(new Label(p.getValue().getFirstName())); 370 return text; 371 } 372 }); 373 TableColumn<ControlsCSSApp.Person, Node> column2 = new TableColumn<ControlsCSSApp.Person, Node>("Last Name"); 374 column2.setCellValueFactory(new Callback<CellDataFeatures<ControlsCSSApp.Person, Node>, ObservableValue<Node>>() { 375 @Override 376 public ObservableValue<Node> call(final CellDataFeatures<ControlsCSSApp.Person, Node> p) { 377 SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>(); 378 text.setValue(new Label(p.getValue().getLastName())); 379 return text; 380 } 381 }); 382 TableView<ControlsCSSApp.Person> table = new TableView<ControlsCSSApp.Person>(items); 383 table.getColumns().setAll(column1, column2); 384 table.setPrefHeight(200); 385 table.setFocusTraversable(false); 386 return table; 387 } 388 }, 200, 250), TreeViews(new ArrayList<CssMetaData<? extends Styleable, ?>>(TableView.getClassCssMetaData()) { 389 { 390 addAll(TreeCellSkin.getClassCssMetaData()); 391 } 392 }, new ControlsCSSApp.ControlFactory() { 393 public Node createControl() { 394 TreeItem<String> root = new TreeItem<String>("ROOT", new Rectangle(20, 20, Color.CHOCOLATE)); 395 root.setExpanded(true); 396 TreeItem<String> firstBrunch = new TreeItem<String>("brunch 1"); 397 firstBrunch.setExpanded(true); 398 firstBrunch.getChildren().addAll(new TreeItem<String>("first item"), new TreeItem<String>("second item", new Rectangle(20, 20, Color.DARKGREY))); 399 root.getChildren().addAll(firstBrunch); 400 TreeItem<String> secondBrunch = new TreeItem<String>("brunch 2"); 401 secondBrunch.getChildren().addAll(new TreeItem<String>("first item"), new TreeItem<String>("second item", new Rectangle(20, 20, Color.DARKGREY))); 402 root.getChildren().addAll(secondBrunch); 403 TreeView tree = new TreeView(root); 404 tree.setFocusTraversable(false); 405 tree.setMinSize(147, 127); 406 tree.setPrefSize(160, 140); 407 return tree; 408 } 409 }, 200, 300), SplitPanes(SplitPane.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 410 public Node createControl() { 411 StackPane sp1 = new StackPane(new Rectangle(40, 40, Color.WHITESMOKE)); 412 StackPane sp2 = new StackPane(new Rectangle(40, 40, Color.BLUE)); 413 StackPane sp3 = new StackPane(new Rectangle(40, 40, Color.RED)); 414 SplitPane pane = new SplitPane(sp1, sp2, sp3); 415 pane.setPrefSize(150, 150); 416 pane.setDividerPositions(0.33, 0.67); 417 pane.setFocusTraversable(false); 418 return pane; 419 } 420 }, 250), Paginations(new ArrayList<CssMetaData<? extends Styleable, ?>>(Pagination.getClassCssMetaData()) { 421 { 422 addAll(PaginationSkin.getClassCssMetaData()); 423 } 424 }, new ControlsCSSApp.ControlFactory() { 425 public Node createControl() { 426 Pagination node = new Pagination(47); 427 node.setMaxPageIndicatorCount(5); 428 node.getStyleClass().add(Pagination.STYLE_CLASS_BULLET); 429 return node; 430 } 431 }, 350, 150), XYChars(new ArrayList<CssMetaData<? extends Styleable, ?>>(LineChart.getClassCssMetaData()) { 432 { 433 addAll(NumberAxis.getClassCssMetaData()); 434 } 435 }, new ControlsCSSApp.ControlFactory() { 436 public Node createControl() { 437 XYChart node = new LineChart(new NumberAxis(0, 4, 1), new NumberAxis(0, 4, 1)); 438 node.setPrefSize(200, 200); 439 XYChart.Series series = new XYChart.Series(); 440 series.getData().add(new XYChart.Data(0d, 0d)); 441 series.getData().add(new XYChart.Data(4d, 4d)); 442 XYChart.Series series2 = new XYChart.Series(); 443 series2.getData().add(new XYChart.Data(0d, 0d)); 444 series2.getData().add(new XYChart.Data(1d, 3d)); 445 XYChart.Series series3 = new XYChart.Series(); 446 series3.getData().add(new XYChart.Data(0d, 0d)); 447 series3.getData().add(new XYChart.Data(2d, 4d)); 448 node.getData().addAll(series, series2, series3); 449 return node; 450 } 451 }, 300, 300), TilePanes(TilePane.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 452 public Node createControl() { 453 TilePane tile = new TilePane(); 454 tile.setPrefSize(150, 150); 455 tile.setTileAlignment(Pos.CENTER_LEFT); 456 for (int i = 0; i < 15; i++) { 457 tile.getChildren().add(new Rectangle(20, 20, (i % 2 == 0) ? Color.RED : Color.BLUE)); 458 } 459 return tile; 460 } 461 }, 200, 200), VBoxs(VBox.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 462 @Override 463 public Node createControl() { 464 VBox node = new VBox(10); 465 node.setMinSize(150, 150); 466 for (int i = 0; i < 4; i++) { 467 node.getChildren().add(new Rectangle(20, 20, (i % 2 == 0) ? Color.RED : Color.BLUE)); 468 } 469 return node; 470 } 471 }, 200, 200), BarCharts(new ArrayList<CssMetaData<? extends Styleable, ?>>(BarChart.getClassCssMetaData()) { 472 { 473 addAll(CategoryAxis.getClassCssMetaData()); 474 } 475 }, new ControlsCSSApp.ControlFactory() { 476 public Node createControl() { 477 CategoryAxis cAxis = new CategoryAxis(); 478 NumberAxis nAxis = new NumberAxis(0, 5, 1); 479 BarChart node = new BarChart(cAxis, nAxis); 480 XYChart.Series series = new XYChart.Series(); 481 series.getData().add(new XYChart.Data("1", 2)); 482 XYChart.Series series1 = new XYChart.Series(); 483 series1.getData().add(new XYChart.Data("2", 3)); 484 XYChart.Series series2 = new XYChart.Series(); 485 series2.getData().add(new XYChart.Data("2", 5)); 486 node.getData().addAll(series, series1, series2); 487 node.setMaxSize(180, 180); 488 return node; 489 } 490 }, 200, 200), ColorPickers(ColorPickerSkin.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 491 public Node createControl() { 492 ColorPicker node = new ColorPicker(); 493 node.setPrefSize(100, 100); 494 node.setStyle("-fx-color-label-visible:false;"); 495 return node; 496 } 497 }, 200, 200), FlowPanes(FlowPane.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 498 public Node createControl() { 499 FlowPane node = new FlowPane(); 500 for (int i = 0; i < 6; i++) { 501 node.getChildren().add(new Rectangle(20, 20, (i % 2 == 0) ? Color.RED : Color.BLUE)); 502 } 503 node.setColumnHalignment(HPos.CENTER); 504 node.setPrefSize(100, 100); 505 return node; 506 } 507 }, 200, 200), PieCharts(PieChart.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 508 public Node createControl() { 509 ObservableList<PieChart.Data> pieChartData = FXCollections.observableArrayList(new PieChart.Data("", 13), new PieChart.Data("", 25), new PieChart.Data("", 10), new PieChart.Data("", 22), new PieChart.Data("", 30)); 510 PieChart chart = new PieChart(pieChartData); 511 chart.setMaxSize(150, 150); 512 return chart; 513 } 514 }, 300, 300), WebViews(getWebViewClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 515 public Node createControl() { 516 Node node = null; 517 try { 518 Class<?> webViewCl = Class.forName("javafx.scene.web.WebView"); 519 Constructor<?> constructor = webViewCl.getConstructor(); 520 constructor.setAccessible(true); 521 Object args = null; 522 node = (Node) constructor.newInstance(); 523 Method setViewport = webViewCl.getDeclaredMethod("setPrefSize", double.class, double.class); 524 setViewport.invoke(node, 150, 150); 525 Method getEngine = webViewCl.getDeclaredMethod("getEngine"); 526 Object engine = getEngine.invoke(node); 527 Method load = engine.getClass().getDeclaredMethod("load", String.class); 528 load.invoke(engine, ControlsCSSApp.class.getResource("/test/css/resources/index.html").toExternalForm()); 529 } catch (Exception ignored) { 530 } 531 return node; 532 } 533 }, 300, 300), HBoxs(HBox.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 534 public Node createControl() { 535 HBox node = new HBox(10); 536 node.setMinSize(150, 150); 537 for (int i = 0; i < 4; i++) { 538 node.getChildren().add(new Rectangle(20, 20, (i % 2 == 0) ? Color.RED : Color.BLUE)); 539 } 540 return node; 541 } 542 }, 300, 300), ImageViews(ImageView.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 543 public Node createControl() { 544 ImageView view = new ImageView(new Image(ControlsCSSApp.class.getResource("/test/css/resources/placeholder.png").toExternalForm())); 545 return view; 546 } 547 }, 300, 300), DatePickers(DatePicker.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 548 public Node createControl() { 549 DatePicker picker = new DatePicker(); 550 picker.setValue(LocalDate.of(2042, Month.MAY, 27)); 551 picker.setConverter(new StringConverter<LocalDate>() { 552 553 DateTimeFormatter df = new DateTimeFormatterBuilder().parseLenient() 554 .appendPattern("M/dd/YYYY") 555 .toFormatter(Locale.ENGLISH) 556 .withLocale(Locale.ENGLISH); 557 558 @Override 559 public String toString(LocalDate localDate) { 560 return df.format(localDate); 561 } 562 563 @Override 564 public LocalDate fromString(String s) { 565 return LocalDate.parse(s, df); 566 } 567 }); 568 //picker.setMinSize(100, 30); 569 return picker; 570 } 571 }, 300, 300), 572 Texts(Text.getClassCssMetaData(), new ControlsCSSApp.ControlFactory() { 573 public Node createControl() { 574 Text node = new Text("1234567890"); 575 return node; 576 } 577 }, 150, 150); 578 public static final int DEFAULT_SLOTSIZE = 150; 579 public static final int INNER_PANE_SHIFT = 20; 580 public List<CssMetaData<? extends Styleable, ?>> keys; 581 public ControlsCSSApp.ControlFactory factory; 582 public int slotHeight; 583 public int slotWidth; 584 585 public static final String packageName = "functional"; 586 587 ControlPage(List<CssMetaData<? extends Styleable, ?>> keys, ControlsCSSApp.ControlFactory factory) { 588 this(keys, factory, DEFAULT_SLOTSIZE); 589 } 590 591 ControlPage(List<CssMetaData<? extends Styleable, ?>> keys, ControlsCSSApp.ControlFactory factory, int slotSize) { 592 this(keys, factory, slotSize, slotSize); 593 } 594 595 /** 596 * Returns filtered enumeration values, this is required to support embedded 597 * execution, cause currently JavaFX Embedded does not contain Web component 598 * @return filtered enumeration values 599 */ 600 public static ControlPage[] filteredValues(){ 601 Set<ControlPage> controls = EnumSet.allOf(ControlPage.class); 602 if(!Platform.isSupported(ConditionalFeature.WEB)) 603 controls.remove(ControlPage.WebViews); 604 return controls.toArray(new ControlPage[]{}); 605 } 606 607 private ControlPage(List<CssMetaData<? extends Styleable, ?>> keys, ControlsCSSApp.ControlFactory factory, int slotWidth, int slotHeight) { 608 this.keys = keys; 609 this.factory = factory; 610 this.slotHeight = slotHeight; 611 this.slotWidth = slotWidth; 612 } 613 614 private static List<CssMetaData<? extends Styleable, ?>> getWebViewClassCssMetaData() { 615 List<CssMetaData<? extends Styleable, ?>> arrayList = null; 616 try { 617 Class<?> webViewCl = Class.forName("javafx.scene.web.WebView"); 618 Method staticMethod = webViewCl.getDeclaredMethod("getClassCssMetaData"); 619 arrayList = (List<CssMetaData<? extends Styleable, ?>>) staticMethod.invoke(null); 620 } catch (Exception ex) { 621 arrayList = new ArrayList<CssMetaData<? extends Styleable,?>>(); 622 } 623 return arrayList; 624 } 625 }