【问题标题】:Why does JDialog 'jump' on setLocationRelativeTo()?为什么 JDialog 在 setLocationRelativeTo() 上“跳跃”?
【发布时间】:2009-02-22 11:10:13
【问题描述】:

有一个扩展 JDialog 的类。它完全在 EDT 上初始化(以防万一)。 现在,

public PropsDialog (JFrame parentFrame)
{
    super(parentFrame);
    // boring
    pack();
    setLocationRelativeTo(getParent());
    setVisible(true);
}

导致对话框出现在最左角,然后跳转到它的预期位置。 我做错了吗?

【问题讨论】:

  • 在 setLocationRelativeTo() 之后调用 pack() 会发生什么?
  • 从同一个角落跳跃,最终没有正确地居中于父框架(这是正确的)。似乎是一个错误,因为我只在内置的 LaFs 上得到了这种行为。合成器按预期工作。
  • 在 setLocationRelativeTo() 之前调用 setVisible(false) 怎么样?
  • 非常感谢您的努力。谢谢。不幸的是,这并没有改变任何事情。我想我最终会在 Win、Linux 和 Mac 下检查不同的 JDK,看看行为是否相同。

标签: java swing jdialog


【解决方案1】:

您能否提供一个工作示例和更多信息?例如,您在什么操作系统上进行测试? Swing 之间有一些差异,例如没有父级的 JDialogs 在 gnome 面板中获得条目,但在 Windows 任务栏和类似的东西中没有。

其次,我猜想,在调用 setLocationRelativeTo 之前,您的 JDialog 是可见的,可能是在您注释为“无聊”的部分中。我建议,你打一个快速的

System.out.println(isVisible());

进入你的代码,就在 setLocationRelativeTo 之前,以防万一......

【讨论】:

  • 你很亲密:)。重构对话框以扩展 JDialog,我错过了对它的 show() 调用。此方法之前触发了对 JOptionPane 的调用,该调用又显示了一个 JDialog 并在重构期间被删除。但是由于类现在扩展了 JDialog,show() 调用实际上将它设置为可见。
猜你喜欢
  • 2015-09-09
  • 2015-09-06
  • 1970-01-01
  • 2015-11-18
  • 2022-09-23
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多