为什么JDialog会在setLocationRelativeTo()上“跳”?


1

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

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

结果在对话框出现在最左边的角落里,然后跳转到它的目标位置。 我做错了吗?

  0

会发生什么事,当你调用setLocationRelativeTo后包()()? 22 2月. 092009-02-22 11:36:20

  0

从相同的角落跳转,最终没有正确对准父框架(这是正确的)。看起来像一个错误,因为我只在内置的LaF上获得这种行为。 Synth按预期工作。 22 2月. 092009-02-22 12:44:38

  0

如何在setLocationRelativeTo()之前调用setVisible(false)? 22 2月. 092009-02-22 13:32:08

  0

真的很感谢你的努力。谢谢。不幸的是,这并没有改变一件事。我想我最终会在Win,Linux和Mac下检查不同的JDK,看看它们的行为是否相同。 22 2月. 092009-02-22 14:51:50

1

您能否提供一个工作示例和更多信息?例如,你在什么操作系统上测试? Swing在某些方面有些差异,例如没有家长的JDialogs在gnome面板中获取条目,但不在windows任务栏中获得条目,以及类似的东西。

其次,我猜想,在你调用setLocationRelativeTo之前,你的JDialog是可见的,也许通过在你注释掉的“无聊”部分内部。我建议,你打一个快速

System.out.println(isVisible()); 

到你的代码,只是setLocationRelativeTo之前,以防万一......

  0

你近距离:)。 重构对话框以扩展JDialog,我错过了show()调用。此方法先前向JOptionPane发起了一次调用,该进程又显示了一个JDialog并在重构期间被删除。但是随着类扩展JDialog,show()调用实际上将它设置为可见。 25 2月. 092009-02-25 20:56:55