====== JavaFX ====== ===== Сведения =====
:!: Сведения **Stage** - окружающее окно, которое содержит в себе остальные элементы. Может быть несколько, но должно быть как минимум одно. Является основным контейнером и точкой входа\\ **Scene** - отображает содержание **stage**. **Stage** может содержать несколько scene, которые можно между собой переключать. Внутри реализуется графом объектов (**Scene Graph**), где каждый элемент является узлом (**node**)\\ **Node** - элемент управления, например кнопки, метки или даже макеты (**layout**), внутри которых может быть несколько вложенных компонентов. У каждого узла свой идентификатор, стиль и т.д.\\
===== Использование ===== Есть как минимум пару вариантов использования, которые несколько разнятся\\
:!: Интерфейс в fxml файлах Простая форма fxml\\ (myApp/src/main/resources/maket/rootWindow.fxml)
:!: Интерфейс в коде Элементы так же могут создаваться в коде, размещаться на форме и задаваться свойства\\ public void showBaseWindow(){ try{ (..) Button newButt = new Button("This dynamic button"); /*newButt.setOnAction(event -> { Alert message = new Alert(Alert.AlertType.INFORMATION); message.setContentText("this message from dynamic button "); message.show(); });*/ /*EventHandler rightClickHandler = event -> { if (MouseButton.SECONDARY.equals(event.getButton())) { button.setFont(new Font(button.getFont().getSize() + 1)); } };*/ //Create the EventHandler EventHandler hnd = new EventHandler() { @Override //handle method public void handle(ActionEvent ev) { Alert message = new Alert(Alert.AlertType.INFORMATION); message.setContentText("this message from dynamic button "); message.show(); } }; newButt.setOnAction(hnd); rootLayout.getChildren().add(newButt); (...) } catch (IOException e) { e.printStackTrace(); } }
===== Оформление ===== Хорошее разделение должно придерживаться пути:\\ * логика в java (модели/контроллеры) * элементы формы в FXML описании * а оформление в CSS В JavaFX не совсем тот самый общеизвестный CSS, имеет собственные свойства\\ Выбор компонентов либо селектором (название типа компонента, с точкой вначале, либо ИД с решеткой вначале) аналогично CSS\\
:!: Примеры .button { -fx-font-size: 15px; } .label { // Some properties } #my-component { ... } # или в java Label label = new Label("I am a simple label"); label.getStyleClass().addAll("my-label", "other-class"); # Label label = new Label("I am a simple label"); label.setId("foo"); Подключение ... # String stylesheet = getClass().getResource("/styles.css").toExternalForm(); scene.getStylesheets().add(stylesheet); # ... # HBox box = new HBox(); String stylesheet = getClass().getResource("/styles.css").toExternalForm(); box.getStylesheets().add(stylesheet);