JavaFX рдЕрдВрджрд░ рд╕реЗ рдмрд╛рд╣рд░

JavaOne 2011 рдореЗрдВ, JavaFX 2.0 рдХреА рдЕрдВрддрд┐рдо рд░рд┐рд▓реАрдЬ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рдереАред рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИред

рдЫрд╡рд┐



рдирдорд╕реНрдХрд╛рд░ JavaFX


рд╣рдо рдкрд╣рд▓реЗ JavaFX рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рдФрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЬрд╛рд╡рд╛рдПрдлрдПрдХреНрд╕ 2.0 рдПрд╕рдбреАрдХреЗ рдФрд░ рдирд╡реАрдирддрдо рдиреЗрдЯрдмреАрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдЖрдк рдиреЗрдЯрдиреЗрдЯ рдореЗрдВ JavaFX рдХреЛ http://netbeans.org/kb/docs/java/javafx-setup.html рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдиреЗрдЯрдмрд┐рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдореЗрдиреВ рд╕реЗ рдлрд╝рд╛рдЗрд▓ / рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рд╕рдВрд╡рд╛рдж рдореЗрдВ рдЬрд╛рд╡рд╛рдПрдлрдПрдХреНрд╕ рд╢реНрд░реЗрдгреА рдФрд░ рдЬрд╛рд╡рд╛рдПрдлрдПрдХреНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдореЗрдВ рд╣реИ (рдЖрдк рд╣реИрд▓реЛрдЬрд╡рд╛рдПрдлрдПрдХреНрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдпрд╛ рдХреБрдЫ рдФрд░ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ)ред рдлреЙрд░реНрдо рдХреНрд▓рд╛рд╕ рдХреЛрдб:
package hellojavafx; import javafx.application.*; import javafx.event.*; import javafx.scene.*; import javafx.scene.control.*; import javafx.stage.*; public class HelloJavaFX extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("Hello World"); Group root = new Group(); Scene scene = new Scene(root, 300, 250); Button btn = new Button(); btn.setLayoutX(100); btn.setLayoutY(80); btn.setText("Hello World"); btn.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent event) { System.out.println("Hello World"); } }); root.getChildren().add(btn); primaryStage.setScene(scene); primaryStage.show(); } } 

рдкрд░рд┐рдгрд╛рдо:

рдЫрд╡рд┐

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж рдбрд┐рд╕реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА:
- рд╡реЗрдм-рдлрд╛рдЗрд▓ рдлреЛрд▓реНрдбрд░ - рдЗрд╕рдореЗрдВ рдПрдкреНрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ
- HelloJavaFX.html - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд┐рд▓реНрдЯ-рдЗрди рдПрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдкреЗрдЬ
- HelloJavaFX.jar - рд╕рд╛рдорд╛рдиреНрдп рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди
- HelloJavaFX.jnlp - рд╡реЗрдмрд╕реНрдЯреЛрд░ рдХреЗ рдЬрд░рд┐рдП рд▓реЙрдиреНрдЪ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░

рд╣рдо рдЦреБрдж HelloJavaFX.jar рдПрдкреНрд▓реАрдХреЗрд╢рди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдВрдЧреНрд░рд╣рдХ рдХреЗ рд╕рд╛рде рдЦреЛрд▓реЗрдВ (.jar рдПрдХ рдирд┐рдпрдорд┐рдд .zip рд╕рдВрдЧреНрд░рд╣ рд╣реИ) рдФрд░ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдХреЛ рджреЗрдЦреЗрдВред рдореБрдЦреНрдп рд▓реЙрдиреНрдЪ рд▓рд╛рдЗрди:
Main-Class: com/javafx/main/Main
рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдиреЗрдЯрдмрд┐рди рдЬрд╛рд╡рд╛рдПрдлрдПрдХреНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреНрд▓рд╛рд╕ рдХреЙрдо.рдЬрд╛рд╡реИрдлрдПрдХреНрд╕.рдореЗрди.рдЗрди рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рдЬрд╛рд╡рд╛рдПрдлрдПрдХреНрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо JavaFX-Application-Class рдлрд╝реАрд▓реНрдб рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ hellojavafx.H.HwFLavaFX рд╣реИред

рд╕рд╛рдзрд╛рд░рдг рд╕реЗ рдмрд╛рд╣рд░ рдХреБрдЫ рднреА рдирд╣реАрдВред рдлрд┐рд▓рд╣рд╛рд▓, JavaFX рдХреЗрд╡рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЬрд┐рдирдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд╡рд╛ рдХреЛрдб рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрд╡рд┐рдВрдЧ рдореЗрдВ JavaFX


рдЖрдЗрдП рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рдЬрд╛рд╡рд╛рдПрдлрдПрдХреНрд╕ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрд╡рд┐рдВрдЧ рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред Netbeans рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ рдФрд░ JavaFX рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдлрд╝рд╛рдЗрд▓ C: \ Program Files \ Oracle \ JavaFX рд░рдирдЯрд╛рдЗрдо 2.0 \ lib \ jfxrt.jar рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ)ред

рд░рдирдЯрд╛рдЗрдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк JFXPanel рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА JavaFX рдШрдЯрдХреЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдЬреЛрдбрд╝реЗрдВ:
 package swingjavafx; import javax.swing.*; import java.awt.event.*; import javafx.embed.swing.*; import javafx.scene.*; import javafx.application.*; import javafx.scene.web.*; import javafx.scene.effect.*; public class SwingJavaFx extends JFrame { HTMLEditor edtr; public SwingJavaFx() { this.setSize(600, 400); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(null); JButton b1 = new JButton("Read"); b1.setSize(150, 22); b1.setLocation(10, 10); b1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, edtr.getHtmlText()); } }); this.add(b1); final JFXPanel jfx = new JFXPanel(); jfx.setSize(560, 300); jfx.setLocation(10, 40); this.add(jfx); Platform.runLater(new Runnable() { @Override public void run() { Group root = new Group(); Scene scene = new Scene(root, 400, 300); jfx.setScene(scene); javafx.scene.shape.Rectangle rctngl = new javafx.scene.shape.Rectangle(); rctngl.setTranslateX(20); rctngl.setTranslateY(30); rctngl.setWidth(500); rctngl.setHeight(250); rctngl.setEffect(new Shadow()); root.getChildren().add(rctngl); edtr = new HTMLEditor(); edtr.setHtmlText("Blablabla"); edtr.setTranslateX(20); edtr.setTranslateY(30); edtr.setPrefWidth(500); edtr.setPrefHeight(250); root.getChildren().add(edtr); } }); } public static void main(String[] args) { new SwingJavaFx(); } } 

рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдЫрд╡рд┐

рдЬреИрд╕рд╛ рдХрд┐ рд░реАрдб рдмрдЯрди рдХреЗ рдХреЛрдб рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рд╕рдордп рд╣рдо рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ JavaFX рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкрде-рдкрде рдкрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

java -cp %cp%;"C:\Program Files\Oracle\JavaFX Runtime 2.0\lib\jfxrt.jar";SwingJavaFx.jar swingjavafx.SwingJavaFx

рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реИ рдФрд░ рдЬрд╛рд╡рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред

JavaFX API


JavaFX рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкреЗрдЬ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдПрдкреАрдЖрдИ рдореЗрдВ рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡реНрд╕, рдЧреНрд░рд╛рдлреНрд╕, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдЬреАрдпреВрдЖрдИ рдШрдЯрдХреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдПрдХ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдШрдЯрдХ рдФрд░ рд╕реНрд╡рд░реВрдкрдг рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред

Http://www.oracle.com/technetwork/java/javafx/overview/index.html рдкреЗрдЬ рдкрд░ , рдЖрдк рдПрдирд╕реЗрдВрдмрд▓ рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдлреНрд▓реЗрдХреНрд╕ рдХрдВрдкреЛрдиреЗрдВрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИ)ред

рдЫрд╡рд┐

рдмрд╛рдЗрдВрдбрд┐рдВрдЧ


рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрдЯрди рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рд╡рд┐рдВрдбреЛ рдХреА рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рд╕реНрдиреИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЬрдм рдЖрдХрд╛рд░ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрд▓рдЧреНрди рдмрдЯрди рднреА рд╣рд┐рд▓ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 package bindingjavafx; import javafx.application.*; import javafx.event.*; import javafx.scene.*; import javafx.scene.control.*; import javafx.stage.*; import javafx.beans.binding.*; import javafx.beans.value.*; public class BindingJavaFX extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("Hello World"); Group root = new Group(); final Scene scene = new Scene(root, 300, 250); final Button btn = new Button(); btn.setLayoutX(100); btn.setLayoutY(80); btn.setText("Hello World"); btn.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent event) { System.out.println("Hello World"); } }); final DoubleBinding db = scene.widthProperty().subtract(150); db.addListener(new javafx.beans.value.ChangeListener< Number>() { public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) { btn.setLayoutX(db.getValue()); } }); root.getChildren().add(btn); primaryStage.setScene(scene); primaryStage.show(); } } 


рдкрд░рд┐рдгрд╛рдо:

рдЫрд╡рд┐

рдХреЛрдб рд▓рд╛рдЗрди
final DoubleBinding db = scene.widthProperty().subtract(150);
рдПрдХ db рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╡реИрд▓реНрдпреВ рдХреЛ рдорд╛рдЗрдирд╕ 150 рдкрд┐рдХреНрд╕рд▓реНрд╕ рдХреА рдЪреМрдбрд╝рд╛рдИ рддрдХ рдмрд╛рдВрдз рджреЗрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдо рд╕рд┐рд░реНрдл рдЗрд╕ рд╡реЗрд░рд┐рдПрдмрд▓ (рдЬреИрд╕реЗ btn.layoutX.bind (db) рдХреЗ рд▓рд┐рдП рдмрдЯрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдирд╣реАрдВ рдмрд╛рдБрдз рд╕рдХрддреЗ; рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛)ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрдирд╛рдП рдЧрдП рдЪрд░ рдореЗрдВ рдПрдХ рд╢реНрд░реЛрддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрдЯрди рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ:
 db.addListener(new javafx.beans.value.ChangeListener< Number>() { public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) { btn.setLayoutX(db.getValue()); } }); 


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрдВрдзрди рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИ - рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдмрд╛рдВрдзрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдПрдкреАрдЖрдИ рдХреЛрдб рдЕрдкрдиреЗ рдЖрдк рд╣реА рдУрд╡рд░рдмреНрд▓реЛрдЬ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SimpleDoubleProperty рд╡рд░реНрдЧ рдореЗрдВ рдЫрд╣ рд╡рд░реНрдЧреЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдкрджрд╛рдиреБрдХреНрд░рдо рд╣реИ рдФрд░ рдиреМ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рд░рд▓ рдХреА рдПрдХ рдирдИ рд╕рдордЭ рд╣реИред

рдирддреАрдЬрддрди, рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рдЖрдХрд░реНрд╖рдХ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдХреЛрдб рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡рд┐рдВрдЧ рд╕рд╣рд┐рдд рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред

рд╕реАрдПрд╕рдПрд╕ рдЙрдкрдпреЛрдЧ


рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╕реНрд╡рд░реВрдк CSS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдмрдирд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 .cssbutton { -fx-font: 16px "Serif"; -fx-padding: 10; -fx-background-color: #CCFF99; -fx-effect: dropshadow( one-pass-box , black , 12 , 0.0 , 1 , 1 ); } 

- cssbutton рд╢реИрд▓реА рдлрд╝реЙрдиреНрдЯ, рдкреИрдбрд┐рдВрдЧ, рднрд░рдг рдФрд░ рдЫрд╛рдпрд╛ рдкреНрд░рднрд╛рд╡ рд╕реЗрдЯ рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдХреЛ рджреГрд╢реНрдп рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

scene.getStylesheets().add("cssjavafx/style.css");

рдФрд░ рдирд╛рдо рд╕реЗ рдШрдЯрдХ рдореЗрдВ рдПрдХ рд╢реИрд▓реА рдЬреЛрдбрд╝реЗрдВ:

btn.getStyleClass().add("cssbutton");

рдмрдЯрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

рдЫрд╡рд┐

CSS рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдЧреБрдгреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬрд╝ рдХреЛрдб рдореЗрдВ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ, CSS рдореЗрдВ рдЖрдк рдЪрд░ рдпрд╛ рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЖрдк рдирдИ рдкреНрд░реЙрдкрд░реНрдЯреА рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ, рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

FXML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдкреНрд░рдкрддреНрд░реЛрдВ рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдПрдХ рдЕрд▓рдЧ рдПрдлрдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Netbeans рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП JavaFX FXML рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реИред рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реВрдк рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
 package fxmljavafx; import java.net.*; import java.util.*; import javafx.event.*; import javafx.fxml.*; import javafx.scene.control.*; public class Sample implements Initializable { @FXML private Label label; @FXML private void handleButtonAction(ActionEvent event) { System.out.println("You clicked me!"); label.setText("Hello World!"); } @Override public void initialize(URL url, ResourceBundle rb) { // } } 


@ FXML рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЙрдкрд▓рдмреНрдз рдЪрд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП @FXML рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдЦреБрдж рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

 <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml" fx:controller="fxmljavafx.Sample"> <children> <Button id="button" layoutX="126" layoutY="90" text="Click Me!" onAction="#handleButtonAction" fx:id="button" /> <Label id="label" layoutX="126" layoutY="120" minHeight="16" minWidth="69" prefHeight="16" prefWidth="69" fx:id="label" /> </children> </AnchorPane> 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рд╣реИрдВрдбрд▓рдмрдЯрди рдПрдХреНрд╢рди рд╡рд┐рдзрд┐ рдФрд░ рдХреЛрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓реЗрдмрд▓ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлреЙрд░реНрдо рдХреЗ рдПрдлрдПрдХреНрд╕рдПрдордПрд▓ рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдПрдХ FXML рдлреЙрд░реНрдо рд▓реЛрдб рдХрд░рдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
 Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml")); stage.setScene(new Scene(root)); stage.show(); 


GUI рдмрдирд╛рдиреЗ рд╕реЗ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХреЛрдИ рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд╕рдВрдкрд╛рджрди рдХрд░рдирд╛ рдЬрд╛рд╡рд╛ рдХреЛрдб рдФрд░ рдПрдлрдПрдХреНрд╕рдПрдордПрд▓ рд╡рд┐рд╡рд░рдг рджреЛрдиреЛрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдорд╣рдВрдЧрд╛ рд╣реИред

рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ


рд╡реАрдмреА рдФрд░ рд╕реА # рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ рдлреЙрд░реНрдореЗрдЯрд░ рд╣реИ, рдПрдбреЛрдм рдлреНрд▓реЗрдХреНрд╕ рдореЗрдВ, рдУрд░реЗрдХрд▓ рдЬреЗрдмреБрд╕реНрдЯ рдореЗрдВ рд╕реНрд╡рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдВрдкрд╛рджрдХ рд╣реИред рдЬрд╛рд╡рд╛рдПрдлрдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ рдХреА рдШреЛрд╖рдгрд╛ 2 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХреА рдЧрдИ рдереАред рдЖрдк рдЙрд╕рдХрд╛ рдПрдХ рд╡реАрдбрд┐рдпреЛ http://www.flickr.com/photos/douglasbullard/3609213630/in/photostream/ рдкрд░ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЬрдмрдХрд┐ рдХреЛрдИ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░рд┐рд▓реАрдЬ рдирд╣реАрдВ рдереА рдФрд░ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрдм рд╣реЛрдЧрд╛ред

рдПрдХ рдмреИрд░рд▓ рдЯрд╛рд░ рдореЗрдВ рдПрдХ рдЪрдореНрдордЪ рд╢рд╣рдж


рд╕рдордЧреНрд░ рд░реЗрдЯрд┐рдВрдЧ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЕрд╕рдВрддреЛрд╖рдЬрдирдХ рд╣реИред рдбреЗрдореЛ рдзреАрдореА рд╣реИрдВ, рдШрдЯрдХ рдореИрдХрд┐рдиреНрдЯреЛрд╢ рдПрдХреНрд╡рд╛, рдПрдбреЛрди рдлреНрд▓реЗрдХреНрд╕ рдпрд╛ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдореЗрдЯреНрд░реЛ рд╕реЗ рдиреАрдЪ рд╣реИрдВред JavaFX рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг 2008 рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдпрд╛, рд▓реЗрдХрд┐рди рд╕реВрд░реНрдп рдХрднреА рднреА рддрдХрдиреАрдХ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, JavaOX рдиреЗ рдЬрд╛рд╡рд╛рдПрдлрдПрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╡реАрдирддрдо рдмрд╛рдд рдХреАред рдЖрдЗрдП рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдУрд░реЗрдХрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд▓реЛрд╣реЗ рдХреЗ рд╣рд╛рде рд╕реЗ рдЯреНрд░реИрдХ рдкрд░ рд╡рд╛рдкрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрдЦрд┐рд░рдХрд╛рд░ рдПрдХ рдЖрд╢рд╛рдЬрдирдХ рдХрд╛рд░реНрдп рдЙрдкрдХрд░рдг рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред

Source: https://habr.com/ru/post/In130057/


All Articles