我正在使用从这里找到的最新版本的 JavaFX 对话框:http: //code.makery.ch/blog/javafx-8-dialogs/。
我的问题很简单:如果我创建一个自定义对话框(或使用一个包含多行以 '\n' 分隔的文本的信息对话框),该对话框不会垂直居中于舞台窗口,因为似乎存在错误( ?) 对话的内容没有完全考虑到对话的中心。
还有其他人遇到过同样的问题吗?我并没有真正进行过很多调查,但是 Dialog 类似乎没有任何方法可以手动将对话框居中。
我正在使用从这里找到的最新版本的 JavaFX 对话框:http: //code.makery.ch/blog/javafx-8-dialogs/。
我的问题很简单:如果我创建一个自定义对话框(或使用一个包含多行以 '\n' 分隔的文本的信息对话框),该对话框不会垂直居中于舞台窗口,因为似乎存在错误( ?) 对话的内容没有完全考虑到对话的中心。
还有其他人遇到过同样的问题吗?我并没有真正进行过很多调查,但是 Dialog 类似乎没有任何方法可以手动将对话框居中。
我刚刚测试了这个,你是对的,我认为设计这些对话框的人在做这些对话框时并没有考虑到这一点。或者重点是在中心进行确认控制。您可以制作自己的实现,在其中检查字符串有多少行分隔符并相应地移动对话框
测试:
我认为解决此问题的最佳方法是使用异常对话框,并更改其用于异常的视觉使用区域,用于您的完整消息*选项。
在您提供的页面上有一个较低级别 api 的链接,您可以在其中向下滚动到自定义对话框,将整个自定义对话框封装在容器/舞台中,并使用主应用程序窗口作为弹出窗口应该居中的父级(或只是屏幕的中心) ).然后您可以使舞台不装饰,与正常对话不会有视觉差异。
您还有另一种选择,我以前使用过 jfxmessagebox 库,您不会遇到居中问题。一切正常。使用与摇摆 JOption 窗格类似/相同。
我应该更仔细地阅读文档。有一个 getWindow() 方法,它允许我手动将对话框居中。但是,我认为这应该是默认行为..这是一种快速而肮脏的方式来居中任何对话框:
public static final class Utils {
public static Stage getStage() {
return StageHelper.getStages().get(0);
}
public static void centre(Dialog dialog) {
Window window = dialog.getWindow();
Stage scene = Utils.getStage();
double x = scene.getX() + scene.getWidth() / 2 - window.getWidth() / 2;
double y = scene.getY() + scene.getHeight() / 2 - window.getHeight() / 2;
window.setX(x);
window.setY(y);
}
}
...
Platform.runLater(() -> { Utils.centre(dialog); }
dialog.show();