原文: http://zetcode.com/gui/javafx/firstprograms/

在本章中,我们将创建一些基本的 JavaFX 程序。

退出按钮

在下面的示例中,我们有一个Button控件。 当我们单击按钮时,应用终止。 按下并释放按钮时,将发送ActionEvent

QuitButtonEx.java

  1. package com.zetcode;
  2. import javafx.application.Application;
  3. import javafx.application.Platform;
  4. import javafx.event.ActionEvent;
  5. import javafx.geometry.Insets;
  6. import javafx.scene.Scene;
  7. import javafx.scene.control.Button;
  8. import javafx.scene.layout.HBox;
  9. import javafx.stage.Stage;
  10. /**
  11. * ZetCode JavaFX tutorial
  12. *
  13. * This program has a Quit button. Clicking
  14. * on the button terminates the application.
  15. *
  16. * Author: Jan Bodnar
  17. * Website: zetcode.com
  18. * Last modified: June 2015
  19. */
  20. public class QuitButtonEx extends Application {
  21. @Override
  22. public void start(Stage stage) {
  23. initUI(stage);
  24. }
  25. private void initUI(Stage stage) {
  26. Button btn = new Button();
  27. btn.setText("Quit");
  28. btn.setOnAction((ActionEvent event) -> {
  29. Platform.exit();
  30. });
  31. HBox root = new HBox();
  32. root.setPadding(new Insets(25));
  33. root.getChildren().add(btn);
  34. Scene scene = new Scene(root, 280, 200);
  35. stage.setTitle("Quit button");
  36. stage.setScene(scene);
  37. stage.show();
  38. }
  39. public static void main(String[] args) {
  40. launch(args);
  41. }
  42. }

Button控件位于窗口的左上角。 事件处理器将添加到按钮。

  1. Button btn = new Button();
  2. btn.setText("Quit");

实例化Button控件。 setText()方法设置按钮的标签。

  1. btn.setOnAction((ActionEvent event) -> {
  2. Platform.exit();
  3. });

setOnAction()方法设置按钮的动作,每当触发按钮时都会调用该动作。 上面的代码创建了一个匿名事件处理器。 Platform.exit()终止应用。

  1. HBox root = new HBox();
  2. root.setPadding(new Insets(25));

HBox是将其子级布置在单个水平行中的窗格。 setPadding()方法在窗格内容周围创建填充。 (默认填充为Insets.EMPTY。)这样,按钮和窗口边框的边缘之间会留有一些空间。

  1. root.getChildren().add(btn);

该按钮将添加到HBox窗格。

JavaFX 首个程序 - 图1

图:退出按钮

工具提示

任何节点都可以显示工具提示。 Tooltip是常见的 UI 元素,通常用于显示有关场景图中节点的其他信息。 当我们将鼠标指针悬停在节点上时,将显示该图标。

TooltipEx.java

  1. package com.zetcode;
  2. import javafx.application.Application;
  3. import javafx.geometry.Insets;
  4. import javafx.scene.Scene;
  5. import javafx.scene.control.Button;
  6. import javafx.scene.control.Tooltip;
  7. import javafx.scene.layout.HBox;
  8. import javafx.stage.Stage;
  9. /**
  10. * ZetCode JavaFX tutorial
  11. *
  12. * This program creates a tooltip for
  13. * a button control.
  14. *
  15. * Author: Jan Bodnar
  16. * Website: zetcode.com
  17. * Last modified: June 2015
  18. */
  19. public class TooltipEx extends Application {
  20. @Override
  21. public void start(Stage stage) {
  22. initUI(stage);
  23. }
  24. private void initUI(Stage stage) {
  25. HBox root = new HBox();
  26. root.setPadding(new Insets(20));
  27. Button btn = new Button("Button");
  28. Tooltip tooltip = new Tooltip("Button control");
  29. Tooltip.install(btn, tooltip);
  30. root.getChildren().add(btn);
  31. Scene scene = new Scene(root, 300, 250);
  32. stage.setTitle("Tooltip");
  33. stage.setScene(scene);
  34. stage.show();
  35. }
  36. public static void main(String[] args) {
  37. launch(args);
  38. }
  39. }

在示例中,我们将工具提示设置为按钮控件。

  1. Button btn = new Button("Button");

实例化Button控件。

  1. Tooltip tooltip = new Tooltip("Button control");
  2. Tooltip.install(btn, tooltip);

创建一个Tooltip并将其设置为通过Tooltipinstall()方法设置的按钮。

JavaFX 首个程序 - 图2

图:工具提示

助记符

助记符是激活支持助记符的控件的快捷键。 例如,它们可以与标签,按钮或菜单项一起使用。

助记符是通过在控件的标签上添加_字符来创建的。 它使下一个字符成为助记符。 字符与无鼠标修饰符(通常为 Alt )结合在一起。 选择的字符带有下划线,但是可以以平台特定的方式强调。 在某些平台上,仅在按下无鼠标修饰符后才对字符加下划线。

MnemonicEx.java

  1. package com.zetcode;
  2. import javafx.application.Application;
  3. import javafx.event.ActionEvent;
  4. import javafx.geometry.Insets;
  5. import javafx.scene.Scene;
  6. import javafx.scene.control.Button;
  7. import javafx.scene.layout.HBox;
  8. import javafx.stage.Stage;
  9. /**
  10. * ZetCode JavaFX tutorial
  11. *
  12. * This program creates a mnemonic for
  13. * a button control.
  14. *
  15. * Author: Jan Bodnar
  16. * Website: zetcode.com
  17. * Last modified: June 2015
  18. */
  19. public class MnemonicEx extends Application {
  20. @Override
  21. public void start(Stage stage) {
  22. initUI(stage);
  23. }
  24. private void initUI(Stage stage) {
  25. HBox root = new HBox();
  26. root.setPadding(new Insets(20));
  27. Button btn = new Button("_Button");
  28. btn.setOnAction((ActionEvent event) -> {
  29. System.out.println("Button fired");
  30. });
  31. root.getChildren().add(btn);
  32. Scene scene = new Scene(root, 300, 250);
  33. stage.setTitle("Mnemonic");
  34. stage.setScene(scene);
  35. stage.show();
  36. }
  37. public static void main(String[] args) {
  38. launch(args);
  39. }
  40. }

我们为按钮控件设置了一个助记符。 可以使用 Alt + B 键盘快捷键激活。

  1. Button btn = new Button("_Button");

在按钮的标签中,_字符位于B字符之前; 因此,B字符带有下划线,并包含在键盘快捷键中。

  1. btn.setOnAction((ActionEvent event) -> {
  2. System.out.println("Button fired");
  3. });

触发按钮后,它将消息发送到控制台。

目前,有三种激活按钮的方式:单击鼠标左键, Alt + B 快捷方式以及空格键 按钮具有焦点)。

设置控件样式

JavaFX 中的控件可以使用 CSS 设置样式。

text.css

  1. #root {-fx-background-color: linear-gradient(gray, darkgray); }
  2. #text {-fx-fill:linear-gradient(orange, orangered); }

此 CSS 文件为根节点和Text节点创建样式。

StylingTextEx.java

  1. package com.zetcode;
  2. import javafx.application.Application;
  3. import javafx.geometry.Insets;
  4. import javafx.scene.Scene;
  5. import javafx.scene.layout.HBox;
  6. import javafx.scene.text.Font;
  7. import javafx.scene.text.FontWeight;
  8. import javafx.scene.text.Text;
  9. import javafx.stage.Stage;
  10. /**
  11. * ZetCode JavaFX tutorial
  12. *
  13. * This program styles a Text control with CSS.
  14. *
  15. * Author: Jan Bodnar
  16. * Website: zetcode.com
  17. * Last modified: June 2015
  18. */
  19. public class StylingTextEx extends Application {
  20. @Override
  21. public void start(Stage stage) {
  22. initUI(stage);
  23. }
  24. private void initUI(Stage stage) {
  25. HBox root = new HBox();
  26. root.setPadding(new Insets(20));
  27. Text text = new Text("ZetCode");
  28. text.setFont(Font.font("Serif", FontWeight.BOLD, 76));
  29. text.setId("text");
  30. root.setId("root");
  31. root.getChildren().addAll(text);
  32. Scene scene = new Scene(root);
  33. scene.getStylesheets().add(this.getClass().getResource("text.css")
  34. .toExternalForm());
  35. stage.setTitle("Styling text");
  36. stage.setScene(scene);
  37. stage.show();
  38. }
  39. public static void main(String[] args) {
  40. launch(args);
  41. }
  42. }

该示例为根节点创建背景渐变颜色,并为Text控件创建线性渐变填充。

  1. Text text = new Text("ZetCode");
  2. text.setFont(Font.font("Serif", FontWeight.BOLD, 76));

创建一个Text控件。 较大的粗体衬线字体设置为控件。

  1. text.setId("text");
  2. root.setId("root");

节点由其 ID 标识,该 ID 由setId()方法设置。

  1. scene.getStylesheets().add(this.getClass().getResource("text.css")
  2. .toExternalForm());

样式表已添加到Scene中。

JavaFX 首个程序 - 图3

图:样式文本控件

在本章中,我们创建了一些简单的 JavaFX 程序。