# jFileChooser showSaveDialog, dateinamen werden mit pfadnamen überschrieben beim navigieren



## alderwaran (22. Jul 2010)

hi zusammen,

ich habe ein problem mit dem verhalten von jfilechooser.
wie im code unten angegeben setze ich die parameter für das verzeichnis in dem das browsen starten soll ("c:/") und den zu verwendenden dateinamen für die zu speichernde datei ("XAXA").
wenn ich das beispielprogramm starte funktioniert das auch soweit - allerdings wird der vorgegebene dateiname überschrieben sobald ich mit der maus in der liste navigiere... wenn ich z.b. den pfad "Programme" doppelklicke um in diesen ordner zu wechseln wird untern unter "dateiname" der eintrag "XAXA" durch "c:\Programme" ersetzt. das passiert übrigens NICHT wenn ich über die obere dropdown-liste einen pfad auswähle.

was ich gerne hätte wäre den dateinamen vorzugeben, den benutzer einen zielpfad auswählen zu lassen und nur wenn der benutzer das feld "dateiname:" anwählt ihm die möglichkeit zu geben den dateinamen abzuändern (oder bei doppelklick auf einen bestehenden dateinamen in der liste diesen für die datei zu übernehmen... aber das wäre nur ein nice-to-have)

gibts eine möglichkeit dieses feld vor solchen "falschen" updates zu schützen?

```
package javaapplication4;

import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class SaveFileDialog extends javax.swing.JPanel{

    private String savePath;
    private String lastSelectedPath = null;

    public static void main(String[] args) {
        SaveFileDialog sd = new SaveFileDialog(null);
    }

    public String getSavePath() {
        return this.savePath;
    }

    public SaveFileDialog(String _lastSelectedPath) {
        this.lastSelectedPath = _lastSelectedPath;
        this.savePath = null;
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            SwingUtilities.updateComponentTreeUI(this);
        } catch (Exception ex) {
            //ex.printStackTrace();
        }
        initComponents();
        if (this.lastSelectedPath != null) {
            jFileChooser1.setCurrentDirectory(new File(this.lastSelectedPath));
        } else {
            jFileChooser1.setCurrentDirectory(null);

        }
        jFileChooser1.setCurrentDirectory(new File("c:/"));
        jFileChooser1.setSelectedFile(new File("XAXA"));
        jFileChooser1.showSaveDialog(this);
    }

    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jFileChooser1 = new javax.swing.JFileChooser();

        jFileChooser1.setCurrentDirectory(null);
        jFileChooser1.setDialogTitle("Speichern"); // NOI18N
        jFileChooser1.setDialogType(javax.swing.JFileChooser.SAVE_DIALOG);
        jFileChooser1.setFileSelectionMode(javax.swing.JFileChooser.FILES_AND_DIRECTORIES);
        jFileChooser1.setMinimumSize(new java.awt.Dimension(450, 260));
        jFileChooser1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jFileChooser1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jFileChooser1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jFileChooser1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
    }// </editor-fold>

    private void jFileChooser1ActionPerformed(java.awt.event.ActionEvent evt) {                                              
        if (evt.getActionCommand().equalsIgnoreCase(JFileChooser.APPROVE_SELECTION)) {
            this.savePath = jFileChooser1.getSelectedFile().getPath();
            String name = jFileChooser1.getSelectedFile().getName();
        }
    }                                             

    // Variables declaration - do not modify
    private javax.swing.JFileChooser jFileChooser1;
    // End of variables declaration
}
```


----------



## hansmueller (23. Jul 2010)

Hallo,

setze das

```
jFileChooser1.setFileSelectionMode(javax.swing.JFileChooser.FILES_AND_DIRECTORIES);
```
auf

```
jFileChooser1.setFileSelectionMode(javax.swing.JFileChooser.FILES_ONLY);
```

Dann kannst du durch die Ordnerstruktur navigieren, ohne das sich der Dateiname ändert. Der Dateiname wird nur geändert, wenn du auf eine Datei klickst, aber nicht, wenn du auf einen Ordner klickst.

MfG
hansmueller


----------

