0

我正在使用从这里找到的最新版本的 JavaFX 对话框:http: //code.makery.ch/blog/javafx-8-dialogs/

我的问题很简单:如果我创建一个自定义对话框(使用一个包含多行以 '\n' 分隔的文本的信息对话框),该对话框不会垂直居中于舞台窗口,因为似乎存在错误( ?) 对话的内容没有完全考虑到对话的中心。

还有其他人遇到过同样的问题吗?我并没有真正进行过很多调查,但是 Dialog 类似乎没有任何方法可以手动将对话框居中。

4

2 回答 2

1

我刚刚测试了这个,你是对的,我认为设计这些对话框的人在做这些对话框时并没有考虑到这一点。或者重点是在中心进行确认控制。您可以制作自己的实现,在其中检查字符串有多少行分隔符并相应地移动对话框

测试:

  • ControlsFX 8.0.6_20

我认为解决此问题的最佳方法是使用异常对话框,并更改其用于异常的视觉使用区域,用于您的完整消息*选项。

在您提供的页面上有一个较低级别 api 的链接,您可以在其中向下滚动到自定义对话框,将整个自定义对话框封装在容器/舞台中,并使用主应用程序窗口作为弹出窗口应该居中的父级(或只是屏幕的中心) ).然后您可以使舞台不装饰,与正常对话不会有视觉差异。

您还有另一种选择,我以前使用过 jfxmessagebox 库,您不会遇到居中问题。一切正常。使用与摇摆 JOption 窗格类似/相同。

于 2014-08-27T12:58:47.450 回答
0

我应该更仔细地阅读文档。有一个 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();
于 2014-08-27T13:21:35.450 回答