JavaFX 使对话框像本机 windows 对话框一样闪烁
JavaFX Making dialog blink like native windows dialogs
我正在尝试在 JavaFX 中创建自定义对话框 window。
它只是加载一个 fxml,除了一件让我烦恼的装饰品之外,一切都很好。当我在对话框外单击时,它会正确地阻止交互 - 但对话框不会像 windows 中的本机对话框那样闪烁。我看到一个关于 C++ 和 QT 的问题,它与对话框父级有关,但遗憾的是我找不到任何关于 JavaFX 的信息。
我还没有在 javafx 中找到这个功能。但是对于其中的大部分内容,您可以使用 awt 库来完成。
查看 this post 了解更多信息。我希望您可以将它与 javafx 一起使用 though.I 尚未测试,但我对此表示怀疑。
编辑
我做了一些测试,并为我使用 Modality.WINDOW_MODALITY
作为舞台作品。 (当试图散焦时,它会发出声音,并且会闪烁。除非整个应用程序都散焦)。这是我用于辅助 windows.
的构造函数的一个简单示例
public SecondaryWindow(Window parent, String title, Modality modality, int width, int height)
{
// basic setup
this.stage = new Stage();
this.root = this.loadRoot();
this.stage.setScene(new Scene(root, width, heigth));
this.stage.setMinWidth(this.root.minHeight(-1));
this.stage.setMinHeight(this.root.minHeight(-1));
this.stage.initModality(modality);
this.stage.setTitle(title);
this.stage.initOwner(window);
// this will blink your application in the taskbar when unfocused.
this.stage.focusProperty().addListener(E -> this.stage.toFront());
// this is quickfix to prevent Alt+ F4 on a secondary screen.
this.stage.addEventFilter(KeyEvent.KEY_RELEASED, E -> {
if(E.getCode() == KeyCode.F4 && E.isAltDown())
{
E.consume();
this.ignoreCloseRequest = true;
}
});
this.stage.setOnCloseRequest(E -> {
if(!this.ignoreCloseRequest)
this.close();
E.consume();
this.ignoreCloseRequest = false;
});
}
我希望这对您的情况有所帮助。
我正在尝试在 JavaFX 中创建自定义对话框 window。 它只是加载一个 fxml,除了一件让我烦恼的装饰品之外,一切都很好。当我在对话框外单击时,它会正确地阻止交互 - 但对话框不会像 windows 中的本机对话框那样闪烁。我看到一个关于 C++ 和 QT 的问题,它与对话框父级有关,但遗憾的是我找不到任何关于 JavaFX 的信息。
我还没有在 javafx 中找到这个功能。但是对于其中的大部分内容,您可以使用 awt 库来完成。
查看 this post 了解更多信息。我希望您可以将它与 javafx 一起使用 though.I 尚未测试,但我对此表示怀疑。
编辑
我做了一些测试,并为我使用 Modality.WINDOW_MODALITY
作为舞台作品。 (当试图散焦时,它会发出声音,并且会闪烁。除非整个应用程序都散焦)。这是我用于辅助 windows.
public SecondaryWindow(Window parent, String title, Modality modality, int width, int height)
{
// basic setup
this.stage = new Stage();
this.root = this.loadRoot();
this.stage.setScene(new Scene(root, width, heigth));
this.stage.setMinWidth(this.root.minHeight(-1));
this.stage.setMinHeight(this.root.minHeight(-1));
this.stage.initModality(modality);
this.stage.setTitle(title);
this.stage.initOwner(window);
// this will blink your application in the taskbar when unfocused.
this.stage.focusProperty().addListener(E -> this.stage.toFront());
// this is quickfix to prevent Alt+ F4 on a secondary screen.
this.stage.addEventFilter(KeyEvent.KEY_RELEASED, E -> {
if(E.getCode() == KeyCode.F4 && E.isAltDown())
{
E.consume();
this.ignoreCloseRequest = true;
}
});
this.stage.setOnCloseRequest(E -> {
if(!this.ignoreCloseRequest)
this.close();
E.consume();
this.ignoreCloseRequest = false;
});
}
我希望这对您的情况有所帮助。