8

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

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

这是我尝试过的代码,此时它非常简化。我只是想让JFileChooser嵌入在JPanel这一点上。

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();
    }
}

我也试过chooser.showOpenDialogthisand打电话panel,但无济于事。另外,我尝试将其JFileChooser直接添加到框架中。上面列出的两种尝试仍然JFileChooser在框架或面板前面弹出(取决于我添加JFileChooser到哪个)。

4

4 回答 4

11

JFileChooser 扩展了 JComponent 和 Component,因此您应该能够将它直接添加到您的框架中。

JFileChooser fc = ...
JPanel panel ...
panel.add(fc);
于 2008-11-03T18:58:57.273 回答
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();
    }
}
于 2008-11-05T09:41:44.697 回答
3

如果您要即时添加 JFileChooser,则需要调用 revalidate()。

史蒂夫的回答是正确的。您可以将 JFileChooser 添加到其他容器。

于 2008-11-03T19:18:00.870 回答
2

致约翰内斯:感谢您的有用片段。

而不是“ApproveSelection”和“CancelSelection”我使用定义的常量JFileChooser.APPROVE_SELECTIONJFileChooser.CANCEL_SELECTION

于 2009-09-10T16:34:15.780 回答