【发布时间】:2009-08-12 11:13:18
【问题描述】:
我一直在使用类似于以下的代码来显示对话框:
JOptionPane.showMessageDialog(JOptionPane.getFrameForComponent(this), … yada
但是,我现在认为这“更正确”:
JOptionPane.showMessageDialog(getRootPane(), … yada
人们喜欢/推荐什么?
【问题讨论】:
我一直在使用类似于以下的代码来显示对话框:
JOptionPane.showMessageDialog(JOptionPane.getFrameForComponent(this), … yada
但是,我现在认为这“更正确”:
JOptionPane.showMessageDialog(getRootPane(), … yada
人们喜欢/推荐什么?
【问题讨论】:
两者都不是“更正确的”——这取决于你想要什么效果。来自JOptionPane JavaDocs -
parentComponent :定义要成为此对话框的父级的组件。它有两种使用方式:包含它的 Frame 用作对话框的 Frame 父级,其屏幕坐标用于放置对话框。通常,对话框位于组件的正下方。该参数可以为null,此时默认Frame作为父级,对话框将在屏幕上居中(取决于L&F)。
在您的情况下,您希望对话框以框架为中心 - JOptionPane.getFrameForComponent(component) 或 SwingUtilities.getWindowAncestor(component) 从任何组件工作; getRootPane() 仅适用于 RootPaneContainer(即可能是 JFrame),您不妨在该上下文中使用“this”。
【讨论】:
如果您要扩展JFrame 或JDialog,例如,您可以只使用this 作为参数:
JOptionPane.showMessageDialog(this, ...);
【讨论】: