Java最新图形化界面开发技术——JavaFx详解
                           
天天向上
发布: 2025-01-04 12:27:34

原创
746 人浏览过

JavaFX 是一个用于构建现代化、跨平台图形用户界面(GUI)应用程序的框架。它提供了一整套UI控件和丰富的功能,使得开发者可以轻松地设计、开发和部署桌面应用。JavaFX 支持 Java 编程语言,并与其他 Java 技术(如 Java SE)紧密集成。它还包括一些重要的功能,比如属性绑定、事件处理、动画等,可以大大提高应用程序的交互性和用户体验。


一、JavaFX 基础概念

  • JavaFX 应用结构:JavaFX 应用通常由一个 Application 类继承而来,包含 start() 方法,这个方法是启动应用程序时执行的入口点。
  • Stage 和 Scene
  • Stage:表示一个窗口,在 JavaFX 中,每个窗口都被封装为一个 Stage
  • Scene:包含窗口的内容,类似于 Java Swing 中的 JPanel。可以包含各种 UI 控件。

二、JavaFX 基本代码结构

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        // 创建按钮
        Button btn = new Button();
        btn.setText("Hello, JavaFX!");

        // 设置按钮点击事件
        btn.setOnAction(event -> System.out.println("Hello, World!"));

        // 创建布局容器
        StackPane root = new StackPane();
        root.getChildren().add(btn);

        // 创建场景
        Scene scene = new Scene(root, 300, 250);

        // 设置窗口标题
        primaryStage.setTitle("JavaFX Demo");

        // 设置场景并展示窗口
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

三、常用 UI 控件

1、按钮 (Button)

    • 用于执行某些动作。
    • 常用方法:
      • setOnAction():为按钮添加事件监听。

    2、标签 (Label)

      • 用于显示文本。
      • 常用方法:
        • setText():设置标签的显示文本。

      3、文本框 (TextField, TextArea)

        • TextField:单行文本输入框。
        • TextArea:多行文本输入框。
        • 常用方法:
          • getText():获取文本框内容。
          • setText():设置文本框内容。

        4、复选框 (CheckBox)

          • 用于表示可选项。
          • 常用方法:
            • setSelected():设置复选框选中状态。
            • isSelected():获取复选框选中状态。

          5、单选框 (RadioButton, ToggleGroup)

            • 用于一组选项中只能选择一个。
            • 常用方法:
              • setSelected():设置选中的状态。
              • isSelected():获取是否选中。

            6、下拉框 (ComboBox)

              • 用于提供一组选项供用户选择。
              • 常用方法:
                • getSelectionModel().getSelectedItem():获取当前选中的项。
                • setItems():设置下拉框选项。

              7、进度条 (ProgressBar, ProgressIndicator)

                • 显示进度状态。
                • 常用方法:
                  • setProgress():设置进度条进度。

                8、表格视图 (TableView)

                  • 显示数据表格。
                  • 常用方法:
                    • getColumns():获取表格的列。
                    • setItems():设置表格项。

                  9、图像视图 (ImageView)

                    • 用于显示图片。
                    • 常用方法:
                      • setImage():设置图像。

                    四、属性绑定(Property Binding)

                    JavaFX 支持强大的属性绑定机制,允许 UI 控件之间、控件与数据之间进行实时绑定。属性绑定非常适合用于处理动态变化的 UI。

                    1. 双向绑定
                       import javafx.beans.property.IntegerProperty;
                       import javafx.beans.property.SimpleIntegerProperty;
                    
                       IntegerProperty a = new SimpleIntegerProperty();
                       IntegerProperty b = new SimpleIntegerProperty();
                    
                       // 双向绑定
                       b.bind(a);
                       a.set(10);
                       System.out.println(b.get()); // 输出 10
                    1. 绑定 UI 控件属性
                      假设我们有一个 TextField 和一个 Label,并希望它们的文本内容保持一致:
                       TextField textField = new TextField();
                       Label label = new Label();
                    
                       // 绑定 TextField 的文本内容与 Label 的文本内容
                       label.textProperty().bind(textField.textProperty());
                    1. 绑定数字进度条和文本框
                       ProgressBar progressBar = new ProgressBar();
                       TextField progressField = new TextField();
                    
                       // 绑定进度条与文本框
                       progressBar.progressProperty().bind(progressField.textProperty().asDouble());

                    五、事件处理

                    JavaFX 中的事件处理采用事件源与事件监听器的模式,可以处理用户与 UI 控件的交互行为。

                    1. 按钮点击事件
                       Button button = new Button("Click me");
                       button.setOnAction(e -> {
                           System.out.println("Button clicked!");
                       });
                    1. 鼠标事件
                    • setOnMouseClicked():处理点击事件。
                    • setOnMouseEntered():处理鼠标进入事件。
                    • setOnMouseExited():处理鼠标退出事件。
                       button.setOnMouseClicked(e -> {
                           System.out.println("Mouse clicked at: " + e.getX() + ", " + e.getY());
                       });
                    1. 键盘事件
                    • setOnKeyPressed():处理按键按下事件。
                    • setOnKeyReleased():处理按键释放事件。
                       textField.setOnKeyPressed(e -> {
                           if (e.getCode() == KeyCode.ENTER) {
                               System.out.println("Enter key pressed");
                           }
                       });

                    六、布局管理

                    JavaFX 提供了多种布局控件,用于管理和组织 UI 元素的位置和大小。常用的布局有:

                    1. VBox:垂直布局容器。
                       VBox vbox = new VBox();
                       vbox.getChildren().addAll(button1, button2);
                    1. HBox:水平布局容器。
                       HBox hbox = new HBox();
                       hbox.getChildren().addAll(button1, button2);
                    1. GridPane:网格布局容器。
                       GridPane grid = new GridPane();
                       grid.add(label1, 0, 0);
                       grid.add(label2, 1, 0);
                    1. StackPane:堆叠布局容器,所有子控件都叠加显示。
                       StackPane stackPane = new StackPane();
                       stackPane.getChildren().add(button);
                    1. AnchorPane:锚点布局,允许控件根据指定的偏移量进行定位。
                       AnchorPane anchorPane = new AnchorPane();
                       AnchorPane.setTopAnchor(button, 10.0);
                       AnchorPane.setLeftAnchor(button, 10.0);

                    七、动画与效果

                    JavaFX 提供了丰富的动画效果来增强用户体验。常见的动画有:

                    1. 平移动画
                       TranslateTransition transition = new TranslateTransition();
                       transition.setNode(button);
                       transition.setByX(100);
                       transition.setByY(100);
                       transition.setCycleCount(2);
                       transition.setAutoReverse(true);
                       transition.play();
                    1. 缩放动画
                       ScaleTransition scale = new ScaleTransition();
                       scale.setNode(button);
                       scale.setByX(2);
                       scale.setByY(2);
                       scale.setCycleCount(2);
                       scale.setAutoReverse(true);
                       scale.play();
                    1. 旋转动画
                       RotateTransition rotate = new RotateTransition();
                       rotate.setNode(button);
                       rotate.setByAngle(180);
                       rotate.setCycleCount(2);
                       rotate.setAutoReverse(true);
                       rotate.play();
                    1. 逐渐显示/隐藏效果
                       FadeTransition fade = new FadeTransition();
                       fade.setNode(button);
                       fade.setFromValue(0);
                       fade.setToValue(1);
                       fade.setCycleCount(2);
                       fade.setAutoReverse(true);
                       fade.play();

                    总结

                    JavaFX 提供了丰富的 UI 控件、布局管理器、动画效果和事件处理机制,使得 Java 开发者能够轻松创建出具有现代外观和交互的应用程序。掌握 JavaFX 的使用,可以帮助开发者设计出更有趣、动态且用户友好的桌面应用。

                    发表回复 0

                    Your email address will not be published. Required fields are marked *