为啥 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中组件的构造函数中进行数据初始化?

为啥不以指定的延迟进行 ajax 调用

为啥 mxml 不支持组件构造函数?

为啥 Typescript 不以正确的方式支持函数重载?

为啥某些 Delphi 组件需要“AOwner: TComponent”来构造它们?

为啥使用 NGRX 而不是构造函数注入服务?