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

时间:2015-07-28 10:35:25

标签: java javafx dialog cancel-button

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

3 个答案:

答案 0 :(得分:6)

如果存在结果,则用户按下OK。如果没有结果,则用户可能按下了取消,但他们可能刚刚使用OS关闭窗口功能关闭了对话框窗口。

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

答案 1 :(得分:2)

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

如果用户取消了对话框,则result.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");
    }

希望有帮助。让我知道是否需要进一步澄清。