You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX新手求助:如何从主Stage调用第二个Stage?

解决JavaFX从主Stage调用第二个Stage的问题

嘿,我看出来你在调用第二个窗口的时候踩了个新手常犯的小坑——你直接写了StageTwo(finalList),但StageTwo是个类啊,得先实例化它才能创建并显示新窗口!另外你的StageTwo类看起来还没完成布局初始化,我来帮你把这些问题理顺。

第一步:完善StageTwo类的实现

先把你的StageTwo类补全,给它加个正确的构造方法,把UI布局和窗口配置都搞定:

import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class StageTwo extends Stage {
    private TextArea txtDisp = new TextArea();

    // 带参数的构造方法,接收要展示的文本内容
    public StageTwo(String displayText) {
        // 把传入的文本设置到TextArea里
        txtDisp.setText(displayText);
        txtDisp.setEditable(false); // 可选:设置成不可编辑,避免用户修改内容

        // 创建布局容器并添加TextArea
        StackPane root = new StackPane();
        root.getChildren().add(txtDisp);

        // 创建Scene并绑定到当前Stage
        Scene scene = new Scene(root, 400, 300); // 自定义窗口大小
        this.setScene(scene);
        this.setTitle("员工信息窗口"); // 设置窗口标题
    }
}

第二步:修正主Stage按钮的事件处理代码

在主窗口的按钮事件里,你需要new一个StageTwo的实例,然后调用show()方法把它显示出来:

btnShow.setOnAction(e -> {
    String finalList = "";
    // 用增强for循环写起来更简洁
    for (Worker worker : finalArrayList) {
        finalList += worker.getName() + "\t" + worker.getCity() + "\n";
    }
    // 实例化第二个窗口并显示
    StageTwo secondStage = new StageTwo(finalList);
    secondStage.show();
});

额外的优化小建议

  • 字符串拼接建议用StringBuilder,尤其是当你的员工列表比较大的时候,能避免频繁创建字符串对象:
    StringBuilder sb = new StringBuilder();
    for (Worker worker : finalArrayList) {
        sb.append(worker.getName()).append("\t").append(worker.getCity()).append("\n");
    }
    String finalList = sb.toString();
    
  • 如果希望第二个窗口是模态窗口(必须关掉它才能操作主窗口),可以加一行代码:
    secondStage.initModality(Modality.APPLICATION_MODAL);
    
    记得要导入javafx.stage.Modality包哦。

这样修改之后,你的第二个Stage就能正常从主Stage调用并展示内容啦!

内容的提问来源于stack exchange,提问作者John Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:00:12