Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置JFileChooser的位置_Java_Swing_Jfilechooser - Fatal编程技术网

Java 设置JFileChooser的位置

Java 设置JFileChooser的位置,java,swing,jfilechooser,Java,Swing,Jfilechooser,如何设置JFileChooser窗口的位置,我尝试了setLocation()和setBounds()方法,但都不起作用。从上看,似乎您无法控制对话框的放置位置 父参数确定两个事物:打开对话框依赖的框架和放置对话框时应该考虑外观和感觉的组件。如果父对象是帧对象(例如JFrame),则对话框取决于帧,并且“外观”相对于帧定位对话框(例如,位于帧的中心)。如果父对象是零部件,则对话框取决于包含零部件的框架,并相对于零部件定位(例如,位于零部件的中心)。如果父项为null,则对话框依赖于无可见窗口,并

如何设置
JFileChooser
窗口的位置,我尝试了
setLocation()
setBounds()
方法,但都不起作用。

从上看,似乎您无法控制对话框的放置位置

父参数确定两个事物:打开对话框依赖的框架和放置对话框时应该考虑外观和感觉的组件。如果父对象是帧对象(例如JFrame),则对话框取决于帧,并且“外观”相对于帧定位对话框(例如,位于帧的中心)。如果父对象是零部件,则对话框取决于包含零部件的框架,并相对于零部件定位(例如,位于零部件的中心)。如果父项为null,则对话框依赖于无可见窗口,并且它被放置在依赖于外观的位置,例如屏幕的中心


不幸的是,没有简单的方法可以做到这一点,因为无论何时显示选择器,内部createDialog方法都会将位置设置为父对象的中心

一种方法是子类化JFileChooser并重写createDialog方法,如下所示:

   static class MyChooser extends JFileChooser {
        protected JDialog createDialog(Component parent)
                throws HeadlessException {
            JDialog dlg = super.createDialog(parent);
            dlg.setLocation(20, 20);
            return dlg;
        }
    }

现在您可以直接使用MyChooser而不是JFileChooser。在上面的代码中,我已将位置硬编码为20,20,但您可以将其设置为任何您想要的位置。

您可以尝试将JFileChooser的父级设置为当前的JFrame/JPanel

JFrame parentToBe = new JFrame();
JFileChooser chooser = new JFileChooser();
int pathSelection = chooser.showSaveDialog(parentToBe);
这应该能奏效


你也可以参考。

-1这个答案是错误的。你试过了吗
JFileChooser
忽略
setLocation
方法,无论您设置的是哪一个父级。