为什么我的Stage.close不工作

时间:2016-05-18 15:21:04

标签: javafx stage

Stage.close()对我不起作用。

我已经检查过了: JavaFX 2.0: Closing a stage (window)

这是我的代码:

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.control.Label;
import javafx.scene.control.Button;
import javafx.stage.Modality;

public class MsgBox {

    public Stage MessageBox(String Title, String Message){

        VBox Pnl = new VBox();
        Pnl.setPadding(new Insets(10,10,10,10));
        Pnl.setSpacing(10);
        Pnl.setAlignment(Pos.CENTER);

            Label LblMsg = new Label(Message);
            Button CmdOK = new Button("OK");

        Pnl.getChildren().addAll(LblMsg, CmdOK);

        Scene SCN = new Scene(Pnl);

        Stage Window = new Stage();
            Window.initModality(Modality.APPLICATION_MODAL);
            Window.setTitle(Title);
            Window.setScene(SCN);
            Window.showAndWait();


        CmdOK.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent ev){
                Window.close();
            }
        });

        return Window;
    }
}

以下是调用消息框类的代码:

CmdUpdate.setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ev){
            new MsgBox().MessageBox("Hello", "Hello World");

        }
 });

1 个答案:

答案 0 :(得分:3)

调用Stage#showAndWait等到阶段关闭然后返回,所以实际上下一行永远不会有机会运行。

移动线

Window.showAndWait();

是方法中的最后一个(至关重要的是 - 在设置处理程序以允许关闭阶段之后),或者只使用Stage#show,您的问题应该得到解决。