首页 > 编程语言 >JavaFX 常见UI控件使用

JavaFX 常见UI控件使用

时间:2024-06-04 11:45:07浏览次数:32  
标签:控件 primaryStage javafx JavaFX scene UI import new public

UI 控件介绍

JavaFX 提供了一套丰富的用户界面控件,这些控件可以用来创建现代的、交互式的图形用户界面(GUI)。JavaFX 控件是 JavaFX 库中预定义的组件,它们封装了创建用户界面元素的复杂性,使得开发者可以快速地构建应用程序界面。

以下是一些常见的 JavaFX 控件:

控件名 说明
Label 标签
Button 按钮
RadioButton 单选按钮(按组使用,具有互斥性)
ToggleButton 切换按钮(单独使用,可切换为选中或未选中状态)
CheckBox 复选框
ChoiceBox 下拉框(不可编辑)
ComboBox 下拉框(可编辑)
TextField 文本输入框(单行)
TextArea 文本输入框(多行)
Password Field 密码输入框
Progress Bar 进度条(显示任务进度的条形图)
Progress Indicator 进度指示器
Separator 分割线
Slider 滑块(允许用户通过滑动选择一个值的范围)
List View 列表视图
Table View 表格视图
Pagination Control 分页控制器
Tree View 树视图
Tree Table View 树表视图
Image View 图片视图
MenuBar 菜单栏(包含菜单项)
MenuItem 菜单项(用户可以点击执行操作)
Dialog 弹出窗口(用于创建模态框)
Hyperlink 超链接
Tooltip 提示
HTML Editor HTML编辑器
AccordionMenu 手风琴菜单
Color Picker 颜色选取器
Date Picker 日期选择器
File Chooser 文件选择器

UI 控件使用

RadioButton(单选按钮)

它允许用户从一组选项中选择一个。每个 RadioButton 通常表示一个选项,并且这些 RadioButton 通常被组织在一个 ToggleGroup 中,以确保一次只能选择一个选项。

案例演示

package com.binge.javafxdemo.component;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class RadioButtonExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建一个 ToggleGroup 来管理 RadioButton
        ToggleGroup group = new ToggleGroup();

        // 创建 RadioButton
        RadioButton option1 = new RadioButton("Option 1");
        RadioButton option2 = new RadioButton("Option 2");
        RadioButton option3 = new RadioButton("Option 3");

        // 将 RadioButton 添加到 ToggleGroup
        option1.setToggleGroup(group);
        option2.setToggleGroup(group);
        option3.setToggleGroup(group);

        // 创建一个 Label 用于显示选中的选项
        Label selectedOptionLabel = new Label("No option selected");

        // 创建一个 VBox 作为布局容器
        VBox vbox = new VBox(10); // 间距为 10
        vbox.getChildren().addAll(option1, option2, option3, selectedOptionLabel);

        // 设置场景
        Scene scene = new Scene(vbox, 300, 200);

        // 设置舞台(窗口)并显示
        primaryStage.setTitle("RadioButton Example");
        primaryStage.setScene(scene);
        primaryStage.show();

        // 监听 RadioButton 选中事件
        group.selectedToggleProperty().addListener((obs, oldToggle, newToggle) -> {
            if (newToggle != null) {
                selectedOptionLabel.setText(((RadioButton) newToggle).getText());
            }
        });
    }

    public static void main(String[] args) {
        launch(args);
    }
}
CheckBox(复选框)

它提供了一个复选框,允许用户选择或取消选择一个选项。与 RadioButton 不同,CheckBox 通常用于允许用户选择多个选项,而不是从一组互斥选项中选择一个

案例演示

package com.binge.javafxdemo.component;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 * CheckBox 示例
 */
public class CheckBoxExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建 CheckBox 控件
        CheckBox checkBox1 = new CheckBox("Option 1");
        CheckBox checkBox2 = new CheckBox("Option 2");
        CheckBox checkBox3 = new CheckBox("Option 3");

        // 创建布局并添加 CheckBox 控件
        VBox vbox = new VBox(10); // 间距为 10
        vbox.getChildren().addAll(checkBox1, checkBox2, checkBox3);

        // 创建场景并设置舞台
        Scene scene = new Scene(vbox, 200, 150);
        primaryStage.setTitle("CheckBox Demo");
        primaryStage.setScene(scene);
        primaryStage.show();

        // 监听 CheckBox 选中事件
        checkBox1.selectedProperty().addListener((obs, oldValue, newValue) ->
                System.out.println("Option 1 is now " + (newValue ? "selected" : "deselected")));
    }

    public static void main(String[] args) {
        launch(args);
    }
}
ComboBox(下拉框)

它结合了下拉列表和文本输入框的功能,允许用户从预定义的选项列表中选择一个选项,或者输入自定义值(如果启用了编辑功能)

案例演示

package com.binge.javafxdemo.component;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ComboBoxExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建 ComboBox
        ComboBox<String> comboBox = new ComboBox<>();

        // 创建选项列表
        ObservableList<String> options = FXCollections.observableArrayList(
            "Option 1", "Option 2", "Option 3", "Option 4"
        );
        comboBox.setItems(options);

        // 设置为可编辑
        //        comboBox.setEditable(true);

        // 监听选中值变化
        comboBox.valueProperty().addListener((obs, oldVal, newVal) -> {
            System.out.println("Selected Value: " + newVal);
        });

        // 创建布局并添加 ComboBox
        VBox vbox = new VBox(10); // 间距为 10
        vbox.getChildren().add(comboBox);

        // 创建场景并设置舞台
        Scene scene = new Scene(vbox, 300, 200);
        primaryStage.setTitle("ComboBox Demo");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
TextField(文本输入框)

用于输入和编辑单行文本

案例演示

package com.binge.javafxdemo.component;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 * TextField 示例
 */
public class TextFieldExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建 TextField 控件
        TextField textField = new TextField();

        // 设置初始文本
        textField.setText("Initial text");

        // 设置最大长度
        textField.setMaxWidth(200);

        // 添加文本更改监听器
        textField.textProperty().addListener((obs, oldText, newText) -> {
            System.out.println("Text changed to: " + newText);
        });

        // 创建布局并添加 TextField
        VBox vbox = new VBox(10); // 间距为 10
        vbox.getChildren().add(textField);

        // 创建场景并设置舞台
        Scene scene = new Scene(vbox, 300, 100);
        primaryStage.setTitle("TextField Demo");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
List View(列表视图)

用于显示一列可选项目。用户可以通过它选择一个或多个项目,取决于 ListView 的设置

package com.binge.javafxdemo.component;

/**
 * @author binge
 * @Description
 * @date 2024年05月31日 上午 10:08
 */
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 * ListView 示例
 */
public class ListViewExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建 ListView
        ListView<String> listView = new ListView<>();

        // 创建项目列表
        ObservableList<String> items = FXCollections.observableArrayList(
            "Apple", "Banana", "Cherry", "Date", "Elderberry"
        );
        listView.setItems(items);

        // 设置为多选模式
        listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

        // 监听选中项变化
        listView.getSelectionModel().selectedItemProperty().addListener((obs, oldSelection, newSelection) -> {
            System.out.println("Selected item: " + newSelection);
        });

        // 创建布局并添加 ListView
        VBox vbox = new VBox(10); // 间距为 10
        vbox.getChildren().add(listView);

        // 创建场景并设置舞台
        Scene scene = new Scene(vbox, 300, 200);
        primaryStage.setTitle("ListView Demo");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Table View(表格视图)

用于显示表格

案例演示

package com.binge.javafxdemo.component;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;

/**
 * TableView 表格示例
 */
public class TableViewExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建 TableView
        TableView<Person> tableView = new TableView<>();

        // 创建数据列
        TableColumn<Person, String> nameColumn = new TableColumn<>("姓名");
        nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
        TableColumn<Person, Integer> ageColumn = new TableColumn<>("年龄");
        ageColumn.setCellValueFactory(new PropertyValueFactory<>("age"));

        // 添加列到 TableView
        tableView.getColumns().addAll(nameColumn, ageColumn);

        // 创建示例数据
        ObservableList<Person> data = FXCollections.observableArrayList(
                new Person("张三", 28),
                new Person("李四", 34),
                new Person("王五", 22)
        );

        // 设置 TableView 的数据
        tableView.setItems(data);

        // 创建场景并设置舞台
        Scene scene = new Scene(tableView, 400, 300);
        primaryStage.setTitle("TableView 示例");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    // 简单的 Person 类用于表格数据
    public static class Person {
        private String name;
        private Integer age;

        public Person(String name, Integer age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public Integer getAge() {
            return age;
        }
    }

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

当表格显示数据太多,建议表格带分页(Pagination Control 分页控制器)功能

案例演示

package com.binge.javafxdemo.component;


import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Pagination;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
import javafx.scene.layout.VBox;

public class TableViewWithPaginationExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建数据
        ObservableList<User> users = FXCollections.observableArrayList(
                new User("Alice", 24),
                new User("Bob", 30),
                new User("Charlie", 18),
                new User("David", 22),
                new User("Emily", 26),
                new User("Frank", 32),
                new User("Grace", 28),
                new User("Henry", 20),
                new User("Isabella", 25),
                new User("Jack", 29),
                new User("Kevin", 21)
                // 添加更多用户...
        );

        // 创建分页控件
        Pagination pagination = new Pagination((int) Math.ceil((double) users.size() / 5), 0);
        pagination.setPageFactory((pageIndex) -> createPage(users, pageIndex));

        // 创建布局容器
        VBox vbox = new VBox(pagination);

        // 创建场景并设置舞台
        Scene scene = new Scene(vbox, 800, 600);
        primaryStage.setScene(scene);
        primaryStage.setTitle("JavaFX TableView with Pagination");
        primaryStage.show();
    }

    private VBox createPage(ObservableList<User> users, int pageIndex) {
        // 创建表格
        TableView<User> tableView = new TableView<>();
        TableColumn<User, String> nameCol = new TableColumn<>("Name");
        TableColumn<User, Integer> ageCol = new TableColumn<>("Age");

        nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
        ageCol.setCellValueFactory(new PropertyValueFactory<>("age"));

        tableView.getColumns().addAll(nameCol, ageCol);

        // 计算当前页的数据
        int startItemIndex = pageIndex * 5; // 假设每页5项
        int endItemIndex = Math.min(startItemIndex + 5, users.size());

        // 显示当前页的数据
        tableView.setItems(FXCollections.observableArrayList(users.subList(startItemIndex, endItemIndex)));

        return new VBox(tableView);
    }

    public static class User {
        private String name;
        private int age;

        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Tree View(树视图)

用于以树状层次结构展示数据。它允许用户查看和操作具有父子关系的数据集合

案例演示

package com.binge.javafxdemo.component;

/**
 * @author binge
 * @Description
 * @date 2024年05月31日 上午 10:16
 */
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 * TreeView 示例
 */
public class TreeViewExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建 TreeView
        TreeView<String> treeView = new TreeView<>();

        // 创建根节点
        TreeItem<String> root = new TreeItem<>("Fruits");

        // 创建子节点
        TreeItem<String> apple = new TreeItem<>("Apple");
        TreeItem<String> banana = new TreeItem<>("Banana");
        TreeItem<String> cherry = new TreeItem<>("Cherry");

        // 将子节点添加到根节点
        root.getChildren().add(apple);
        root.getChildren().add(banana);
        root.getChildren().add(cherry);

        // 设置 TreeView 的根节点
        treeView.setRoot(root);

        // 创建布局并添加 TreeView
        VBox vbox = new VBox(10); // 间距为 10
        vbox.getChildren().add(treeView);

        // 创建场景并设置舞台
        Scene scene = new Scene(vbox, 300, 200);
        primaryStage.setTitle("TreeView Demo");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Image View(图片视图)

ImageView 控件可以加载并显示图片文件,它允许你将图像资源嵌入到你的应用程序中。

案例演示

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class ImageViewExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        try {
            // 创建 ImageView 实例
            ImageView imageView = new ImageView();
            
            // 加载图片
            Image image = new Image("path/to/your/image.png");
            imageView.setImage(image);
            
            // 设置 ImageView 的属性
            imageView.setFitWidth(200); // 设置图片的显示宽度
            imageView.setPreserveRatio(true); // 保持图片的纵横比
            
            // 创建一个 Pane 作为布局容器
            Pane root = new Pane();
            root.getChildren().add(imageView);
            
            // 创建 Scene 并设置根布局
            Scene scene = new Scene(root, 300, 250);
            
            // 设置舞台(窗口)并显示
            primaryStage.setTitle("ImageView Example");
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

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

用于创建和管理菜单栏,它是用户界面中的一个水平条,其中包含多个菜单项(Menu)。用户可以通过点击菜单项来触发操作或显示子菜单

案例演示

package com.binge.javafxdemo.component;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage;

public class MenuBarExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建 MenuBar
        MenuBar menuBar = new MenuBar();

        // 创建菜单
        Menu fileMenu = new Menu("File");
        Menu editMenu = new Menu("Edit");

        // 创建菜单项
        MenuItem newFile = new MenuItem("New");
        MenuItem openFile = new MenuItem("Open");
        MenuItem close = new MenuItem("Close");

        // 将菜单项添加到文件菜单
        fileMenu.getItems().addAll(newFile, openFile, close);

        // 将菜单添加到 MenuBar
        menuBar.getMenus().addAll(fileMenu, editMenu);

        // 设置菜单项的事件处理器
        newFile.setOnAction(event -> {
            System.out.println("New file action");
        });

        // 创建场景并设置舞台
        Scene scene = new Scene(menuBar, 400, 200);
        primaryStage.setTitle("MenuBar Demo");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Dialog(弹出窗口)

用于创建模态对话框,它可以中断用户与应用程序主界面的交互,直到对话框被关闭

案例演示

package com.binge.javafxdemo.component;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar;
import javafx.scene.control.Dialog;
import javafx.scene.control.ButtonType;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.Window;

public class DialogExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建一个按钮,点击后会弹出对话框
        Button showDialogButton = new Button("Show Dialog");
        showDialogButton.setOnAction(event -> {
            showDialog(primaryStage);
        });

        // 创建一个垂直布局的 VBox
        VBox vbox = new VBox(10); // 间距为 10
        vbox.getChildren().add(showDialogButton);

        // 创建场景并设置舞台
        Scene scene = new Scene(vbox, 300, 200);
        primaryStage.setTitle("Dialog Demo");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void showDialog(Window owner) {
        // 创建一个带有确认和取消按钮的对话框
        Dialog<String> dialog = new Dialog<>();
        dialog.initOwner(owner);
        dialog.setTitle("Sample Dialog");
        dialog.setHeaderText("Look, a Dialog!");

        // 设置对话框的内容
        VBox dialogVbox = new VBox(10); // 间距为 10
        dialogVbox.getChildren().add(new Button("Click Me!"));

        // 创建按钮类型
        ButtonType seeButton = new ButtonType("OK", ButtonBar.ButtonData.OK_DONE);
        dialog.getDialogPane().getButtonTypes().addAll(seeButton, ButtonType.CANCEL);

        // 设置对话框按钮的事件处理器
        dialog.setResultConverter(dialogButton -> {
            if (dialogButton == seeButton) {
                return "User clicked See";
            }
            return null;
        });

        // 设置对话框的布局
        dialog.getDialogPane().setContent(dialogVbox);

        // 显示对话框
        dialog.showAndWait().ifPresent(result -> {
            System.out.println("Dialog result: " + result);
        });
    }

    public static void main(String[] args) {
        launch(args);
    }
}
AccordionMenu(手风琴菜单)

Accordion 是一个容器控件,用于管理一组可以展开和折叠的 TitledPane 对象。每个 TitledPane 可以包含其他控件,并具有一个标题,用户可以点击这个标题来展开或折叠 TitledPane 的内容。Accordion 允许多个 TitledPane 在同一空间内以整洁的方式排列,用户一次只能看到一个 TitledPane 的内容。

案例演示

package com.binge.javafxdemo.component;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.scene.control.*;

import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;

/**
 * AccordionMenuExample 类用于演示带手风琴效果的左侧导航菜单
 */
public class AccordionMenuExample extends Application {
    private AnchorPane mainContent;

    @Override
    public void start(Stage primaryStage) {
        // 创建 Accordion 用于左侧导航
        Accordion accordion = new Accordion();

        // 创建首页导航项
        TitledPane homePane = new TitledPane("首页", createLinksPane());
        accordion.getPanes().add(homePane);

        // 创建主要内容区域
        mainContent = new AnchorPane();
        mainContent.setStyle("-fx-background-color: white;");

        // 创建 SplitPane 来容纳侧边栏和主要内容区域
        SplitPane splitPane = new SplitPane(accordion, mainContent);
        splitPane.setDividerPositions(0.2); // 设置分隔条位置,侧边栏占20%

        // 创建场景
        Scene scene = new Scene(splitPane, 800, 600);

        // 设置舞台
        primaryStage.setTitle("带手风琴效果的左侧导航");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    // 创建链接区域
    private VBox createLinksPane() {
        VBox linksPane = new VBox(10);
        linksPane.setStyle("-fx-background-color: #f0f0f0;");

        // 创建链接按钮并设置事件处理器
        Button personalCenterBtn = new Button("个人中心");
        personalCenterBtn.setOnAction(e -> updateMainContent("个人中心内容"));
        linksPane.getChildren().add(personalCenterBtn);

        Button memberCenterBtn = new Button("会员中心");
        memberCenterBtn.setOnAction(e -> updateMainContent("会员中心内容"));
        linksPane.getChildren().add(memberCenterBtn);

        Button customerCenterBtn = new Button("客户中心");
        customerCenterBtn.setOnAction(e -> updateMainContent("客户中心内容"));
        linksPane.getChildren().add(customerCenterBtn);

        return linksPane;
    }

    // 更新主要内容区域的方法
    private void updateMainContent(String content) {
        // 清除当前主要内容区域的所有子节点
        mainContent.getChildren().clear();
        // 创建一个新的 Label 并添加到主要内容区域
        Label contentLabel = new Label(content);
        contentLabel.setStyle("-fx-wrap-text: true; -fx-text-alignment: center;");
        AnchorPane.setTopAnchor(contentLabel, 50.0);
        AnchorPane.setLeftAnchor(contentLabel, 50.0);
        mainContent.getChildren().add(contentLabel);
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Date Picker(日期选择器)

允许用户通过一个下拉日历视图选择日期

案例演示

package com.binge.javafxdemo.component;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.time.LocalDate;

/**
 * DatePicker 示例
 */
public class DatePickerExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建 DatePicker 控件
        DatePicker datePicker = new DatePicker();

        // 设置默认日期为当前日期
        datePicker.setValue(LocalDate.now());

        // 监听日期变化
        datePicker.valueProperty().addListener((obs, oldDate, newDate) -> {
            System.out.println("Selected date changed to: " + newDate);
        });

        // 创建布局并添加 DatePicker
        VBox vbox = new VBox(10); // 间距为 10
        vbox.getChildren().add(datePicker);

        // 创建场景并设置舞台
        Scene scene = new Scene(vbox, 300, 200);
        primaryStage.setTitle("DatePicker Demo");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
File Chooser(文件选择器)

用于打开一个对话框,让用户能够浏览、选择文件或目录,以及保存文件

案例演示

package com.binge.javafxdemo.component;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.File;

/**
 * FileChooser 示例
 */
public class FileChooserExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建一个按钮,点击时打开文件选择器
        Button openButton = new Button("Open File");
        openButton.setOnAction(event -> {
            FileChooser fileChooser = new FileChooser();
            fileChooser.setTitle("Open a File");
            // 设置初始目录(可选)
            // fileChooser.setInitialDirectory(new File("/path/to/directory"));
            // 设置文件过滤器(可选)
            FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("All Files (*.*)", "*.*");
            fileChooser.getExtensionFilters().add(extFilter);

            File file = fileChooser.showOpenDialog(primaryStage);
            if (file != null) {
                System.out.println("Selected file: " + file.getAbsolutePath());
            }
        });

        // 创建布局并添加按钮
        VBox vbox = new VBox(10); // 间距为 10
        vbox.getChildren().add(openButton);

        // 创建场景并设置舞台
        Scene scene = new Scene(vbox, 300, 200);
        primaryStage.setTitle("FileChooser Demo");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

标签:控件,primaryStage,javafx,JavaFX,scene,UI,import,new,public
From: https://www.cnblogs.com/binbingg/p/18230461

相关文章

  • 使用 G-Suite 传统账户指南
    我有一个个人域名,主要是为了获得电子邮件地址而购买的。该域名的所有电子邮件都被转发到我使用多年的谷歌账户。托管我域名的公司被另一家公司收购,新公司不再支持免费电子邮件。我有一个从未真正使用过的G-Suite传统帐户。我使用我的个人域名创建了该账户;但是,......
  • JavaFX 常见布局组件的使用
    Laytout简介JavaFX提供了多种布局管理器(LayoutManagers),它们用于自动管理用户界面组件的位置和大小。布局管理器可以简化UI设计,因为它们会根据窗口的大小变化自动调整其中的组件。布局组件JavaFX包含以下布局组件:布局名称中文说明AnchorPane锚点布局允许开发......
  • 界面控件DevExpress WinForms的流程图组件 - 可完美复制Visio功能(二)
    DevExpressWinForms的Diagram(流程图)组件允许您复制MicrosoftVisio中的许多功能,并能在下一个WindowsForms项目中引入信息丰富的图表、流程图和组织图。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美......
  • allure的suites(测试套)中未显示返回值参数,显示No information about test execution is
    转自大佬:https://blog.csdn.net/sbdxmnz/article/details/137016423 ExecutionNoinformationabouttestexecutionisavailable.  解决方法:添加代码,因为pytest输出文本形式测试报告时未存储响应内容#将接口响应的文本内容附加到Allure报告中allure.attach(接口响......
  • 分享下最近基于Avalonia UI和MAUI写跨平台时间管理工具的体验
    起因几个月前,我在寻找一款时间管理软件,类似番茄时钟的工具,但是希望可以自定义时间。需要自定义的场景做雅思阅读,3篇文件需要严格控制时间分配,需要一个灵活的计时器定期提醒,每30分钟需要喝水或者上个厕所或者摸一下鱼...总结起来就是:专注一段时间,比如30分钟,然后休息10分钟,......
  • GUI程序设计--班级信息收集系6.3
    建立数据库表:importpymysqldb=pymysql.connect(host="localhost",user="root",password="ruirui",database="banji")cursor=db.cursor()cursor.execute("DROPTABLEIFEXISTSclass")sql="""CREATETABL......
  • GUI程序设计--班级信息收集系
    `#创建数据库importpymysqldb=pymysql.connect(host='localhost',user='root',password='Lwq020330',database="xinji_inf",charset='utf8')使用cursor()方法创建一个游标对象cursor=db.cursor()如果存在则删除cursor.execute("DROP......
  • GUI程序设计--班级信息收集系..
    `#创建数据库importpymysqldb=pymysql.connect(host='localhost',user='root',password='Lwq020330',database="xinji_inf",charset='utf8')使用cursor()方法创建一个游标对象cursor=db.cursor()如果存在则删除cursor.execute("DROP......
  • 安装jsonpath时报错: ERROR: Could not find a version that satisfies the requireme
    安装jsonpath时报错:ERROR:Couldnotfindaversionthatsatisfiestherequirementjsonpath(fromversions:none)ERROR:Nomatchingdistributionfoundforjsonpath解决方法:pipinstalljsonpath-i http://mirrors.aliyun.com/pypi/simple/--trusted-hostmirrors.......
  • element ui+vue快速入门
    ElementUI是一个用于开发Web应用的基于Vue.js的组件库。它提供了丰富的组件和友好的API,帮助开发者快速构建现代Web应用。以下是ElementUI的快速入门指南:安装ElementUI你可以通过npm或yarn安装ElementUI。使用npm安装npminstallelement-ui--save......