JFileChooser嵌入到JPanel中。

8

我正在编写一个需要文件打开对话框的Java程序。 文件打开对话框并不难,我希望使用JFileChooser。 我的问题是,我想要一个双面板JFrame(由两个JPanels组成)。 左侧面板将有一个JList,右侧面板将有一个文件打开对话框。

当我使用JFileChooser.showOpenDialog()时,这会在所有其他窗口上方打开对话框,这不是我想要的。 有没有办法让JFileChooser(或者可能是其他文件选择对话框)显示在JPanel内而不是弹出在其上方?

以下是我尝试过的代码,目前非常简化。 我现在只想在JPanel中嵌入JFileChooser

public class JFC extends JFrame{
    public JFC()
    {
        setSize(800,600);

        JPanel panel= new JPanel();

        JFileChooser chooser = new JFileChooser();
        panel.add(chooser);

        setVisible(true);

        chooser.showOpenDialog(null);
    }

    public static void main(String[] args)
    {
        JFC blah = new JFC();
    }
}

我还尝试使用thispanel调用chooser.showOpenDialog,但没有成功。另外,我还尝试直接将JFileChooser添加到框架中。但以上两种尝试仍然导致JFileChooser弹出在框架或面板的前面(取决于我将JFileChooser添加到哪里)。

4个回答

11

JFileChooser是扩展了JComponent和Component的类,因此您应该能够直接将其添加到您的窗口中。

JFileChooser fc = ...
JPanel panel ...
panel.add(fc);

5

要访问文件选择器中的"按钮",您需要向其添加一个ActionListener:

fileChooser.addActionListener(this);
[...]

public void actionPerformed(ActionEvent action)
{
    if (action.getActionCommand().equals("CancelSelection"))
    {
        System.out.printf("CancelSelection\n");
        this.setVisible(false);
        this.dispose();
    }
    if (action.getActionCommand().equals("ApproveSelection"))
    {
        System.out.printf("ApproveSelection\n");
        this.setVisible(false);
        this.dispose();
    }
}

3
如果您正在动态添加JFileChooser,则需要调用revalidate()。
Steve的回答是正确的。您可以将JFileChooser添加到其他容器中。

2
给 Johannes:感谢你有用的代码片段。
我使用定义好的常量JFileChooser.APPROVE_SELECTIONJFileChooser.CANCEL_SELECTION,而不是"ApproveSelection"和"CancelSelection"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接