JFileChooser und JList

Bassip

Mitglied
Hallo,
ich versuche eine Art Liste zu erstellen mit Dateinamen, die man beim JFileChooser auswählt.
Leider wird in meinem Panel nichts angezeigt, aber seht selbst:

Java:
public static void main(String[] args) {

        JFrame meinFrame = new JFrame();
        JPanel meinPanel = new JPanel(new BorderLayout());
        JFileChooser chooser = new JFileChooser();  
        
        meinFrame.setSize(400, 300);
        meinFrame.setVisible(true);
        meinFrame.setLocationRelativeTo(meinPanel);
        meinFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        
       chooser.showOpenDialog(null);  
               
        String[] dateiliste = {chooser.getName()};    //gibt den Dateinamen als String wieder
        JList meineListe = new JList(dateiliste);
        meinPanel.add(meineListe);
        meinFrame.add(meinPanel);
        meineListe.setVisible(true);
        meinPanel.setVisible(true);
Danke im Voraus für die Hilfe.
 
Wie soll denn auch etwas angezeigt werden, wenn der FileChooser Dialog noch gar nicht durchlaufen ist? Es zeigt was an: LEER 😉

Mach den Dialog als Methode dannach, dann gib den Wert zurück und aktualisier das Panel -- ZACK es klappt.

LG Andy
 
Ich habe jetzt den FileChooser in eine Methode verlagert und sie unterhalb des Panels eingefügt. Leider wird immer noch nichts angezeigt, trotz meinPanel.repaint();.

Mein vollständiger Quellcode:
Java:
    public static void main(String[] args) {

        JFrame meinFrame = new JFrame();
        JPanel meinPanel = new JPanel();

        meinFrame.setSize(400, 300);
        meinFrame.setVisible(true);
        meinFrame.setLocationRelativeTo(meinPanel);
        meinFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);

       JList meineListe = listeVomChooser();

        meinPanel.add(meineListe);
        meinFrame.add(meinPanel);
        meineListe.setVisible(true);
        meinPanel.setVisible(true);
        meinPanel.repaint();

    }

    public static JList listeVomChooser() {
        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        String[] dateiliste= {chooser.getName()};
        JList meineListe = new JList(dateiliste);
        return meineListe;
    }

Irgendwie muss doch das FileChooser Objekt gebaut werden, damit ich eine JList erstellen kann. Selbst wenn ich erst das Panel dem Frame hinzufüge und es aktualisiere, und danach die JList baue und einfüge, wird nichts angezeigt.
 
Java:
    public static void main(String[] args) {

        JFrame meinFrame = new JFrame();
        JPanel meinPanel = new JPanel();

        meinFrame.setSize(400, 300);
        meinFrame.setVisible(true);

}

Code:
setVisible(true)
sorgt doch dafür das die Element angezeigt werden. Warum willst du den JFrame anzeigen lassen bevor du überhaupt Elemente hinzugefügst hast? Normal ruft man diese Methode am Ende auf wenn alles initialisiert ist usw.

So wie du den JFileChooser aufrufst blockiert dieser die weitere Ausführung vom restlichen Code. Warum lässt du ihn denn nicht erst erscheinen wenn man einen Button lickt oder so ähnlich?
 
Okay, habe das
Java:
meinFrame.setVisible(true);
verlegt und einen Button eingefügt, der, sobald man draufklickt, die Methode mit der JList-Erzeugung ausführt.
Leider immer noch nichts...

Wer sich meinen Code antun möchte:
Java:
public abstract class Test implements ActionListener {

    JFrame meinFrame;
    JPanel meinPanel;
    JButton meinButton;

    public static void main(String[] args) {

        JFrame meinFrame = new JFrame();
        JPanel meinPanel = new JPanel();
        final JButton meinButton = new JButton("Klick");

        meinFrame.setSize(400, 300);
        meinFrame.setLocationRelativeTo(meinPanel);
        meinFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);

        meinPanel.add(meinButton);
        meinButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (e.getSource() == meinButton) {
                    listeVomChooser();
                }
            }
            });

        JList meineListe = listeVomChooser();

        meinPanel.add(meineListe);
        meinFrame.add(meinPanel);
        meinPanel.setVisible(true);
        meineListe.setVisible(true);
        meinFrame.setVisible(true);
        meinPanel.repaint();

        }

    public static JList listeVomChooser() {
        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        String[] dateiliste = {chooser.getName()};
        JList meineListe = new JList(dateiliste);
        return meineListe;
    }

}
 
Ich habe jetzt 2 Freunde gefragt und scheinbar hat niemand eine Idee, woran es liegen könnte. Habe ich denn wirklich soviel Mist gebaut?
 
Die bisherigen Lösungsvorschläge gehen alle am eigentlichen Problem vorbei. Die unsichtbare JList kommt nicht durch einen Aufruf des JFileChoosers zur unpassenden Zeit. Es ist vollkommen schnuppe, ob der JFileChooser in derselben Funktion aufgrufen wird, in der auch der JFrame sichtbar gemacht wird, oder ob der Aufruf in einer Methode erfolgt, oder ob der Aufruf erst bei Klick eines JButtons erfolgt. Wesentlich ist nur, daß du erst dann die gewünschten Parameter vom JFileChooser abfragst und die in deine JLIst steckst, wenn er sichtbar gemacht wurde (was ja bereits in deinem ersten Posting der Fall war).

Das eigentliche Problem liegt daran, daß JFileChooser.getName() null zurückgibt. Du wolltest wahrscheinlich den Namen der vom JFileChooser ausgewählten Datei haben. Das geht mit einer Methode mit identischem Namen, aber einem zusätzlichen Parameter.
Versuch mal
Code:
chooser.getName(chooser.getSelectedFile())
.
Ausserdem:
1. Reihenfolge bei JFrames: a) anlegen, b)befüllen, c)layouten, d) sichtbar machen, Den call von setSize() kannst du dir sparen. Rufe stattdessen
Code:
meinFrame.pack()
auf und dann, ganz am Schluss,
Code:
meinFrame.setVisible(true)
2. JLists gehören normalerweise in eine JScollPane.
 

Zurück
Oben