问题描述
我如何知道在此 JavaFX 对话框中是否按下了“确定”或“取消”按钮。
对话代码:
public String delimiter;
public void delimiterYES() throws IOException {
delimiter=new String();
TextInputDialog dialog = new TextInputDialog();
dialog.setTitle("Delimiter");
dialog.setHeaderText("Enter the delimiter");
Optional<String> result = dialog.showAndWait();
if (result.isPresent()) {
delimiter=result.get();
}
}
1楼
如果存在结果,则用户按 OK。 如果没有结果,则用户可能按下了取消键,但他们可能刚刚使用操作系统关闭窗口功能关闭了对话窗口。
Optional<String> result = new TextInputDialog().showAndWait();
if (result.isPresent()) {
// ok was pressed.
} else {
// cancel might have been pressed.
}
要真正了解按钮是否被按下,您可以使用部分“对话框验证/拦截按钮操作”中所述的过滤器。
final Button cancel = (Button) dialog.getDialogPane().lookupButton(ButtonType.CANCEL);
cancel.addEventFilter(ActionEvent.ACTION, event ->
System.out.println("Cancel was definitely pressed")
);
示例代码:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.stage.Stage;
import java.util.Optional;
public class DialogSample extends Application {
@Override
public void start(Stage stage) throws Exception {
Button showButton = new Button("show");
showButton.setOnAction(event -> showDialog(stage));
showButton.setPrefWidth(100);
stage.setScene(new Scene(showButton));
stage.show();
showButton.fire();
}
private void showDialog(Stage stage) {
TextInputDialog dialog = new TextInputDialog();
dialog.initOwner(stage);
dialog.setTitle("Delimiter");
dialog.setHeaderText("Enter the delimiter");
final Button ok = (Button) dialog.getDialogPane().lookupButton(ButtonType.OK);
ok.addEventFilter(ActionEvent.ACTION, event ->
System.out.println("OK was definitely pressed")
);
final Button cancel = (Button) dialog.getDialogPane().lookupButton(ButtonType.CANCEL);
cancel.addEventFilter(ActionEvent.ACTION, event ->
System.out.println("Cancel was definitely pressed")
);
Optional<String> result = dialog.showAndWait();
if (result.isPresent()) {
System.out.println("Result present => OK was pressed");
System.out.println("Result: " + result.get());
} else {
System.out.println("Result not present => Cancel might have been pressed");
}
}
public static void main(String[] args) {
Application.launch();
}
}
2楼
您可以使用Optional<ButtonType>
而不是Optional<String>
。
并且基本上使用下面的代码。
Optional<ButtonType> result = dialog.showAndWait();
if (result.isPresent() && result.get() == ButtonType.OK){
System.out.println("Ok button is pressed");
} else if(result.isPresent() && result.get() == ButtonType.CANCEL){
System.out.println("Cancel button was pressed");
}
希望能帮助到你。 如果您需要进一步说明,请告诉我。
3楼
好的,我在这里找到了答案
如果用户取消对话框,则 result.isPresent() 将返回 false。