什么';JavaFX中showAndWait背后的代码是什么?
我开发了一个小的JavaFX应用程序,部署在Android设备上。由于当前版本的JavaFXPorts还不支持警报,所以我自己实现了dialog。我的问题是:我不知道如何实现showAndWait功能。有人知道这个想法吗? 代码如下:什么';JavaFX中showAndWait背后的代码是什么?,java,javafx,javafx-2,javafx-8,javafxports,Java,Javafx,Javafx 2,Javafx 8,Javafxports,我开发了一个小的JavaFX应用程序,部署在Android设备上。由于当前版本的JavaFXPorts还不支持警报,所以我自己实现了dialog。我的问题是:我不知道如何实现showAndWait功能。有人知道这个想法吗? 代码如下: private static int status; public static int showConfirm(String message){ status = 0; black = new StackPane(); black.se
private static int status;
public static int showConfirm(String message){
status = 0;
black = new StackPane();
black.setStyle("-fx-background-color: black; -fx-opacity: 0.7;");
black.setPrefSize(Main.WIDTH, Main.HEIGHT);
Label label = new Label(message);
label.setStyle("-fx-font-size: 22px;");
label.setWrapText(true);
Button okBtn = new Button("OK");
okBtn.getStyleClass().add("terminal-button");
okBtn.setPrefWidth(120);
okBtn.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event) {
status = 1;
Dialog.hide();
}
});
Button cancelBtn = new Button("Cancel");
cancelBtn.getStyleClass().add("terminal-button");
cancelBtn.setPrefWidth(120);
cancelBtn.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event) {
status = -1;
Dialog.hide();
}
});
HBox btnContainer = new HBox(10);
btnContainer.setAlignment(Pos.CENTER_RIGHT);
btnContainer.getChildren().addAll(okBtn,cancelBtn);
VBox root = new VBox(30);
root.setStyle("-fx-background-color: white;");
root.setPadding(new Insets(20));
root.setPrefWidth(Main.WIDTH - 200);
root.getChildren().addAll(label,btnContainer);
Group container = new Group();
container.getChildren().add(root);
Main.PAGE.getChildren().add(black);
Main.PAGE.getChildren().add(container);
return status;
}
私有静态int状态;
公共静态int showConfirm(字符串消息){
状态=0;
黑色=新的堆栈窗格();
黑色.setStyle(“-fx背景色:黑色;-fx不透明度:0.7;”);
黑色.setPrefSize(Main.WIDTH,Main.HEIGHT);
标签=新标签(消息);
label.setStyle(“-fx字体大小:22px;”);
label.setWrapText(true);
按钮okBtn=新按钮(“确定”);
okBtn.getStyleClass().add(“终端按钮”);
okBtn.setPrefWidth(120);
okBtn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
状态=1;
Dialog.hide();
}
});
按钮取消BTN=新按钮(“取消”);
cancelBtn.getStyleClass().add(“终端按钮”);
取消BTN.setPrefWidth(120);
cancelBtn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
状态=-1;
Dialog.hide();
}
});
HBox BTN容器=新的HBox(10);
BTN容器设置对齐(位置居中\右侧);
btnContainer.getChildren().addAll(okBtn,cancelBtn);
VBox根=新的VBox(30);
root.setStyle(“-fx背景色:白色;”);
根。设置填充(新插图(20));
root.setPrefWidth(Main.WIDTH-200);
root.getChildren().addAll(标签,btnContainer);
组容器=新组();
container.getChildren().add(根目录);
Main.PAGE.getChildren().add(黑色);
Main.PAGE.getChildren().add(容器);
返回状态;
}
您可以看看hmm。。我的第一个猜测(非常原始!)是将runlater与倒计时闩锁结合使用,但这里的快速搜索揭示了Android的问题。。没主意了,对不起,你能告诉我更多关于倒计时的事吗?这是什么?如果我没记错的话(现在没时间挖掘源代码),这是通过阻止FX应用程序线程并启动一个嵌套的FX应用程序线程(即,显示对话框的Platform.isFXApplicationRead()
返回true
)来完成的。这深入到了非公共API中。如果您无法使用现有的对showAndWait
的调用,我强烈建议您找到另一种解决方案:例如在对话框隐藏时设置BooleanProperty
,并使用该属性注册一个侦听器,以执行隐藏时需要执行的代码。dialog.showAndWait()
内部使用调用com.sun.javafx.tk.Toolkit.getToolkit().enterNestedEventLoop()
和com.sun.javafx.tk.Toolkit.getToolkit().exitNestedEventLoop()
您可以查看hmm。。我的第一个猜测(非常原始!)是将runlater与倒计时闩锁结合使用,但这里的快速搜索揭示了Android的问题。。没主意了,对不起,你能告诉我更多关于倒计时的事吗?这是什么?如果我没记错的话(现在没时间挖掘源代码),这是通过阻止FX应用程序线程并启动一个嵌套的FX应用程序线程(即,显示对话框的Platform.isFXApplicationRead()
返回true
)来完成的。这深入到了非公共API中。如果您无法使用现有的对showAndWait
的调用,我强烈建议您找到另一种解决方案:例如在对话框隐藏时设置BooleanProperty
,并使用该属性注册一个侦听器,以执行隐藏时需要执行的代码。dialog.showAndWait()
内部使用调用com.sun.javafx.tk.Toolkit.getToolkit().enterNestedEventLoop()
和com.sun.javafx.tk.Toolkit.getToolkit().exitNestedEventLoop()