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