# FileChooser - Datei tatsächlich öffnen



## schneffi (24. Feb 2009)

Ich hab das Thema in noch keinem anderen Forum gefunden, deshalb nochmal direkt ein neues aufgemacht, hoffe das ist okay 

Ich hab ein Problem mit dem FileChooser. Den einzubinden ist ja kein Problem, aber kann es sein, dass man damit nur den String des Dateinamens und den Pfad ausliest, die Datei aber gar nicht geöffnet wird?

Da brauch ich auch keinen FileChooser wenn die Datei eh nicht geöffnet wird. Oder hab ich da was vergessen?
Hab auch gegoogelt und im Sun Java Tutorial geschaut, aber da bin ich immer nur auf das gestoßen, was aber die Datei nicht geöffnet hat!

Hier der Code:

[HIGHLIGHT="Java"]package menuleiste;

import java.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;

public class MenuFrame extends JFrame {

    public MenuFrame()
    {
        initComponents();
    }

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

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        textfeld = new javax.swing.JTextField();
        jMenuBar1 = new javax.swing.JMenuBar();
        Datei = new javax.swing.JMenu();
        neu = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JSeparator();
        öffnen = new javax.swing.JMenu();
        awt = new javax.swing.JMenuItem();
        swing = new javax.swing.JMenuItem();
        speichern = new javax.swing.JMenuItem();
        bearbeiten = new javax.swing.JMenu();
        ende = new javax.swing.JMenu();
        tschuess = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("Gewählter Menueintrag:");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textfeld, javax.swing.GroupLayout.PREFERRED_SIZE, 339, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1))
                .addContainerGap(51, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(textfeld, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(228, Short.MAX_VALUE))
        );

        Datei.setText("Datei");

        neu.setText("neu");
        Datei.add(neu);
        Datei.add(jSeparator1);

        öffnen.setText("öffnen");

        awt.setText("AWT öffnen");
        awt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                awtActionPerformed(evt);
            }
        });
        öffnen.add(awt);

        swing.setText("Swing öffnen");
        öffnen.add(swing);

        Datei.add(öffnen);

        speichern.setText("speichern");
        speichern.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                speichernActionPerformed(evt);
            }
        });
        Datei.add(speichern);

        jMenuBar1.add(Datei);

        bearbeiten.setText("Bearbeiten");
        jMenuBar1.add(bearbeiten);

        ende.setText("Ende");

        tschuess.setText("Und tschuess...");
        tschuess.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tschuessActionPerformed(evt);
            }
        });
        ende.add(tschuess);

        jMenuBar1.add(ende);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    private void tschuessActionPerformed (java.awt.event.ActionEvent evt)                                         
    {                                             
        System.exit(0);
    }                                        

    // Von hier -->
    private void awtActionPerformed (java.awt.event.ActionEvent evt)                                    
    {                                        
        JFileChooser fc = new JFileChooser("F:/");
        if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
        {
            File file = fc.getSelectedFile();
            System.out.println(file.getAbsoluteFile());
        }
    }   // <-- bis hier                               

    private void speichernActionPerformed (java.awt.event.ActionEvent evt)                                          
    {                                              

    }                                         



    // Variables declaration - do not modify                     
    private javax.swing.JMenu Datei;
    private javax.swing.JMenuItem awt;
    private javax.swing.JMenu bearbeiten;
    private javax.swing.JMenu ende;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JMenuItem neu;
    private javax.swing.JMenuItem speichern;
    private javax.swing.JMenuItem swing;
    private javax.swing.JTextField textfeld;
    private javax.swing.JMenuItem tschuess;
    private javax.swing.JMenu öffnen;
    // End of variables declaration                   

}

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MenuFrame().setVisible(true);
            }
        });
    }

}[/HIGHLIGHT]


----------



## Geeeee (24. Feb 2009)

Der FileChooser ist eine "Hilfe" für den Anwender, damit er einfach Dateien auswählen kann. Du kannst dir _relativ_ sicher sein, dass z.B. beim Aufruf von http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFileChooser.html#getSelectedFile() eine gültige Datei zurückgeliefert wird. Diese kannst du dann weiterverarbeiten z.B. einlesen etc.
Als Beispiel, dass es sinnfrei wäre, dass der FileChooser dir die Datei "voröffnet": Was ist, wenn er dort was überschreiben soll / löschen. Dann bringts dir nischts, wenn er die öffnet. Außerdem was sollte eine GUI-Komponente mit einer Datei (File) anfangen?


----------



## schneffi (24. Feb 2009)

das ist schon klar, bloß WIE kann ich die Datei dann weiterverarbeiten?

Wenn ich mit dem FileChooser zb eine .jpg Datei öffnen will, also ein Bild, will ich, dass das Bild angezeigt wird und nicht, dass das Programm nur ne gültige Datei zurückgibt.

Es geht ja in erster Linie erstmal darum, dass ich mit dem Programm eine beliebige (oder auch nicht) Datei erstmal nur öffnen kann! Wie es dann weiter geht ist ja erstmal egal.

Also vielleiht gibts irgendwas, dass FileChooser die Datei weitergibt an eine Methode, die die Datei auch dann wirklich öffnet?


----------



## André Uhres (24. Feb 2009)

1234567890


----------



## Geeeee (24. Feb 2009)

Mal ein paar Ansätze:
Bild einlesen:

```
BufferedImage image = ImageIO.read(fileChooser.getSelectedFile());
```
In einem JPanel paintComponent überschreiben:

```
public void paintComponent(Graphics g) {
 g.drawImage(image, 0, 0, null);
}
```

Tada -> Bild (ohne jegliche Fehlermöglichkeiten zu berücksichtigen)


----------



## schneffi (24. Feb 2009)

vielen Dank für Eure Hinweise, das hat mich schon ein ganzes Stück weitergebracht.

Werd mir mal den Link von André anschauen


----------

