JFolderChooser.showOpenDialog 中的父组件是什么

Ste*_*gas 2 java components jfilechooser parent

情况1:

JFileChooser myFileChooser;
myFileChooser.showOpenDialog(this); //this = parent Component
Run Code Online (Sandbox Code Playgroud)

案例2:

JFileChooser myFileChooser;
myFileChooser.showOpenDialog(null);
Run Code Online (Sandbox Code Playgroud)

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

Fav*_*ius 6

查看 JFileChooser 的 Javadoc

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

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

if (parentComponent == null)
    return getRootFrame();
Run Code Online (Sandbox Code Playgroud)

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

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