1.什么是javaFX?
-
JavaFX 是用于创建富互联网应用程序(Rich Internet Applications,RIA)的一个 Java 库,它为开发者提供了创建具有视觉吸引力、交互式用户界面(UI)的工具和 API。
-
使用JavaFX开发的应用程序可以在各种设备上运行,如台式计算机,手机,电视,平板电脑等。 要使用Java编程语言开发GUI应用程序,程序员依赖于诸如高级窗口工具包(AWT)和Swings之类的库。 在JavaFX出现之后,这些Java程序开发就可以有效地利用丰富的类库来开发GUI应用程序
2.怎么使用javaFX
-
Application 是 JavaFX 程序的入口,任何 JavaFX 应用程序程序都要继承该类并重写 start() 方法 通过 main() 执行 Application 的 launch() 方法
-
launch 方法会默认执行该类下的 init() 、 start() 、 stop() 方法
-
方法执行后的显示顺序为: init() 方法➡ start() 方法➡ stop() 方法
@Override
public void init() throws Exception {
super.init();
}
@Override
public void start(Stage primaryStage) {
}
@Override
public void stop() throws Exception {
super.stop();
}
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene
public class Main extends Application{
@Override
public void start(Stage stage) throws Exception{
//1.继承Application
//2.重写start方法
//3.设置窗体标题
stage.setTitle("窗体")
//4.创建布局-网格布局
GridPane gp =new GridPane();
//5.创建舞台,并指定布局,宽500,高500
Scene sc=new Scene(gp,500,500)
//6.设置舞台到窗体
stage.setScene(sc);
//7.设置显示窗体
stage.show();
}
//主函数,窗体没有主函数是不行的
public static void main(String[] args){
Application.launch()
}
}
2.舞台、场景、布局、控件的基本介 绍
1.1 舞台(stage)
-
舞台是 JavaFX 应用程序的顶级容器,它代表了应用程序的窗口。每个 JavaFX 应用程序至少有一个舞台,通常被称为主舞台。舞台可以包含一个场景,并且可以设置标题、大小、图标等属性。
import javafx.application.Application;
import javafx.stage.Stage;
public class StageExample extends Application {
@Override
public void start(Stage primaryStage) {
// 设置舞台标题
primaryStage.setTitle("JavaFX Stage Example");
// 显示舞台
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
1.2 场景(Scene)
-
场景是舞台上显示的内容的容器,它包含了一个根节点(通常是一个布局)。一个舞台在同一时间只能显示一个场景,但可以通过切换场景来改变舞台上显示的内容。场景可以设置背景颜色、尺寸等属性。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class SceneExample extends Application {
@Override
public void start(Stage primaryStage) {
// 创建一个布局
Pane root = new Pane();
// 创建一个场景,将布局作为根节点
Scene scene = new Scene(root, 400, 300);
// 将场景设置到舞台上
primaryStage.setScene(scene);
primaryStage.setTitle("JavaFX Scene Example");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
1.3 布局(Layout)
-
布局是用于管理控件在场景中排列方式的容器。JavaFX 提供了多种布局管理器,如
VBox
(垂直布局)、HBox
(水平布局)、GridPane
(网格布局)等。
// 创建一个垂直布局
VBox vbox = new VBox();
// 创建一个标签
Label label = new Label("Hello, JavaFX!");
// 将标签添加到布局中
vbox.getChildren().add(label);
// 创建一个场景,将布局作为根节点
Scene scene = new Scene(vbox, 200, 100);
primaryStage.setScene(scene);
primaryStage.setTitle("JavaFX Layout Example");
primaryStage.show();
-
网格布局(GridPane)
GridPane gp=new GridPane
-
流式布局(FlowPane)
FlowPane fp=new FlowPane()
-
边框布局(BorderPane)
BorderPane bp=new BorderPane()
-
水平布局(HBox)
HBox hb = new HBox();
-
垂直布局(VBox)
VBox vb = new VBox();
-
表格布局(TableView)
TableView<Student> tv=new TableView<>();
-
设置布局居中(setAlignment)
布局对象名.setAlignment(Pos.CENTER)
-
设置边距
垂直:布局对象名.setVgap(距离) 水平:布局对象名.setHgap(距离)
1.4 控件
-
标签(Label)
-
标签用于显示文本信息,通常用于提示用户或显示一些静态文本。
//布局 VBox vbox = new VBox(); // 创建一个标签 Label label = new Label("This is a label."); vbox.getChildren().add(label);
-
-
文本框(TextField)
-
文本框用于接收用户输入的单行文本。
// 创建一个文本框 TextField textField = new TextField(); vbox.getChildren().add(textField);
-
文本框中的提示语
文本框对象名.setPromptText(“提示语”)
-
给文本框设置默认值
文本框对象名.setText(最上面函数属性名.get要获取的属性())
-
整数类型的文本框默认值
文本框名.setText(函数上面那个属性名.get编号()+"")
-
设置不可编辑
文本框名.setEditable(false)
-
-
密码框(PasswordField)
-
密码框用于接收用户输入的密码,输入的文本会以星号或圆点的形式显示。
// 创建一个密码框 PasswordField passwordField = new PasswordField(); vbox.getChildren().add(passwordField);
-
-
按钮(Button)
-
按钮用于触发特定的操作,用户点击按钮时会执行相应的事件处理程序。
// 创建一个按钮 Button button = new Button("Click me!"); // 为按钮添加点击事件处理程序 button.setOnAction(e -> System.out.println("Button clicked!")); vbox.getChildren().add(button);
-
单选按钮(RadioButton)
-
用于提供一组互斥的选项,用户只能从这组选项中选择一个。通常会使用
ToggleGroup
来管理单选按钮,确保同一组内只有一个单选按钮可以被选中。 -
基本使用步骤
-
创建 ToggleGroup:用于管理一组单选按钮,保证同一时间只有一个单选按钮被选中。
-
创建 RadioButton:创建多个单选按钮实例。
-
将单选按钮添加到 ToggleGroup:通过
setToggleGroup
方法将每个单选按钮添加到同一个ToggleGroup
中。 -
添加到布局并显示:将单选按钮添加到合适的布局中,然后将布局添加到场景,最后显示舞台
默认:按钮名.setSelected(true);
// 创建一个 ToggleGroup 用于管理单选按钮 ToggleGroup toggleGroup = new ToggleGroup(); // 创建单选按钮 RadioButton radioButton1 = new RadioButton("Option 1"); RadioButton radioButton2 = new RadioButton("Option 2"); // 将单选按钮添加到 ToggleGroup radioButton1.setToggleGroup(toggleGroup); radioButton2.setToggleGroup(toggleGroup); // 默认选中第一个单选按钮 radioButton1.setSelected(true); // 将单选按钮添加到布局中 vbox.getChildren().addAll(radioButton1, radioButton2);
-
-
-
多选按钮
-
它允许用户从一组选项中选择零个、一个或多个选项,每个多选按钮都是独立的,不会像单选按钮那样相互排斥
-
基本使用步骤
-
创建 CheckBox 实例:为每个选项创建一个
CheckBox
对象。 -
添加到布局:把创建好的多选按钮添加到合适的布局容器中。
-
获取多选按钮:
-
设置场景和舞台:将布局添加到场景,再把场景设置给舞台并显示
// 创建一个垂直布局 VBox vbox = new VBox(); // 创建多选按钮 CheckBox checkBox1 = new CheckBox("Option 1"); CheckBox checkBox2 = new CheckBox("Option 2"); String 名=“” if(多选按钮名.isSelected()){ 名=多选按钮值 }if(多选按钮名.isSelected()){ 名=多选按钮值 } // 将多选按钮添加到布局中 vbox.getChildren().addAll(checkBox1,checkBox2);
-
-
-
-
下拉框
-
它允许用户从一个预定义的列表中选择一个选项
-
基本使用步骤
-
创建 ComboBox 实例:实例化一个
ComboBox
对象。 -
添加选项:向
ComboBox
中添加预定义的选项。 -
添加到布局:将
ComboBox
添加到合适的布局容器中。 -
设置场景和舞台:把布局添加到场景,再将场景设置给舞台并显示。
方法一: // 创建一个 ObservableList 来存储下拉框的选项 ObservableList<String> options = FXCollections.observableArrayList( "Option 1", "Option 2", "Option 3" ); // 创建 ComboBox 并将选项列表传递给它 ComboBox<String> comboBox = new ComboBox<>(options); // 设置默认选中项 comboBox.setValue("Option 1"); // 将 ComboBox 添加到布局中 vbox.getChildren().add(comboBox); ----------------------------------------------------- 方法二: // 创建 ComboBox ComboBox<String> comboBox = new ComboBox<>(); { //下拉框内容 comboBox.getItems().addAll('游泳','唱歌','排球'); // 设置默认选中项 comboBox.setValue("Option 1"); } // 将 ComboBox 添加到布局中 vbox.getChildren().add(comboBox); //获取下拉框的值 String values=comboBox.getValue;
-
-
-
文本域
-
文本域(
TextArea
)是一种用于输入和显示多行文本的控件。它适合处理大段的文本内容,比如用户输入的长篇评论、日志信息展示等 -
基本使用步骤
-
创建 TextArea 实例:实例化一个
TextArea
对象。 -
添加到布局:把
TextArea
添加到合适的布局容器中。 -
设置场景和舞台:将布局添加到场景,再把场景设置给舞台并显示
// 创建 TextArea 实例 TextArea textArea = new TextArea(); // 设置初始文本 textArea.setText("This is an example of JavaFX TextArea.\nYou can type multiple lines here."); //设置文本域的行数和列数 textArea.setPrefRowCount(5); // 设置首选的行数 textArea.setPrefColumnCount(20); // 设置首选的列数 //设置文本域的高和宽 textArea.setPrefWidth(20);//宽 textArea.setPrefHeight(100);//高 //设置文本域的滚动条策略 textArea.setScrollTop(ScrollPane.ScrollBarPolicy.ALWAYS); // 始终显示垂直滚动条 textArea.setScrollLeft(ScrollPane.ScrollBarPolicy.AS_NEEDED); // 根据需要显示水平滚动条 //获取文本域中的文本 String currentText = textArea.getText(); // 将 TextArea 添加到布局中 vbox.getChildren().add(textArea);
-
-
2.流式布局
-
概念
-
流式布局(
FlowPane
)是一种常用的布局管理器,它会按照从左到右、从上到下的顺序依次排列子节点。当一行放不下所有子节点时,会自动换行继续排列 -
FlowPane flowPane = new FlowPane()
-
-
设置水平和垂直间距
flowPane.setHgap(10); // 设置水平间距为 10 像素 flowPane.setVgap(10); // 设置垂直间距为 10 像素
-
设置排列方向
import javafx.geometry.Orientation; flowPane.setOrientation(Orientation.VERTICAL); // 设置排列方向为垂直方向
-
设置对齐方式
import javafx.geometry.Pos; flowPane.setAlignment(Pos.CENTER); // 设置子节点在 FlowPane 中的对齐方式为居中对齐
stage.setTitle("流式布局");
//布局对象-流式布局
FlowPane fp=new FlowPane();
//设置布局右上
fp.setAlignment(Pos.TOP_RIGHT);
//按钮组件
Buuton b1=new Button("点1");
Buuton b2=new Button("点2");
//把组件添加到布局对象中
fp.getChildren().addAll(b1,b2)
3.边框布局
-
概念
-
边框布局(
BorderPane
)是一种常用的布局管理器,它将界面划分为五个区域:顶部(TOP
)、底部(BOTTOM
)、左侧(LEFT
)、右侧(RIGHT
)和中心(CENTER
)。每个区域只能放置一个子节点,适合构建具有明确区域划分的界面,例如包含菜单栏、工具栏、侧边栏和主内容区域的应用程序界面。 -
BorderPane borderPane = new BorderPane();
-
-
基本使用步骤
-
创建 BorderPane 实例:实例化一个
BorderPane
对象。 -
创建子节点:创建要放置在各个区域的控件,如按钮、标签等。
-
将子节点添加到相应区域:使用
BorderPane
的方法将子节点添加到指定的区域。 -
添加到场景和舞台:将
BorderPane
添加到场景,再把场景设置给舞台并显示。
-
// 创建一个 BorderPane 实例
BorderPane borderPane = new BorderPane();
// 创建放置在各个区域的按钮
Button topButton = new Button("Top");
Button bottomButton = new Button("Bottom");
Button leftButton = new Button("Left");
Button rightButton = new Button("Right");
Button centerButton = new Button("Center");
// 将按钮添加到 BorderPane 的相应区域
borderPane.setTop(topButton);
borderPane.setBottom(bottomButton);
borderPane.setLeft(leftButton);
borderPane.setRight(rightButton);
borderPane.setCenter(centerButton);
// 创建场景并将 BorderPane 作为根节点
Scene scene = new Scene(borderPane, 400, 300);
// 设置舞台的场景
primaryStage.setScene(scene);
primaryStage.setTitle("JavaFX BorderPane Example");
primaryStage.show();
-
移除某个区域的子节点
-
如果需要移除某个区域的子节点,可以将该区域设置为
null
borderPane.setTop(null);
-
-
区域嵌套布局
-
可以在某个区域放置另一个布局容器,实现更复杂的界面布局。
import javafx.scene.layout.VBox; // 创建一个 VBox 布局 VBox vbox = new VBox(); Button vboxButton1 = new Button("VBox Button 1"); Button vboxButton2 = new Button("VBox Button 2"); vbox.getChildren().addAll(vboxButton1, vboxButton2); // 将 VBox 布局添加到 BorderPane 的中心区域 borderPane.setCenter(vbox);
-
4.点击事件
-
点击事件是用户与界面交互时最常见的事件之一,它允许程序在用户点击某个控件(如按钮、菜单项等)时执行特定的操作。
-
基本步骤
-
创建按钮:实例化一个
Button
对象。 -
设置点击事件处理程序:为按钮的
setOnAction
方法设置一个事件处理程序,该处理程序通常是一个实现了EventHandler<ActionEvent>
接口的 lambda 表达式或匿名内部类。 -
添加到布局、场景和舞台:将按钮添加到布局中,再将布局添加到场景,最后将场景设置给舞台并显示
-
// 创建一个按钮
Button button = new Button("Click me!");
// 设置按钮的点击事件处理程序
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Button clicked!");
}
});
// 也可以使用 lambda 表达式简化代码
// button.setOnAction(event -> System.out.println("Button clicked!"));
// 将按钮添加到布局中
vbox.getChildren().add(button);
-
菜单点击事件
VBox vbox = new VBox(); // 创建菜单栏 MenuBar menuBar = new MenuBar(); // 创建菜单 Menu fileMenu = new Menu("File"); // 创建菜单项 MenuItem openMenuItem = new MenuItem("Open"); // 设置菜单项的点击事件处理程序 openMenuItem.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Open menu item clicked!"); } }); // 将菜单项添加到菜单中 fileMenu.getItems().add(openMenuItem); // 将菜单添加到菜单栏中 menuBar.getMenus().add(fileMenu); // 将菜单栏添加到布局中 vbox.getChildren().add(menuBar); Scene scene = new Scene(vbox, 300, 200); primaryStage.setScene(scene); primaryStage.setTitle("JavaFX MenuItem Click Event Example"); primaryStage.show();
5.弹出框简介
弹出框(Dialog)是一种用于与用户进行交互、显示重要信息或获取用户输入的界面组件
5.1 信息对话框(Alert)
-
Alert
是 JavaFX 中最常用的用于显示信息的对话框,它可以显示不同类型的消息,如提示信息、警告信息、错误信息等,并且可以根据需要添加按钮供用户选择。// 创建一个信息类型的对话框 Alert alert = new Alert(AlertType.INFORMATION); //设置标题、头部文本和内容文本:使用 setTitle、setHeaderText 和 setContentText 方法分别设置对话框的标题、头部文本和具体显示的内容。 alert.setTitle("信息提示"); alert.setHeaderText(null); alert.setContentText("这是一条信息提示消息!"); // 显示对话框 alert.showAndWait();
5.2 确定对话框
-
确认对话框通常用于询问用户是否确认执行某个操作,用户可以选择 “是” 或 “否” 等选项
// 创建一个确认类型的对话框 Alert alert = new Alert(AlertType.CONFIRMATION); alert.setTitle("确认操作"); alert.setHeaderText("你确定要执行此操作吗?"); alert.setContentText("请选择是或否。"); // 显示对话框并获取用户的选择 Optional<ButtonType> result = alert.showAndWait(); if (result.isPresent() && result.get() == ButtonType.OK) { System.out.println("用户选择了确认"); } else { System.out.println("用户选择了取消"); }
5.3 自定义对话框
-
除了使用预定义类型的对话框,还可以创建自定义对话框来满足特定的需求,例如包含自定义输入字段、布局等。
// 创建自定义对话框 Dialog<String> dialog = new Dialog<>(); //标题 dialog.setTitle("自定义对话框"); //头部文本 dialog.setHeaderText("请输入你的姓名"); // 创建按钮类型 ButtonType confirmButtonType = new ButtonType("确认", ButtonBar.ButtonData.OK_DONE); //添加按钮类型 dialog.getDialogPane().getButtonTypes().addAll(confirmButtonType, ButtonType.CANCEL); // 创建输入字段和标签 GridPane grid = new GridPane(); grid.setHgap(10); grid.setVgap(10); TextField nameField = new TextField(); nameField.setPromptText("姓名"); grid.add(new Label("姓名:"), 0, 0); grid.add(nameField, 1, 0); dialog.getDialogPane().setContent(grid); // 转换结果 setResultConverter dialog.setResultConverter(dialogButton -> { if (dialogButton == confirmButtonType) { return nameField.getText(); } return null; }); // 显示对话框并获取结果 Optional<String> result = dialog.showAndWait(); result.ifPresent(name -> System.out.println("你输入的姓名是: " + name)); }