我正在编写一个需要文件打开对话框的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();
    }
}

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

有帮助吗?

解决方案

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

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

其他提示

要访问“按钮”,在文件选择器中,您必须向其添加一个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();
    }
}

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

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

致约翰内斯:感谢你提供了有用的片段。

而不是“ApproveSelection”和“取消选择”我使用了已定义的常量 JFileChooser.APPROVE_SELECTION JFileChooser.CANCEL_SELECTION

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top