JFileChooser选择文件夹时出现问题

时间:2015-07-23 06:02:51

标签: java swing jfilechooser filechooser

最近我不得不在我的一个项目中使用filechooser。我用8个按钮做了一个框架,每个按钮打开一个文件回放器来设置一些字符串。

按钮的名称来自“RA1” - “RA8”。

所以这就是我所拥有的:

FileChooser方法:

public File openDataBrowser() {
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));

    fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

    int result = fileChooser.showOpenDialog(fileChooser);
    if (result == JFileChooser.APPROVE_OPTION) {
        File selectedFile = fileChooser.getSelectedFile();
        return selectedFile;
    }

    return new File("");
}

的ActionListener:

public void actionPerformed(ActionEvent e) {
    if (e.getSource().equals(RA1)) path1 = openDataBrowser().getAbsolutePath().replace("\\", "/");
    else if (e.getSource().equals(RA2)) path2 = openDataBrowser().getAbsolutePath().replace("\\", "/");
    else if (e.getSource().equals(RA3)) path3 = openDataBrowser().getAbsolutePath().replace("\\", "/");
    else if (e.getSource().equals(RA4)) path4 = openDataBrowser().getAbsolutePath().replace("\\", "/");
    else if (e.getSource().equals(RA5)) path5 = openDataBrowser().getAbsolutePath().replace("\\", "/");
    else if (e.getSource().equals(RA6)) path6 = openDataBrowser().getAbsolutePath().replace("\\", "/");
    else if (e.getSource().equals(RA7)) path7 = openDataBrowser().getAbsolutePath().replace("\\", "/");
    else if (e.getSource().equals(RA8)) path8 = openDataBrowser().getAbsolutePath().replace("\\", "/");
    else if (e.getSource().equals(finish)) {
        System.out.println(path1);
    }
}

所以首先我要选择文件,然后我希望将数据发送到另一个类,为了测试目的,我只想打印路径,但它不会真正起作用。当点击其中一个按钮时,会弹出filechooser,但点击“打开”后它会弹出另一个按钮。

这种情况发生了8次,之后,当我按下“完成”按钮时,我得到一个这样的输出:

C:/Users/edv.BORBET/Desktop/Roentgen Auswertung neu/RA8
C:/Users/edv.BORBET/Desktop/Roentgen Auswertung neu/RA8
C:/Users/edv.BORBET/Desktop/Roentgen Auswertung neu/RA8
C:/Users/edv.BORBET/Desktop/Roentgen Auswertung neu/RA8
C:/Users/edv.BORBET/Desktop/Roentgen Auswertung neu/RA8
C:/Users/edv.BORBET/Desktop/Roentgen Auswertung neu/RA8
C:/Users/edv.BORBET/Desktop/Roentgen Auswertung neu/RA8
C:/Users/edv.BORBET/Desktop/Roentgen Auswertung neu/RA8

我的文件夹的名称来自“RA1” - “RA8”。

我选择“RA8”作为最后一个文件夹。 现在问我的问题:

  • 为什么打印出 last 路径?
  • 为什么要打印此路径 8次
  • 我怎样才能让这件东西运转良好?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这可能会对您有所帮助:

我让一个ActionListener调用方法doSomething(),调用JButton作为参数

ActionListener al = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        doSomething((JButton)e.getSource());
    }
};

ActionListener将添加到所有JButtons

RA1.addActionListener(al);
RA2.addActionListener(al);
...
RA8.addActionListener(al);
finish.addActionListener(al);

doSomething()看起来像这样(缩短为3个按钮以保持干净):

protected void doSomething(JButton src) {
        if (src.equals(RA1)) path1 = openDataBrowser().getAbsolutePath().replace("\\", "/");
        else if (src.equals(RA2)) path2 = openDataBrowser().getAbsolutePath().replace("\\", "/");
        else if (src.equals(RA3)) path3 = openDataBrowser().getAbsolutePath().replace("\\", "/");
        else if (src.equals(finish)) {
             System.out.println(path1);
             System.out.println(path2);
             System.out.println(path3);
      }
}