2

情况1:

JFileChooser myFileChooser;
myFileChooser.showOpenDialog(this); //this = parent Component

案例二:

JFileChooser myFileChooser;
myFileChooser.showOpenDialog(null);

这两种情况有什么实际区别?

4

2 回答 2

6

查看 JFileChooser 的 Javadoc

parent 参数决定了两件事:打开对话框所依赖的框架和放置对话框时外观应该考虑的组件。如果父对象是 Frame 对象(例如 JFrame),则对话框取决于框架,并且外观相对于框架定位对话框(例如,在框架上居中)。如果父级是组件,则对话框取决于包含该组件的框架,并且相对于该组件定位(例如,位于该组件的中心)。如果parent 为 null,则对话框不依赖于可见窗口,并且它被放置在与外观相关的位置,例如屏幕中心。

在内部,它尝试使用父级使用 this 获取一个窗口JOptionPane.getWindowForComponent(parent)。反过来检查 parent 是否为空......

if (parentComponent == null)
    return getRootFrame();

如果它为空,则将根级别框架作为父容器返回。使用内部SwingUtilities.getSharedOwnerFrame(). javadocSwingUtilities.getSharedOwnerFrame()说...

返回一个工具包私有的、共享的、不可见的框架,作为使用空所有者创建的 JDialogs 和 JWindows 的所有者。

于 2010-12-28T11:15:15.743 回答
1

您可以指定父级来确定对话框与哪个组件相关。它将确定对话框的位置(居中,相对于父级)。我还猜想对话框将是模态的,从而阻塞了父窗口。

如果指定null,则显示的对话框将不属于任何组件,我猜它会显示在屏幕的左上角或中心(最后一个更可能发生,我没有测试过)。

跳这有帮助!

于 2010-12-28T11:18:45.367 回答