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
相关产品推荐
相关产品推荐

