在javaFX中实现多个窗口类的窗口切换
时间: 2023-12-04 20:01:55 浏览: 146
javafx显示多个窗口以及javafx多窗口之间数据交互传输项目原文件
3星 · 编辑精心推荐
在JavaFX中实现多个窗口类的窗口切换,可以通过创建多个窗口类和场景类,以及使用Stage和Scene进行窗口切换。具体步骤如下:
1. 创建多个窗口类,每个窗口类对应一个窗口界面,窗口类可以继承自javafx.scene.layout.Pane类,实现自己的布局和控件。
2. 在每个窗口类中创建一个方法,用于返回该窗口的场景对象(Scene)。在该方法中,创建一个Pane对象,将该窗口的控件添加到Pane中,并创建一个Scene对象,将Pane作为参数传递给Scene构造函数。
3. 在应用程序主类中,创建多个窗口类的对象,并将它们的场景对象(Scene)保存到一个HashMap中,其中键是窗口类的名称,值是该窗口的Scene对象。例如:
```
// 创建多个窗口类的对象
MainWindow mainWindow = new MainWindow();
SecondWindow secondWindow = new SecondWindow();
// 将它们的场景对象保存到HashMap中
Map<String, Scene> scenes = new HashMap<>();
scenes.put("MainWindow", mainWindow.getScene());
scenes.put("SecondWindow", secondWindow.getScene());
```
4. 在主类中创建一个方法,用于切换窗口。该方法接受一个窗口名称作为参数,并通过HashMap获取该窗口的Scene对象,然后将其设置为主舞台(Stage)的场景(Scene)。例如:
```
private void switchScene(String windowName) {
Scene scene = scenes.get(windowName);
primaryStage.setScene(scene);
}
```
5. 在需要切换窗口的地方,调用switchScene方法即可。例如,可以在一个按钮的事件处理方法中调用该方法:
```
switchButton.setOnAction(event -> {
switchScene("SecondWindow");
});
```
完整的示例代码如下:
MainWindow类:
```
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
public class MainWindow extends Pane {
public MainWindow() {
Button switchButton = new Button("Switch to Second Window");
switchButton.setOnAction(event -> {
WindowSwitcher.switchTo("SecondWindow");
});
getChildren().add(switchButton);
}
public Scene getScene() {
return new Scene(this, 400, 300);
}
}
```
SecondWindow类:
```
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
public class SecondWindow extends Pane {
public SecondWindow() {
Button backButton = new Button("Back to Main Window");
backButton.setOnAction(event -> {
WindowSwitcher.switchTo("MainWindow");
});
getChildren().add(backButton);
}
public Scene getScene() {
return new Scene(this, 400, 300);
}
}
```
WindowSwitcher类:
```
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.util.HashMap;
import java.util.Map;
public class WindowSwitcher extends Application {
private static Stage primaryStage;
private static Map<String, Scene> scenes = new HashMap<>();
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
primaryStage.setTitle("Main Window");
// 创建多个窗口类的对象
MainWindow mainWindow = new MainWindow();
SecondWindow secondWindow = new SecondWindow();
// 将它们的场景对象保存到HashMap中
scenes.put("MainWindow", mainWindow.getScene());
scenes.put("SecondWindow", secondWindow.getScene());
// 设置主舞台的场景为主窗口的场景
primaryStage.setScene(mainWindow.getScene());
primaryStage.show();
}
public static void switchTo(String windowName) {
Scene scene = scenes.get(windowName);
primaryStage.setScene(scene);
}
public static void main(String[] args) {
launch(args);
}
}
```
在这个例子中,我们创建了MainWindow和SecondWindow两个窗口类,并在WindowSwitcher类中保存它们的场景对象。当用户点击“Switch to Second Window”按钮时,我们调用WindowSwitcher.switchTo方法切换到SecondWindow窗口。当用户点击“Back to Main Window”按钮时,我们调用WindowSwitcher.switchTo方法切换回MainWindow窗口。
阅读全文