Ez csak a régi Java 8-hoz van:
Rendelkezésre áll:
A linuxos verzió telepítése:
dpkg -i SceneBuilder-19.0.0.deb
Az /opt könyvtárba telepszik.
sudo mkdir /usr/share/desktop-directories/
Nélküle a következő hibát kapjuk:
xdg-desktop-menu: No writable system menu directory found.
Bővítmény telepítése:
A parancs panelon keresztül konfiguráljuk. Gépeljük be:
Scene
Válasszuk a következőt:
Configure Scene Builder path
Keressük meg az előugró párbeszédablakban a futtatható SceneBuilder szerkesztőt.
Például:
/opt/scenebuilder
Amit ki kell választani:
/opt/scenebuilder/bin
Készítsünk egy állományt, például:
mainScene.fxml
vagy:
app.fxml
Az állományon jobb egér gomb, majd:
A következő sor szükséges az fxml fájl használatához.
Parent root = FXMLLoader.load(getClass().getResource("mainScene.fxml"));
Ezek után a Scene() konstruktorában megadjuk:
Scene scene1 = new Scene(root, 300, 250);
A teljes start() függvény:
@Override public void start(Stage primaryStage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("mainScene.fxml")); Scene scene1 = new Scene(root, 300, 250); primaryStage.setScene(scene1); primaryStage.show(); }
A kivételeket eldobtuk. A getResource() az IOException kivételt vált ki.
Eseménykezeléshez meg kell adni:
Ha a MainController könyvtárban van, például egy controllers könyvtárban:
controllers.MainController
Vegyük észre a (.) pont karaktert, a (/) perjel vagy a (\) visszaperjel karakter helyett.
Eseménykezelő az App.java fájlon belül:
@FXML protected void onClickMehetGomb(ActionEvent event) { System.out.println("Működik"); }
Ha akcióknak van egy célkomponense azt szerepeltetni kell a SceneBuilder Code részén, a fx:id mezőben, egy tetszőleges névvel:
Ugyanennek a névnek szerepelnie kell az osztályban, ahol hivatkozni szeretnénk rá, egy FXML annotációval:
@FXML private Text celfelirat;
Együtt az eseménykezelővel:
@FXML private Label celfelirat; @FXML protected void onClickMehetGomb(ActionEvent event) { celfelirat.setText("Működik"); }
import javafx.application.Application; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.stage.Stage; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Label; public class App extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("app.fxml")); Scene scene1 = new Scene(root, 300, 250); primaryStage.setScene(scene1); primaryStage.show(); } @FXML private Label celfelirat; @FXML protected void onClickMehetGomb(ActionEvent event) { celfelirat.setText("Működik"); } }
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <VBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="App"> <children> <Label fx:id="celfelirat" text="Első Scene Builder" /> <Button mnemonicParsing="false" onAction="#onClickMehetGomb" text="Mehet" /> </children> </VBox>
Adott egy projekt, ahol a kontroller külön osztályban van. A következő fájl és könyvtárszerkezet van:
app01/ |-lib/ |-src/ | |-controllers/ | | `-MainController.java | |-models/ | | `-MainModel.java | |-views/ | | `-MainScene.fxml | `-App.java `-README.md
A kontroller a controllers/MainController.java fájlban van. A nézet a mainScene.fxml fájlban.
Mivel írni akarjuk a TextField mezőt, adnunk kell egy fx:id azonosítót:
Megmondjuk a kontroller osztály nevét:
package controllers; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.TextField; import models.MainModel; public class MainController { MainModel mainModel; @FXML private TextField textfield1; public MainController() { this.mainModel = new MainModel(); } @FXML protected void onClickMehetGomb(ActionEvent event) { System.out.println("Működik"); Integer num = this.mainModel.getNum(); textfield1.setText(num.toString()); } }
package models; public class MainModel { public int getNum() { return 15; } }
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.layout.*?> <?import java.lang.*?> <?import javafx.scene.control.*?> <VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.MainController"> <children> <Label text="Label" /> <TextField fx:id="textfield1" /> <Button mnemonicParsing="false" onAction="#onClickMehetGomb" text="Button" /> </children> </VBox>
import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class App extends Application { public static void main(String[] args) throws Exception { launch(args); } @Override public void start(Stage primaryStage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("views/MainScene.fxml")); Scene scene1 = new Scene(root, 300, 250); primaryStage.setScene(scene1); primaryStage.show(); } }