ZetCode

JavaFX 第一个程序

最后修改于 2023 年 10 月 18 日

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

JavaFX 退出按钮

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

com/zetcode/QuitButtonEx.java
package com.zetcode;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class QuitButtonEx extends Application {

    @Override
    public void start(Stage stage) {

        initUI(stage);
    }

    private void initUI(Stage stage) {

        var btn = new Button();
        btn.setText("Quit");
        btn.setOnAction((ActionEvent event) -> {
            Platform.exit();
        });

        var root = new HBox();
        root.setPadding(new Insets(25));
        root.getChildren().add(btn);

        var scene = new Scene(root, 280, 200);

        stage.setTitle("Quit button");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Button 控件放置在窗口的左上角。 事件处理程序被添加到该按钮。

var btn = new Button();
btn.setText("Quit");

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

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

setOnAction 方法设置按钮的动作,该动作在每次触发按钮时被调用。 上述代码创建了一个匿名事件处理程序。 Platform.exit 终止应用程序。

var root = new HBox();
root.setPadding(new Insets(25));

HBox 是一个将其子节点以单个水平行排列的面板。 setPadding 方法在面板的内容周围创建填充。 (默认填充为 Insets.EMPTY。) 这样,在按钮和窗口边框的边缘之间就留出了一些空间。

root.getChildren().add(btn);

按钮被添加到 HBox 面板。

Quit button
图:退出按钮

JavaFX 工具提示

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

com/zetcode/TooltipEx.java
package com.zetcode;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class TooltipEx extends Application {

    @Override
    public void start(Stage stage) {

        initUI(stage);
    }

    private void initUI(Stage stage) {

        var root = new HBox();
        root.setPadding(new Insets(20));

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

        root.getChildren().add(btn);

        var scene = new Scene(root, 300, 250);

        stage.setTitle("Tooltip");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

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

var btn = new Button("Button");

Button 控件被实例化。

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

使用 Tooltipinstall 方法创建 Tooltip 并将其设置为按钮。

Tooltip
图:工具提示

JavaFX 助记符

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

助记符通过在控件的标签中添加 _ 字符来创建。 它导致下一个字符成为助记符。 该字符与无鼠标修饰符(通常为 Alt)结合使用。 所选字符被下划线,但它可能会以特定于平台的方式进行强调。 在某些平台上,该字符仅在按下无鼠标修饰符后才被下划线。

com/zetcode/MnemonicEx.java
package com.zetcode;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class MnemonicEx extends Application {

    @Override
    public void start(Stage stage) {

        initUI(stage);
    }

    private void initUI(Stage stage) {

        var root = new HBox();
        root.setPadding(new Insets(20));

        var btn = new Button("_Button");
        btn.setOnAction((ActionEvent event) -> {
            System.out.println("Button fired");
        });

        root.getChildren().add(btn);

        var scene = new Scene(root, 300, 250);

        stage.setTitle("Mnemonic");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

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

var btn = new Button("_Button");

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

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

当按钮被触发时,它会向控制台发送一条消息。

此时,有三种方法可以激活按钮:鼠标左键单击、Alt+B 快捷键和 Space 键(前提是按钮具有焦点)。

JavaFX 设置控件样式

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

src/resources/style.css
#root {-fx-background-color: linear-gradient(gray, darkgray); }
#text {-fx-fill:linear-gradient(orange, orangered); }  

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

com/zetcode/StylingTextEx.java
package com.zetcode;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class StylingTextEx extends Application {

    @Override
    public void start(Stage stage) {

        initUI(stage);
    }

    private void initUI(Stage stage) {

        var root = new HBox();
        root.setPadding(new Insets(20));

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

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

        root.getChildren().addAll(text);

        var scene = new Scene(root);
        scene.getStylesheets().add("style.css");

        stage.setTitle("Styling text");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

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

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

创建 Text 控件。 将较大的粗体 Serif 字体设置为该控件。

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

节点通过它们的 ID 标识,这些 ID 使用 setId 方法设置。

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

样式表被添加到 Scene

Styled Text control
图:设置样式的文本控件

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