如何通过单击按钮关闭Java窗口 – JavaFX项目

我创建了一个JavaFX项目,并为java Scene Builder中的第一个登录框架创建了GUI。 登录成功后,必须关闭登录框,并且必须显示下一帧(主程序框)。 我可以让新框架出现,但我无法关闭登录框架。 我试过像dispose()这样的东西,但没有任何作用。 以下是主类的代码:

 public class KuberComm extends Application { @Override public void start(Stage stage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); Scene scene = new Scene(root); stage.setResizable(false); stage.setTitle("Login to KuberComm"); stage.setScene(scene); stage.show(); } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } } 

登录按钮的处理程序位于另一个类(NetBeans IDE生成的控制器类)中。 我无法弄清楚框架的名称是什么,以便在控制器类中使用它。

任何帮助都感激不尽!

在控制器类中为您的按钮命名:

 @FXML public Button closeButton; 

并添加此方法:

 @FXML public void handleCloseButtonAction(ActionEvent event) { Stage stage = (Stage) closeButton.getScene().getWindow(); stage.close(); } 

在FXML中,您需要引用按钮名称和调用onAction的方法:

  

这将关闭此按钮所在的阶段。

使用

 stage.hide() 

如果从控制器执行此操作,则可以从舞台场景内的任何Node获取舞台(如果需要,让FXML加载程序使用fxml中fxml命名空间的id属性将其分配给控制器的字段):

 Window stage = node.getScene().getWindow(); 

感谢您的时间回复,但最后我发现了如何解决它。 我用了

 ((Node)(event.getSource())).getScene().getWindow().hide(); 

if它负责成功登录。 我的意思是,在出现一个对话框告知用户他们成功登录后,该代码就会出现。

(我也导入了正确的东西,以使代码行工作)

与其他答案类似但更精确。

 @FXML public void handleCloseButtonAction(ActionEvent event) { ((Stage)(((Button)event.getSource()).getScene().getWindow())).close(); } 

虽然

  getScene().getWindow(); 

Node上将从控制器获取阶段,重要的是要注意调用close()hide()是等效的,并且只会使登录窗口不可见。 至于使用dispose()

此链接可能有助于消除任何混淆。