我一直在使用类似以下的代码来显示对话框:
JOptionPane.showMessageDialog(JOptionPane.getFrameForComponent(this), … yada
但是,我现在认为这是“更正确”:
JOptionPane.showMessageDialog(getRootPane(), … yada
人们更喜欢/推荐什么?
答案 0 :(得分:3)
两者都没有“更正确” - 它只取决于你想要的效果。来自JOptionPane JavaDocs -
parentComponent:定义要作为此对话框的父级的Component。它以两种方式使用:包含它的Frame用作对话框的Frame父级,其屏幕坐标用于放置对话框。通常,对话框位于组件的正下方。此参数可以为null,在这种情况下,默认的Frame用作父级,对话框将在屏幕上居中(取决于L& F)。
在您的情况下,您希望对话框以框架为中心 - JOptionPane.getFrameForComponent(组件)或SwingUtilities.getWindowAncestor(组件)可以在任何组件中工作; getRootPane()仅适用于RootPaneContainer(即可能是JFrame),您也可以在该上下文中使用“this”。
答案 1 :(得分:1)
例如,如果您要延长JFrame
或JDialog
,则只能使用this
作为参数:
JOptionPane.showMessageDialog(this, ...);