JavaFX舞台设置、场景布局及退出处理
立即解锁
发布时间: 2025-08-18 02:33:42 阅读量: 3 订阅数: 15 


Java编程入门与进阶指南
### JavaFX 舞台设置、场景布局及退出处理
#### 1. 舞台与场景布局
在 JavaFX 编程中,舞台(Stage)和场景(Scene)的设置是构建用户界面的基础。以下是关于舞台和场景布局的详细内容:
- **定义类变量**:程序中会定义一些类变量,用于存储计数器、标签、按钮等信息。例如,`iCounter` 作为计数器,还有用于显示计数器的标签、用于增加和减少计数器的按钮、用于切换场景的按钮等。
```java
// 示例代码,定义类变量
int iCounter;
Label counterLabel;
Button incrementButton;
Button decrementButton;
Button switchToClickCounterButton;
Scene scene2;
```
- **设置主舞台引用**:使用一个类字段 `stage` 来持有对主舞台的引用,以便在整个程序中都能访问它。
```java
// 设置主舞台引用
Stage stage;
stage = primaryStage;
```
- **构建点击计数器场景**:
1. 创建场景中要显示的标签和按钮。
2. 创建一个 `VBox` 布局面板,将标签和按钮添加到该面板中。
3. 使用 `VBox` 面板作为根创建场景。
```java
// 构建点击计数器场景
Label label = new Label("Click Count: 0");
Button clickMeButton = new Button("Click Me!");
VBox vbox = new VBox();
vbox.getChildren().addAll(label, clickMeButton);
Scene scene1 = new Scene(vbox, 200, 150);
```
- **构建加减计数器场景**:
1. 创建场景中要显示的标签和按钮。
2. 创建一个 `HBox` 布局面板,将标签和按钮添加到该面板中。
3. 使用 `HBox` 面板作为根创建场景。
```java
// 构建加减计数器场景
Label addSubtractLabel = new Label("Counter: 0");
Button addButton = new Button("Add");
Button subtractButton = new Button("Subtract");
HBox hbox = new HBox();
hbox.getChildren().addAll(addSubtractLabel, addButton, subtractButton);
Scene scene2 = new Scene(hbox, 200, 150);
```
- **设置主舞台场景并显示**:将点击计数器场景设置为主舞台的根场景,设置舞台标题,然后显示舞台。
```java
// 设置主舞台场景并显示
primaryStage.setScene(scene1);
primaryStage.setTitle("Click Counter");
primaryStage.show();
```
#### 2. 按钮事件处理
不同场景中的按钮需要不同的事件处理逻辑:
- **点击计数器场景按钮事件处理**:
- “Click Me!” 按钮的事件处理程序会增加点击计数器的值,并更新标签显示的消息。
- `btnSwitchToScene2` 按钮的事件处理程序会将主舞台的场景切换到 `scene2`。
```java
// 点击计数器场景按钮事件处理
clickMeButton.setOnAction(e -> {
iClickCount++;
label.setText("Click Count: " + iClickCount);
});
btnSwitchToScene2.setOnAction(e -> {
primaryStage.setScene(scene2);
});
```
- **加减计数器场景按钮事件处理**:
- “Add” 和 “Subtract” 按钮的事件处理程序会增加或减少计数器的值,并更新标签显示的文本。
- `btnSwitchToScene1` 按钮的事件处理程序会将场景切换回 `scene1`。
```java
// 加减计数器场景按钮事件处理
addButton.setOnAction(e -> {
iCounter++;
addSubtractLabel.setText("Counter: " + iCounter);
});
subtractButton.setOnAction(e -> {
iCounter--;
addSubtractLabel.setText("Counter: " + iCounter);
});
btnSwitchToScene1.setOnAction(e -> {
primaryStage.setScene(scene1);
});
```
#### 3. 创建警报框
JavaFX 提供了 `Alert` 类来显示基本的消息框,类似于之前学过的 `JOptionPane` 类。使用 `Alert` 类时,需要注意 Java 版本必须在 1.8.0_40 以上。
##### 3.1 常用构造函数和方法
| 构造函数 | 描述 |
| --- | --- |
| `Alert(Alert.AlertType)` | 创建指定类型的新警报 |
| `Alert(Alert.AlertType, String text)` | 创建指定类型的新警报并设置消息文本 |
| `Alert(Alert.AlertType, String text, ButtonType type...)` | 创建新警报并设置要显示的按钮 |
| 方法 | 描述 |
| --- | --- |
| `void setTitle(String text)` | 设置标题 |
| `Optional<ButtonType> showAndWait()` | 显示警报并等待用户响应,返回一个 `ButtonType` 对象 |
##### 3.2 警报类型
`AlertType` 参数可以指定几种不同类型的警报对话框:
- `AlertType.CONFIRMATION`:提示用户确认操作。
- `AlertType.ERROR`:显示错误消息。
- `AlertType.INFORMATION`:显示信息对话框。
- `AlertType.WARNING`:显示警告消息。
- `AlertType.NONE`:显示通用警报对话框。
##### 3.3 示例代码
```java
// 显示简单信息消息的示例
Alert a = new Alert(Alert.AlertType.INFORMATION, "You have clicked once.");
a.showAndWait();
```
##### 3.4 控制警报框按钮
可以使用 `ButtonType` 参数来控制警报框中显示的按钮,可选的按钮类型有:
- `ButtonType.APPLY`
- `ButtonType.CANCEL`
- `ButtonType.CLOSE`
- `ButtonType.FINISH`
- `ButtonType.NEXT`
- `ButtonType.NO`
- `ButtonType.OK`
- `ButtonType.PREVIOUS`
- `ButtonType.YES`
可以在构造函数中指定多个 `ButtonType` 参数,让警报框包含多个按钮。例如:
```java
// 包含多个按钮的警报框示例
Alert a = new Alert(Alert.AlertType.INFORMATION, "Are you certain?",
ButtonType.YES, ButtonType.NO);
```
要确定用户点击了哪个按钮,需要测试 `showAndWait` 方法返回的值。首先调用 `isPresent` 方法测试用户是否点击了按钮,然后调用 `get` 方法获取实际结果。
```java
// 确定用户是否点击了 YES 按钮的示例
Alert a = new Alert(Alert.AlertType.INFORMATION, "Are you certain?",
ButtonType.YES, ButtonType.NO);
Optional<ButtonType> r = a.showAndWait();
if (r.isPresent() && r.get() == ButtonType.YES) {
// The user clicked OK!
}
```
#### 4. 点击计数器警报程序示例
以下是一个使用 `Alert` 类代替标签显示点击次数的点击计数器程序示例:
```java
import javafx.application.*;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
publi
```
0
0
复制全文
相关推荐










