JList aktualisiert nicht

flo1306

Mitglied
Hallo,
Ich habe vor Kurzem mit Java begonnen und stehe jetzt vor einem für mich unlösbarem Problem. Ich habe eine JList mit einem Defaultlistmodel. Die beiden sind durch .setModel verbunden und alles wunderbar. Wenn ich meinem DefaultListModel Elemente hinzufüge per .addElement('Element') wird es im DefaultListModel gespeichert (was ich mir bereits ausgeben habe lassen) aber in der JList nicht angezeigt. Hoffe einer von den Experten hier weiß mehr als ich. Danke schonmal im vorraus :).


Hier der Code:
Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JList;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Vector;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;

public class MAIN extends JFrame {

    private JPanel contentPane;
    private DefaultListModel<String> FachAuswahl = new DefaultListModel<String>();
    JTextField tfumbenennen;
    DefaultListModel<String> DateienList = new DefaultListModel<String>();
    JList<String> Dateien;

    /**
    * Launch the application.
    */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MAIN frame = new MAIN();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
    * Create the frame.
    */
    public MAIN() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 729, 493);
        setTitle("FileManager");
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
      
        Dateien = new JList<String>();
        Dateien.setFont(new Font("Tahoma", Font.PLAIN, 15));
        Dateien.setBounds(38, 46, 189, 98);
        Dateien.setModel(DateienList);


      
        JScrollPane scrollPane_1 = new JScrollPane();
        scrollPane_1.setBounds(38, 43, 192, 100);
        contentPane.add(scrollPane_1);
        scrollPane_1.setViewportView(Dateien);


      
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(454, 43, 191, 100);
        contentPane.add(scrollPane);
      
        JList<String> list = new JList<String>();
        list.setFont(new Font("Tahoma", Font.PLAIN, 15));
        list.setBounds(537, 384, -134, -89);
        list.setModel(FachAuswahl);
        scrollPane.setViewportView(list);
        FachAuswahl.addElement("Englisch");
        FachAuswahl.addElement("FIT");
        FachAuswahl.addElement("Deutsch");
        FachAuswahl.addElement("Geografie");
        FachAuswahl.addElement("Geschichte");
        FachAuswahl.addElement("Religion");
        FachAuswahl.addElement("Französisch");
        FachAuswahl.addElement("Latein");
        FachAuswahl.addElement("Physik");
        FachAuswahl.addElement("Musik");
        FachAuswahl.addElement("Mathematik");
        FachAuswahl.addElement("Biologie");
        FachAuswahl.addElement("Sonstiges");
      
        JLabel lblFachordnerZumVerschieben = new JLabel("Fach/Ordner ausw\u00E4hlen");
        lblFachordnerZumVerschieben.setBounds(455, 24, 151, 16);
        contentPane.add(lblFachordnerZumVerschieben);
      
        JButton btnCancel = new JButton("Cancel");
        btnCancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        btnCancel.setBounds(12, 384, 121, 34);
        contentPane.add(btnCancel);
      
        JButton button = new JButton("OK");
        button.setBounds(578, 384, 121, 34);
        contentPane.add(button);
      
        tfumbenennen = new JTextField();
        tfumbenennen.setBounds(454, 195, 152, 22);
        contentPane.add(tfumbenennen);
        tfumbenennen.setColumns(10);
      
        JLabel lblFileUmbenennen = new JLabel("File umbenennen");
        lblFileUmbenennen.setBounds(454, 173, 152, 16);
        contentPane.add(lblFileUmbenennen);
      
        JButton btnFileLschen = new JButton("File l\u00F6schen");
        btnFileLschen.setBounds(457, 246, 121, 25);
        contentPane.add(btnFileLschen);
      
        JButton btnSettings = new JButton("Settings");
        btnSettings.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Settings.main(null);
                }
        });
        btnSettings.setBounds(313, 389, 97, 25);
        contentPane.add(btnSettings);

        JLabel lblDateienInZielordner = new JLabel("Dateien in Zielordner");
        lblDateienInZielordner.setBounds(38, 24, 175, 16);
        contentPane.add(lblDateienInZielordner);
    }
  
    public void schreiben() {
        File verzeichnis;
        FileTest ft = new FileTest();
       verzeichnis = new File(ft.Path);
       for (String File: verzeichnis.list()) {
            DateienList.addElement(File);
    }
    }
}

Ps.: Sorry für so viel Code aber besser mehr als zu wenig :) und wundert euch nicht dass die Methode schreiben, um die es eigentlich geht, nicht aufgerufen wird. Das ist nicht der Fehler das passiert nämlich aus einer anderen Klasse und funktioniert wunderbar. Das betroffene DefaultListModel ist die DateienList und die JList Dateien. .revalidate und .repaint schon ausprobiert hilft alles nichts. Alle andere Foren schon durchforscht gibt auch Personen mit dem gleichen Problem, dort waren es aber andere Fehler als bei mir, da keiner der Lösungen bei mir geklappt hat.
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Wenn du ein lauffähiges Beispiel hier posten würdest, dann könnte man das auch ausführen und "ausbessern".
 

flo1306

Mitglied
Habe schnell ein Beispiel geschrieben: Das Programm soll im Prinzip den Inhalt eines Ordners in einer JList darstellen. Im Beispielprogramm klappts obwohl eigentlich kein Unterschied besteht...
Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.io.File;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JList;
import javax.swing.JScrollPane;

public class Test extends JFrame {

    private JPanel contentPane;
    private JList list;
    private JScrollPane scrollPane;
    private String Path = ".";
    private File f = new File(Path);
    private DefaultListModel model = new DefaultListModel();
    /**
    * Launch the application.
    */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test frame = new Test();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
    * Create the frame.
    */
    public Test() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
      
        scrollPane = new JScrollPane();
        scrollPane.setBounds(51, 32, 335, 194);
        contentPane.add(scrollPane);
      
        list = new JList();
        list.setBounds(51, 32, 335, 194);
        scrollPane.setViewportView(list);
        list.setModel(model);
        listschreiben();

    }
    public void listschreiben() {
        String[] dateinamen = new String[f.list().length];
        dateinamen = f.list();
        for (String namen : dateinamen) {
            model.addElement(namen);
        }
    }
  
}
 

Robat

Top Contributor
Du sagtest eingangs, dass die schreiben() Methode aus einer anderen Klasse aufgerufen wird. Wie rufst du diese Methode denn auf bzw wie kommst du in der Klasse an eine Instanz der Klasse MAIN. Denke mal das sich dort ein Fehler eingeschlichen hat.
 

flo1306

Mitglied
Ich bin mir ganz sicher dass es nicht am methodenaufruf liegt da wenn ich debugge und zb
Java:
System.out.println("Test");
wird das ohne probleme ausgegeben
 

Robat

Top Contributor
Das ist doch richtig oder
Nein. Du erzeugst in deiner main - Methode ein Objekt deiner Klasse MAIN. Da setzt du setVisible(true) - deine GUI wird also angezeigt.
Jetzt erstellst du in der anderen Klasse eine neue Instanz deiner Klasse und rufst darüber die Methode schreiben() auf. Davon kriegt deine eigentliche GUI aber nichts mit, da es ja ein anderes Objekt ist.

EDIT: Und natürlich bekommt die richtige Ausgabe beim Methodenaufruf. Aber wie oben bereits geschrieben hast du jetzt 2 Objekte deiner GUI wovon nur die erste sichtbar ist. Wenn du auf die unsichtbare GUI eine Methode aufrufst, bekommt die andere Instanz das nicht mit.
 

flo1306

Mitglied
Klappt leider noch nicht so ganz. Ich erzeuge in der Main Methode der Klasse MAIN eine Instanz der Klasse Main und mache sie sichtbar. In meiner anderen Klasse erzeuge ich ebenfalls eine Instanz und rufe schreiben auf. Klappt nicht, bin komplett verwirrt bei sowas simplen :(
 
Zuletzt bearbeitet:

Robat

Top Contributor
Das Ziel ist es auch nicht 2 Instanzen deiner Klasse zu haben. Das Ziel ist es eine Instanz zu erstellen und diese dann mittels Dependency Injektion in die andere Klasse zu bekommen.
 

flo1306

Mitglied
Tut mir leid aber Dependency Injection ist mir noch ein Fremdbegriff habe im Internet auch nichts gefunden was mich da wirklich weiterbringt magst dus mir erklären ? :D
 

Robat

Top Contributor
Einfach gesprochen ist es nichts anderes als eine Variable mittels (bspw) des Konstruktors in eine andere Klasse zu überführen. Hier mal ein kleines Beispiel:

Java:
public class A{
    private B b;
    public A(B b){
        this.b = b;
        // Hier kann jetzt mit b gearbeitet werden
    }
}

public class B {
     public static void main(String[] args){
           A a = new A(this);
      }
}
 

Robat

Top Contributor
Stimmt, da hab ich gar nicht dran gedacht.:oops:
Was lernen wir daraus: vorher noch mal nachdenken bevor man schreibt.

Hier noch mal ohne statischen Kontext.
Java:
public class A{
    private B b;
    public A(B b){
        this.b = b;
        // Hier kann jetzt mit b gearbeitet werden
    }
}

public class B {
     public B(){
           A a = new A(this);
      }
}
 

flo1306

Mitglied
Habe das hier:
Java:
FileTest filetest = new FileTest(this);
// FileTest ist der Name der Klasse welche die Methode schreiben ausführt
dem Konstruktor meiner MAIN Klasse hinzugefügt.
das hier
Java:
    private MAIN m;
    public FileTest(MAIN m) {
        this.m = m;
    }
habe ich meiner FileTest-Klasse hinzugefügt leider aber ohne Erfolg
 

flo1306

Mitglied
Hier die ganze FileTest Klasse:
Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import javax.swing.JOptionPane;
 public class FileTest {
    static String Path;
    private static MAIN m;
    public FileTest(MAIN m) {
        this.m = m;
    }
    public static void DirTest() {
    File f = new File("." + File.separator + "Path.txt");
    if (f.exists()) {
    try {
    BufferedReader in = new BufferedReader(new FileReader("." + File.separator + "Path.txt"));
    Path = in.readLine();
    in.close();
    } catch (Exception b) {
        b.printStackTrace();
    }
    } else {
        JOptionPane.showMessageDialog(null, "Pfad in den Settings festlegen!");
    }
    File a = new File(Path);
    if (a.list().length != 0) {
        String[] Dateien = new String[a.list().length];
        Dateien = new String[a.list().length];
        Dateien = a.list();
        m.schreiben(Path);
    }
    }
}
 

Joose

Top Contributor
Wie rufst du die Funktion "DirTest" der Klasse "FileTest" auf?

Warum ist diese Methode statisch? Lass "static" einfach weg (auch bei den Variablen)
Java:
    static String Path;
    private static MAIN m;
    public FileTest(MAIN m) {
        this.m = m;
    }
    public static void DirTest() {
Die Benennung deiner Variablen und Methoden ist nicht gerade vorteilhaft, außerdem solltest du dich halbwegs an die Konventionen (auch wenns deine eigenen sind) halten.
Du mischt einfach lowerCamelCase und UpperCamelCase Schreibweise -> Normal wird alles in lowerCamelCase geschrieben, einzig Klassen in UpperCamelCase.

Java:
    if (a.list().length != 0) {
        String[] Dateien = new String[a.list().length];
        Dateien = new String[a.list().length];
        Dateien = a.list();
        m.schreiben(Path);
    }
Hast du dir diesen Code schonmal genauer angeschaut? Weißt du was er macht?
Du definierst eine Variable "Dateien" und weißt dieser ein neues String[] zu.
In der nächsten Zeile weißt du der Variable wieder ein neues String[] zu, in der darauffolgenden Zeile weißt du dieser Variable wieder ein String[] zu. Wozu unnötig 2 Arrays erstellen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Swing JList in JScrollPane aktualisiert sich nicht AWT, Swing, JavaFX & SWT 6
R AWT JList wird nur zufällig auf der GUI aktualisiert AWT, Swing, JavaFX & SWT 5
PAX JList aktualisiert zu langsam beim Hinzufügen von Einträgen AWT, Swing, JavaFX & SWT 6
G JList wird in einem Applet nur teilweise aktualisiert AWT, Swing, JavaFX & SWT 12
B Jlist füllen AWT, Swing, JavaFX & SWT 4
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
A Swing JList zu JTree AWT, Swing, JavaFX & SWT 11
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
J JList scrollen AWT, Swing, JavaFX & SWT 3
Neumi5694 Swing JList - Klick abfangen AWT, Swing, JavaFX & SWT 3
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
M Swing JList Auswahl-GUI-Konzept AWT, Swing, JavaFX & SWT 9
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
F JList auffüllen aus Array von Instanzen AWT, Swing, JavaFX & SWT 4
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
F JList bei Windowbuilder AWT, Swing, JavaFX & SWT 8
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
P JList erstellen AWT, Swing, JavaFX & SWT 4
G DefaultListModel für JList AWT, Swing, JavaFX & SWT 2
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
P Übergeben von ListModel an nichtparametrisierte JList AWT, Swing, JavaFX & SWT 8
M Ein Element in mehreren JList selektieren AWT, Swing, JavaFX & SWT 5
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
Nabbit Über JList kein JPopupMenu AWT, Swing, JavaFX & SWT 2
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
T Swing WindowBuilder: JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
C Button Text in JList neue Zeile AWT, Swing, JavaFX & SWT 6
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
D Swing ArrayList in Jlist/ List oder Array in JList/List AWT, Swing, JavaFX & SWT 5
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
M JList wird angezeigt, JTable (DefaultTableModel) nicht AWT, Swing, JavaFX & SWT 7
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
N AWT Markierte Zeile jList aus mySQL DB löschen AWT, Swing, JavaFX & SWT 2
S JList repaint AWT, Swing, JavaFX & SWT 1
F Swing JTextField in JList (Funktion beibehalten) AWT, Swing, JavaFX & SWT 2
H JList AWT, Swing, JavaFX & SWT 5
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
B Swing Dynamische JList mit Bildern AWT, Swing, JavaFX & SWT 4
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
S JList Index finden AWT, Swing, JavaFX & SWT 6
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
N JComponenten in JList oder doch anders? AWT, Swing, JavaFX & SWT 0
S Swing JList, ArrayList + DefaultModel AWT, Swing, JavaFX & SWT 5
B Tabelleneinträge in JList anzeigen AWT, Swing, JavaFX & SWT 5
P JList/JScroolPane Text verschieben und text wrappen AWT, Swing, JavaFX & SWT 3
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
M JList Model filtern AWT, Swing, JavaFX & SWT 4
K Swing JList - Element richtig hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
P Swing JList mit Objekten - Name anzeigen AWT, Swing, JavaFX & SWT 5
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
K Mehrfachselektierungen in einer JList AWT, Swing, JavaFX & SWT 6
L Swing Component alignment innerhalb einer JList AWT, Swing, JavaFX & SWT 3
M Swing JList Listener AWT, Swing, JavaFX & SWT 20
M Accelerator zu JMenuItem des JPopupMenu einer JList AWT, Swing, JavaFX & SWT 2
S Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
E selektierter Datensatz in JList als String Datentyp AWT, Swing, JavaFX & SWT 23
E selektiertes Element aus JList zurückgeben AWT, Swing, JavaFX & SWT 7
E JList /DefaultListModel mit Datenbank verbinden AWT, Swing, JavaFX & SWT 10
L SQL & Jtable o. JList AWT, Swing, JavaFX & SWT 5
K Swing JList und veränderte CellRenderer AWT, Swing, JavaFX & SWT 8
B JList + ListCellRenderer AWT, Swing, JavaFX & SWT 5
B JList -> Disabled AWT, Swing, JavaFX & SWT 6
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
I Jlist isselectionEmpty AWT, Swing, JavaFX & SWT 4
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
R Swing unbegrenzte Anzahl vonEinträgen in JList AWT, Swing, JavaFX & SWT 2
MiMa Dateien aus Ordner in einer JList Ausgeben AWT, Swing, JavaFX & SWT 32
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11
M JList mit 2-zeiligen Objekten füllen AWT, Swing, JavaFX & SWT 7
S JList mit Einträgen versehen schlägt fehl AWT, Swing, JavaFX & SWT 4
F Swing ArrayList in JList anzeigen und Objekte auswählen AWT, Swing, JavaFX & SWT 2
B JList zeigt Elemente nicht an AWT, Swing, JavaFX & SWT 3
S Fragen zu JList AWT, Swing, JavaFX & SWT 3
B Aktualisierung einer JList AWT, Swing, JavaFX & SWT 5
W JList valueChanges weiterleiten? AWT, Swing, JavaFX & SWT 14
D JButton-Click in JList mit Panels (auf dem der Button ist) AWT, Swing, JavaFX & SWT 6
E Jlist nur mit Klasse? AWT, Swing, JavaFX & SWT 5
D Swing JList <-> AdapterModel <-> Model AWT, Swing, JavaFX & SWT 4
1 JList - Elemente mit rechter Maustaste wählen AWT, Swing, JavaFX & SWT 6
M JList mit DefaultListModel und listener AWT, Swing, JavaFX & SWT 4
B JList nach dem Rendern sortieren AWT, Swing, JavaFX & SWT 3
T Wie ist das "Lookup-Verhalten" von JList, JCombobox änderbar? AWT, Swing, JavaFX & SWT 4
D JList items voneinander trennen AWT, Swing, JavaFX & SWT 10
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
M gleiches Element in JList mehrmals hintereinander auswählen AWT, Swing, JavaFX & SWT 6
T JList und Objekte AWT, Swing, JavaFX & SWT 7
M Swing JList Item in andere JList während Ausführung AWT, Swing, JavaFX & SWT 4
V JList filtern AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben