我正在使用此Dialog Class来制作我的项目。当我尝试使用确认对话框时,我必须为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;
}
答案 0 :(得分:3)
你实际上正在传递一个返回EventHandler
的函数,因此它返回一个EventHandler
,它实际上是函数作为参数预期的(你的函数有return 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");
}
}
}
使用Dialog,您需要执行以下操作
Dialog.buildConfirmation("Confirmar", "Deseja realmente sair?")
.addYesButton(new MyHandler("Yes"))
.addNoButton(new MyHandler("No"))
.build()
.show();
希望这有帮助。
编辑:
我创建了一个构造函数,它接受String传递yes来执行基于yes的操作,依此类推。检查字符串并执行操作。