JFileChooser embedded in a JPanel

自古美人都是妖i 提交于 2019-11-28 03:21:54

问题


I am writing a java program that needs a file open dialog. The file open dialog isn't difficult, I'm hoping to use a JFileChooser. My problem is that I would like to have a dual pane JFrame (consisting of 2 JPanels). The left panel would have a JList, and the right panel would have a file open dialog.

When I use JFileChooser.showOpenDialog() this opens the dialog box above all other windows, which isn't what I want. Is there any way to have the JFileChooser (or maybe another file selection dialog) display inside a JPanel and not pop-up above it?

Here is the code that I've tried, at this point it's very simplified. I'm only trying to get the JFileChooser to be embedded in the JPanel at this point.

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

I have also tried calling chooser.showOpenDialog with this and panel, but to no avail. Also, I have tried adding the JFileChooser directly to the frame. Both of the attempts listed above still have the JFileChooser pop up in front of the frame or panel (depending on which I add the JFileChooser to).


回答1:


JFileChooser extends JComponent and Component so you should be able to add it directly to your frame.

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



回答2:


To access the "buttons" in the file chooser, you will have to add an ActionListener to it:

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:


If you are adding the JFileChooser on the fly, you will need to call revalidate().

Steve's answer is correct. You can add a JFileChooser to other containers.




回答4:


To Johannes: thanks for your useful snippet.

Instead of "ApproveSelection" and "CancelSelection" I used the defined constants JFileChooser.APPROVE_SELECTION and JFileChooser.CANCEL_SELECTION



来源:https://stackoverflow.com/questions/259575/jfilechooser-embedded-in-a-jpanel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!