Anzeige

 JList wird nicht aktualisiert


#1
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>();
    private JTextField tfumbenennen;
    private DefaultListModel<String> DateienList = new DefaultListModel<String>();
    private 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.
 

melmager

Erfahrenes Mitglied
#2
man muss leider bekanntgeben das sich am Inhalt was geändert hat :)
Code:
list. fireContentsChanged(this, int index0, int index1);
// index0 = 0 index1 = list.getModel.size()
 

melmager

Erfahrenes Mitglied
#4
Code:
for (String File: verzeichnis.list()) {
          DateienList.addElement(File);
    }
// und nu muss man sagen das sich was geändert hat
dateienList.fireContensChanged(this,0,dateienList.getModel().size());
namen von variabeln bitte in Java Anfangsbuchstabe bitte klein.

ungetestet :)
 
#6
Den error:
The method fireContensChanged(MAIN, int, int) is undefined for the type DefaultListModel<String>
bekomme ich bei:
Java:
       DateienList.fireContensChanged(this,0,DateienList.getSize());
DateienList.getModel(); gibt es leider nicht deswegen musste ichs leicht abändern
 

HonniCilest

Erfahrenes Mitglied
#9
Du hast Recht, ich habe das PS unter deinem Code nicht gesehen :) Dann könnte es aber sein, dass in dieser anderen Klasse etwas nicht stimmt. Vielleicht zeigst du hier noch mehr?
 
Anzeige
Anzeige