JavaFX 8创建未修饰的TextInputDialog,该对话框在全屏阶段显示为模态
我有一个全屏的主应用程序阶段,希望在顶部显示一个文本输入对话框,带有模式样式(即,在向该阶段提供其他输入之前,必须先取消该对话框) 如果我将所有者设置为stage,将样式设置为UTILITY,那么它就可以工作 但是如果我想删除装饰(通过将样式设置为“未装饰”),那么对话框根本不会出现!我只能通过而不是设置父项使其显示 如果我没有设置父级,对话框会出现在舞台顶部,但如果我单击应用程序上的其他任何位置,它就会消失在全屏舞台后面 如何创建一个在全屏舞台上具有模态行为的未修饰对话框JavaFX 8创建未修饰的TextInputDialog,该对话框在全屏阶段显示为模态,java,javafx,Java,Javafx,我有一个全屏的主应用程序阶段,希望在顶部显示一个文本输入对话框,带有模式样式(即,在向该阶段提供其他输入之前,必须先取消该对话框) 如果我将所有者设置为stage,将样式设置为UTILITY,那么它就可以工作 但是如果我想删除装饰(通过将样式设置为“未装饰”),那么对话框根本不会出现!我只能通过而不是设置父项使其显示 如果我没有设置父级,对话框会出现在舞台顶部,但如果我单击应用程序上的其他任何位置,它就会消失在全屏舞台后面 如何创建一个在全屏舞台上具有模态行为的未修饰对话框 // This wo
// This works, but is decorated
TextInputDialog dialog = new TextInputDialog();
dialog.initOwner(stage);
dialog.initStyle(StageStyle.UTILITY);
dialog.showAndWait();
我已经做了一个完整的例子,这似乎是你尝试过的东西,但不起作用。在我的情况下,它工作得很好。窗口显示全屏,对话框出现在中间,没有窗口装饰
public class DialogCheck extends Application{
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("text field");
BorderPane root = new BorderPane();
Button b = new Button("dialog");
root.setCenter(b);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.setFullScreen(true);
primaryStage.show();
b.setOnAction((evt)->{
TextInputDialog dialog = new TextInputDialog();
dialog.initOwner(primaryStage);
dialog.initStyle(StageStyle.UNDECORATED);
dialog.showAndWait();
});
}
}
注意,这是osx上的Java11和OpenJFX11
对于某些添加的调试:
dialog.setOnShown( sevt ->{
System.out.println("showing: " + dialog.isShowing() + ", " + dialog.getX());
TextField field = dialog.getEditor();
field.requestFocus();
System.out.println(field.isFocused());
});
还要注意使用“showAndWait”与“show”之间的区别
对话框。显示并等待
输出:
显示:错误,南。假的
对话框。显示
输出:
显示:正确,621.0真的
我已经做了一个完整的例子,这似乎是你尝试过的东西,但不起作用。在我的情况下,它工作得很好。窗口显示全屏,对话框出现在中间,没有窗口装饰
public class DialogCheck extends Application{
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("text field");
BorderPane root = new BorderPane();
Button b = new Button("dialog");
root.setCenter(b);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.setFullScreen(true);
primaryStage.show();
b.setOnAction((evt)->{
TextInputDialog dialog = new TextInputDialog();
dialog.initOwner(primaryStage);
dialog.initStyle(StageStyle.UNDECORATED);
dialog.showAndWait();
});
}
}
注意,这是osx上的Java11和OpenJFX11
对于某些添加的调试:
dialog.setOnShown( sevt ->{
System.out.println("showing: " + dialog.isShowing() + ", " + dialog.getX());
TextField field = dialog.getEditor();
field.requestFocus();
System.out.println(field.isFocused());
});
还要注意使用“showAndWait”与“show”之间的区别
对话框。显示并等待
输出:
显示:错误,南。假的
对话框。显示
输出:
显示:正确,621.0真的
我想你会通过一个例子得到更好的结果。当然,添加了一些我正在尝试的例子。你能提供一个而不仅仅是几个片段吗?我无法在Windows 10上重现这个问题,至少在使用JavaFX 14时是如此(还没有尝试使用8)。我认为通过一个示例,您会得到更好的结果。当然,添加了一些我正在尝试的示例。您能提供一个而不是几个片段吗?我无法在Windows 10上重现这个问题,至少在使用JavaFX14时是这样(还没有尝试过8)。我想知道这是一个bug,还是需要其他东西才能让它工作。当我点击按钮时,没有对话框出现,但是按钮没有响应,因此对话框一定出现在后台,并且仍然阻止其他输入。我怀疑这是一个bug。我也同意你的评估,对话框已经显示,但它在另一个窗口后面。我添加了一些东西来帮助调试。也许请求焦点有助于将对话框拉到最前面,或者使用show而不是showAndWait可能值得检查一下是否阻塞了平台线程。不应该,但可能值得检查。CentOS 6上的JavaFX 8这不起作用。我想知道这是一个bug,还是需要其他东西才能让它工作。当我点击按钮时,没有对话框出现,但是按钮没有响应,因此对话框一定出现在后台,并且仍然阻止其他输入。我怀疑这是一个bug。我也同意你的评估,对话框已经显示,但它在另一个窗口后面。我添加了一些东西来帮助调试。也许请求焦点有助于将对话框拉到最前面,或者使用show而不是showAndWait可能值得检查一下是否阻塞了平台线程。不应该,但可能值得检查一下。