在JPanel中使用JFileChooser;如何获取用户的选择

3
默认的JFileChooser可以工作,但我不喜欢它弹出来的事实。我更愿意有一个GUI,所有操作都在其中进行。
现在,我确实成功了。下面的代码将FileChooser菜单放置在GUI内部,而不是弹出在其上方。
我遇到的困难是如何获取所选文件。当JFileChooser嵌入面板时,我知道适用于未嵌入面板的JFileChooser的代码,但我无法使其正常工作。
有人能帮忙吗?
附:我尝试查找,但Oracle虽然提到了将其放置在容器中的可能性,但没有提供示例。 http://download.oracle.com/javase/tutorial/uiswing/components/filechooser.html
import java.awt.*;
import javax.swing.*;

class SplitPane extends JFrame {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private JSplitPane splitPaneV;
    private JSplitPane splitPaneH;
    private JPanel panel1;
    private JPanel panel2;
    private JPanel panel3;

    public SplitPane() {
        setTitle("Split Pane Application");
        setBackground(Color.gray);

        JPanel topPanel = new JPanel();

        topPanel.setLayout(new BorderLayout());
        topPanel.setPreferredSize(new Dimension(700, 500));
        getContentPane().add(topPanel);

        // Create the panels
        createPanel1();
        createPanel2();
        createPanel3();

        // Create a splitter pane
        splitPaneV = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        topPanel.add(splitPaneV, BorderLayout.CENTER);

        splitPaneH = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
        splitPaneH.setLeftComponent(panel1);
        splitPaneH.setRightComponent(panel2);

        splitPaneV.setLeftComponent(splitPaneH);
        splitPaneV.setRightComponent(panel3);
    }

    public void createPanel1() {
        panel1 = new JPanel();
        panel1.setLayout(new BorderLayout());

        // Add some buttons
        panel1.add(new JButton("North"), BorderLayout.NORTH);
        panel1.add(new JButton("South"), BorderLayout.SOUTH);
        panel1.add(new JButton("East"), BorderLayout.EAST);
        panel1.add(new JButton("West"), BorderLayout.WEST);
        panel1.add(new JButton("Center"), BorderLayout.CENTER);

    }

    public void createPanel2() {
        panel2 = new JPanel();
        panel2.setLayout(new FlowLayout());

        panel2.add(new JButton("Button 1"));
        panel2.add(new JButton("Button 2"));
        panel2.add(new JButton("Button 3"));
    }

    public void createPanel3() {
        panel3 = new JPanel();
        panel3.setLayout(new BorderLayout());
        panel3.setPreferredSize(new Dimension(400, 100));
        panel3.setMinimumSize(new Dimension(100, 50));
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        fileChooser
                .setDialogTitle("Browse naar de  locatie waar je de gesorteerde bestanden wil zetten en klik op \"OPEN\"");
        panel3.add(fileChooser, BorderLayout.NORTH);
    }

    // this is where my quest starts. Now, I would like to work with the file
    // chosen...
    // for my ordinary 'popup' fileChoosers the code below works, so I tried the
    // code below

    // int returnVal = fileChooser.showOpenDialog(panel3);
    // if (returnVal == JFileChooser.APPROVE_OPTION)
    // fileName = fileChooser.getSelectedFile().getPath();
    // System.out.println(fileName);

    // but in this case it messes everything up..., after uncommenting I lose
    // the frames, and get a popup again...
    // anybody a suggestion how to actually get the users chosen file?

    public static void main(String args[]) {
        // Create an instance of the test application
        SplitPane mainFrame = new SplitPane();
        mainFrame.pack();
        mainFrame.setVisible(true);
    }
}

请注意,您可以向JFileChooser添加ActionListener,并且ActionEvent的getActionCommand将告诉您按下了哪个按钮。 - Hovercraft Full Of Eels
不知道那个。我进行了调整。你必须为此给我打'-1'分吗? - FMolivierH
是的,我做了,但是如果您更正您的帖子,-1可以被撤销。编辑:我刚刚删除了-1。 - Hovercraft Full Of Eels
我已经给你点赞了,因为你在这里的第一篇帖子中发布了一个不错的sscce,它允许轻松修改以展示解决方案。 - Hovercraft Full Of Eels
谢谢Hovercraft Full Of Eels。我相信我已经删除了所有内容...我想如果可能的话,我将通过回答其他人的问题来为这个社区做出贡献。 - FMolivierH
1个回答

7
请注意,您可以向JFileChooser添加ActionListener,以响应按钮按下事件。ActionEvent的getActionCommand将告诉您哪个按钮被按下。例如:
   public void createPanel3() {
      panel3 = new JPanel();
      panel3.setLayout(new BorderLayout());
      panel3.setPreferredSize(new Dimension(400, 100));
      panel3.setMinimumSize(new Dimension(100, 50));
      final JFileChooser fileChooser = new JFileChooser();
      fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
      fileChooser
               .setDialogTitle("Browse naar de  locatie waar je de gesorteerde bestanden wil zetten en klik op \"OPEN\"");
      panel3.add(fileChooser, BorderLayout.NORTH);
      fileChooser.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            if (e.getActionCommand().equals(JFileChooser.APPROVE_SELECTION)) {
               System.out.println("File selected: " + fileChooser.getSelectedFile());
            }
         }
      });
   }

Hovercraft先生满载着鳝鱼,这正是我所需要的。非常感谢。 - FMolivierH

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