情况1:
JFileChooser myFileChooser;
myFileChooser.showOpenDialog(this); //this = parent Component
案例二:
JFileChooser myFileChooser;
myFileChooser.showOpenDialog(null);
这两种情况有什么实际区别?
情况1:
JFileChooser myFileChooser;
myFileChooser.showOpenDialog(this); //this = parent Component
案例二:
JFileChooser myFileChooser;
myFileChooser.showOpenDialog(null);
这两种情况有什么实际区别?
查看 JFileChooser 的 Javadoc
parent 参数决定了两件事:打开对话框所依赖的框架和放置对话框时外观应该考虑的组件。如果父对象是 Frame 对象(例如 JFrame),则对话框取决于框架,并且外观相对于框架定位对话框(例如,在框架上居中)。如果父级是组件,则对话框取决于包含该组件的框架,并且相对于该组件定位(例如,位于该组件的中心)。如果parent 为 null,则对话框不依赖于可见窗口,并且它被放置在与外观相关的位置,例如屏幕中心。
在内部,它尝试使用父级使用 this 获取一个窗口JOptionPane.getWindowForComponent(parent)
。反过来检查 parent 是否为空......
if (parentComponent == null)
return getRootFrame();
如果它为空,则将根级别框架作为父容器返回。使用内部SwingUtilities.getSharedOwnerFrame()
. javadocSwingUtilities.getSharedOwnerFrame()
说...
返回一个工具包私有的、共享的、不可见的框架,作为使用空所有者创建的 JDialogs 和 JWindows 的所有者。
您可以指定父级来确定对话框与哪个组件相关。它将确定对话框的位置(居中,相对于父级)。我还猜想对话框将是模态的,从而阻塞了父窗口。
如果指定null,则显示的对话框将不属于任何组件,我猜它会显示在屏幕的左上角或中心(最后一个更可能发生,我没有测试过)。
跳这有帮助!