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);
}
}
MenuBar(菜单栏)
用于创建和管理菜单栏,它是用户界面中的一个水平条,其中包含多个菜单项(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