有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JavaFX如何知道是否按下了取消

如何知道在这个JavaFX对话框中是否按下了OK或Cancel按钮

对话框代码:

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();
    }
}

共 (3) 个答案

  1. # 1 楼答案

    好的,我在这里找到了Answare JavaFX Dialogs

    结果。如果用户取消对话框,isPresent()将返回false

  2. # 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. # 3 楼答案

    如果出现结果,则用户按下OK。如果没有结果,则用户可能按了“取消”,但他们可能刚刚使用操作系统的“关闭窗口”功能关闭了对话框窗口

    Optional<String> result = new TextInputDialog().showAndWait();
    if (result.isPresent()) {
        // ok was pressed.
    } else {
        // cancel might have been pressed.
    }
    

    要真正了解按钮是否被按下,可以使用Dialog javadoc部分“对话框验证/拦截按钮操作”中提到的过滤器

    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();
        }
    }