当前位置: 代码迷 >> java >> JavaFX - 如何知道是否按下了取消
  详细解决方案

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

热度:148   发布时间:2023-08-04 09:29:34.0

我如何知道在此 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();
    }
}

如果存在结果,则用户按 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();
    }
}

您可以使用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");
    }

希望能帮助到你。 如果您需要进一步说明,请告诉我。

好的,我在这里找到了答案

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

  相关解决方案