JFileChooser showSaveDialog多次出现

时间:2015-02-16 03:26:30

标签: java

大家好日子。

我对JFileChooser的showSaveDialog有疑问。

此段代码用于导出CSV文件并将其转换为(.XLS)文件。这是我的代码的一部分:

在执行期间,每当我单击ExportButton,打开JFileChooser,我就可以选择保存转换后文件的目录。选择后,JFileChooser旁边的JTextField将获得保存文件的所需位置。

编辑:代码已修复!谢谢你的帮助! :)

else if(e.getSource() == ExportButton){
    JPanel panel = new JPanel(new GridLayout(0, 2));
    fc = new JFileChooser();
    fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    selection5 = new JTextField(20);
    selection5.setDocument(new JTextFieldLimit(200));
    selection5.setText("");

    panel.add(SaveButtonCSVFile);

    panel.add(selection5);
    boolean panelChecker = false;
    while(panelChecker == false){
        int result = JOptionPane.showConfirmDialog(null, panel, "Quesion",JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
        switch (result) {
            case JOptionPane.OK_OPTION:
            if(selection5.getText().trim().length() == 0){
                JOptionPane.showMessageDialog(this, "Please input valid filename");
                selection5.setText("");
            }
            else{
                if(selection5.getText().trim().contains(".xls")){
                     panelChecker = true;
                     exportFilename = selection5.getText().trim();
                      ....(other code)
                     exportFilename = null;
                     selection5.setText("");
                 }
                 else{
                   JOptionPane.showMessageDialog(this, "Please append .xls to your filename");
                 }
             }
             break;

             case JOptionPane.CANCEL_OPTION:
                  panelChecker = true;
             break;
             }
       }
}
else if (e.getSource() == SaveButtonCSVFile) {
       int returnVal = fc.showSaveDialog(DataUI.this);
       String temp = selection5.getText().trim();
       if (returnVal == JFileChooser.APPROVE_OPTION) {
          selection5.setText("");
          File file = fc.getSelectedFile();
          String suffix = ".xls";
          if(file.getAbsolutePath().contains(".xls")){
              suffix = "";
          }
          selection5.setText(file.getAbsolutePath() + suffix);
        } else {
            selection5.setText(temp);
          }
    }

我的问题是,如果我再次单击ExportButton导出我的数据,它会再次打开JFileChooser,并重复此过程,我能够理解它所形成的模式:

第一次点击导出结果到JFileChooser打开1次,第二次点击导出结果到JFileChooser打开2次,第三次点击导出结果到JFileChooser打开3次,依此类推。

如何让JFileChooser只打开一次?

提前谢谢你:)

1 个答案:

答案 0 :(得分:1)

每次按ActionListener

时,您都会将this SaveButtonCSVFile添加到ExportButton
SaveButtonCSVFile.addActionListener(this);

因此,第一次按ExportButtonSaveButtonCSVFile将有一个ActionListener,第二次,它会有两个,然后是三个......很快就会...

这是我更喜欢创建自定义内部类的原因之一,其中包含我需要添加的所有组件。根据需要创建新实例(或维护可以重复使用的单个引用)