Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与JavaFX的确认对话框_Java_Javafx 2_Javafx - Fatal编程技术网

与JavaFX的确认对话框

与JavaFX的确认对话框,java,javafx-2,javafx,Java,Javafx 2,Javafx,我用这个来做我的项目。当我尝试使用确认对话框时,我必须为Yes按钮创建一个EventHandler,并在方法调用中传递它。 我这样做了,但当我单击注销时,我的事件会在我单击“确认是”按钮之前执行 方法调用 public void btnSairClicked(ActionEvent event) { Dialog.buildConfirmation("Confirmar", "Deseja realmente sair?") .addYesButton(acti

我用这个来做我的项目。当我尝试使用确认对话框时,我必须为Yes按钮创建一个EventHandler,并在方法调用中传递它。 我这样做了,但当我单击注销时,我的事件会在我单击“确认是”按钮之前执行

方法调用

public void btnSairClicked(ActionEvent event) {

    Dialog.buildConfirmation("Confirmar", "Deseja realmente sair?")
            .addYesButton(actionPerformed(event))
            .addNoButton(null)
            .build()
            .show();

}

private EventHandler actionPerformed(ActionEvent event) {
    String loginUrl = "http://" + Constants.TARGET_HOST + ":" + Constants.TARGET_PORT + Constants.TARGET_SERVICE_LOGOUT_PATH;
    try {
        JSONObject json = HttpUtil.getJSON(false, loginUrl, null, null, null);
        loginManager.logout();
    } catch (IOException ex) {
        Logger.getLogger(MainViewController.class
                .getName()).log(Level.SEVERE, null, ex);
    }
    return null;
}
对话类:

public static Builder buildConfirmation(String title, String message) {
        return buildConfirmation(title, message, null);
    }

public static Builder buildConfirmation(String title, String message, Window owner) {
        return new Builder()
            .create()
            .setOwner(owner)
            .setTitle(title)
            .setConfirmationIcon()
            .setMessage(message);
    }

public Builder addYesButton(EventHandler actionHandler) {
            return addConfirmationButton("Sim", actionHandler);
        }

protected Builder addConfirmationButton(String buttonCaption, final EventHandler actionHandler) {
            Button confirmationButton = new Button(buttonCaption);
            confirmationButton.setMinWidth(BUTTON_WIDTH);
            confirmationButton.setOnAction(new EventHandler<ActionEvent>() {

                public void handle(ActionEvent t) {
                    stage.close();
                    if (actionHandler != null)
                        actionHandler.handle(t);
                }
            });

            stage.buttonsPanel.getChildren().add(confirmationButton);
            return this;
        }
publicstaticbuilderbuildconfirmation(字符串标题、字符串消息){
返回buildConfirmation(标题、消息、空);
}
公共静态生成器构建确认(字符串标题、字符串消息、窗口所有者){
返回新生成器()
.create()
.setOwner(所有者)
.setTitle(标题)
.setConfirmationIcon()
.setMessage(message);
}
公共生成器addYesButton(EventHandler actionHandler){
返回添加确认按钮(“Sim”,actionHandler);
}
受保护的生成器addConfirmationButton(字符串按钮选项,最终事件处理程序actionHandler){
按钮确认按钮=新按钮(按钮选项);
确认按钮。设置最小宽度(按钮宽度);
confirmationButton.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent t){
stage.close();
if(actionHandler!=null)
actionHandler.handle(t);
}
});
stage.buttonPanel.getChildren().add(确认按钮);
归还这个;
}

您实际上是在传递一个函数,该函数返回一个
事件处理程序
,因此它返回一个
事件处理程序
,这是函数实际期望的参数(您的函数有
返回null;
,我对此一无所知)。这也是一个函数,在分配时执行(基本上是一个调用)。因此,您需要首先创建一个完美的处理程序,而不仅仅是一个返回
EventHandler
的函数。现在你的点击事件可以处理事情了。。。。。您可以通过在对话框行中放置断点并检查我所说的内容来调试它

class MyHandler implements EventHandler<Event> {

    private String button = "";

    public MyHandler(String s) {
        this.button = s;
    }

    @Override
    public void handle(Event t) {
        if(button.equals("Yes")) {
            // do yes
            System.out.println("Yes");
        }
        else {
            // do no
            System.out.println("No");
        }
    }

}
希望这有帮助

编辑:


我已经创建了一个构造函数,它接受字符串passyes来执行基于yes的操作等等。检查字符串并执行您的操作。

我是否应该为每个事件创建一个类?不,您不必这样做。但当你用别人的,我会抽象的。我不能肯定。当然,如果你分析这些代码,是有办法的。我给你的一个好建议是拥有自己版本的dialog。让一个窗口添加两个按钮和一个文本。这样做你会有更多的控制权,也会很容易。如果你将该方法更改为返回true或false,那么你将如何获得生成器,因为我看到该方法返回生成器?@VictorAliveira最后我做了一些更改,请参阅我编辑的帖子。让我们一起来看看
 Dialog.buildConfirmation("Confirmar", "Deseja realmente sair?")
                    .addYesButton(new MyHandler("Yes"))
                    .addNoButton(new MyHandler("No"))
                    .build()
                    .show();