JavaFX自定义对话框未居中

时间:2014-08-27 12:39:39

标签: java javafx dialog controlsfx

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

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

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

2 个答案:

答案 0 :(得分:1)

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

测试:

  • ControlsFX 8.0.6_20

我认为解决这个问题的最佳方法是使用“例外”对话框,并为“完整邮件”选项更改其视觉,使用区域(例外)。

在您提供的页面上,在较低级别的api上有一个link,您可以向下滚动到自定义对话框,在容器/舞台中封装整个自定义对话框,并使用主应用程序窗口作为父弹出窗口应该居中(或者只是屏幕的中心)。然后你可以让舞台没有装饰,并且与普通对话框没有任何视觉差异。

还有一个替代方案,我以前习惯使用jfxmessagebox库,你不会遇到中心问题。一切正常。用于摆动JOption窗格的类似用途。

答案 1 :(得分: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();