为啥 JDialog 构造函数不以指定的所有者组件为中心?
Posted
技术标签:
【中文标题】为啥 JDialog 构造函数不以指定的所有者组件为中心?【英文标题】:Why doesn't the JDialog constructor center itself over the specified owner component?为什么 JDialog 构造函数不以指定的所有者组件为中心? 【发布时间】:2012-01-18 12:00:55 【问题描述】:使用this JDialog
构造函数,我在其中指定拥有的JFrame
实例,我发现JDialog
不在其所有者组件的中心。相反,它出现在左上角。为了让它工作,我必须在 setLocationRelativeTo
方法中指定所有者组件。
这是为什么?
工作环境:
双显示器 Windows XP 操作系统 JDK 1.6.0_29请注意,对于JFrame
实例,我使用setLocationRelativeTo(null)
。
【问题讨论】:
如果你设置setModalityType(ModalityType.APPLICATION_MODAL);
而不是 setModal(true)
发生了什么???,
@mKorbel,不会改变任何事情..
如何插入显示器 1) 带两个 DVI 的 HW-GPU,2) 带 VGA 和 DVI 的 HW-GPU,3) 带两个 DVI 的板载 GPU,2) 带两个 DVI 的板载 GPU VGA 和 DVI,5) 具有多个 GPU 内核的专业 GPU,6) 在某些 SLI 模式下链接两个或更多 GPU,7) 未修复的驱动程序,很久以前安装的非常旧的 GPU 驱动程序,8) 另一个 ZOO
如需尽快获得更好的帮助,请发帖SSCCE。
因为居中组件是如此普遍 嗯,并不完全相信它是:一个行为良好的用户界面会在用户最方便的位置打开对话框。通常,这是用户上次关闭它时它所在的位置。因此,仅在第一次打开操作(应用程序第一次运行)时选择打开位置是合适的。所有其他人都将使用存储的位置
【参考方案1】:
JDialog
我觉得很笼统。如果您想要快速弹出常规对话框的方法,请查看JOptionPane
。它具有轻松创建居中JDialog
组件或立即弹出阻止对话框窗口的方法。
例如
JDialog dialog = new JOptionPane("message", JOptionPane.INFORMATION_MESSAGE)
.createDialog(jFrameOwner, "window title");
虽然您可能真的很想看看JOptionPane.showXxxDialog
静态方法。非常好用又方便。
您不妨看看dialog tutorial。 java web start 应用程序生成的所有对话框都可以使用JOptionPane
类生成。
【讨论】:
【参考方案2】:听起来像是一个设计决定。有时您希望为对话框提供对其父级的引用,而不是将位置居中。
【讨论】:
你完全正确。我想这只是我的一个糟糕的假设。但是您会认为,由于居中组件如此普遍,它们将为我们提供方便的构造函数,您知道吗? :D @Крысa: 是的,如果它默认居中对话框,则几乎不需要编码,如果需要,可以使用方法设置位置。 @Крысa:如果没有调用setLocationRelativeTo()
,它可能被定位为操作系统默认值或外观默认值。 (例如顶部中心)
也许它被定位为操作系统默认值或外观默认值 - 玩猜谜游戏还是您在上下文中看到的?获胜时不会,始终位于独立于 LAF 的屏幕顶部前导角以上是关于为啥 JDialog 构造函数不以指定的所有者组件为中心?的主要内容,如果未能解决你的问题,请参考以下文章
为啥不应该在Angular中组件的构造函数中进行数据初始化?