【问题标题】:JavaFX - how to know if cancel was pressedJavaFX - 如何知道是否按下了取消
【发布时间】:2015-10-18 20:44:18
【问题描述】:
我如何知道在此 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();
}
}
【问题讨论】:
标签:
java
javafx
dialog
cancel-button
【解决方案1】:
您可以使用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");
}
希望对您有所帮助。如果您需要任何进一步的说明,请告诉我。
【解决方案2】:
如果存在结果,则用户按下确定。如果没有结果,那么用户可能按下了取消,但他们可能刚刚使用操作系统关闭窗口功能关闭了对话窗口。
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();
}
}