Swing JList zeigt keine neuen Einträge an

Corovus

Mitglied
Hallo,

ich bin noch ein ziemlicher Anfänger in Java und gerade dabei mein erstes Projekt umzusetzen. Das Programm soll unter anderem die Möglichkeit bieten Notizen in einer JList anzuzeigen. Die Notizen werden zwar erstellt, aber nicht in der Liste angezeigt.

Ich habe eine Klasse "Note", welche die eigentliche Notiz darstellt. Dann eine Klasse "NoteList", die ein Array bereitstellt, also sozusagen der Datenbestand. Als Model habe ich die Klasse "NoteListModel" erstellt, welche von DefaultListModel erbt. Hier mal der Code welchen ich zum Hinzufügen einer Notiz verwende:

In der Klasse "NoteList":
Java:
public void addNote(int index, Note note){
        noteList.add(index,note);
        System.out.println("Note added");
    }

In der Klasse "NoteListModel":

Java:
    @Override
    public void add(int index, Note note){
        noteList.addNote(index,note);
        fireIntervalAdded(this, index, index);
    }

Der Listener welchen ich an die Schaltfläche zum Hinzufügen gehängt habe:

Java:
    // Listener to add Notes
    private class AddNoteAction implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            String text = fldText.getText();
            Note note = new Note(text);

            // Check for real text
            if (text.replace(" ", "").equals("")) {
                fldText.requestFocusInWindow();
                fldText.selectAll();
                System.out.println("Please type in your Note");
                return;
            }

            // Add Note after selected Note. If no selection add at beginning.
            int index = noteJList.getSelectedIndex();
            if (index == -1) {
                index = 0;
            } else {
                index++;
            }

            noteListModel.add(index, note);

            // Clear Textfield after adding Note
            fldText.requestFocusInWindow();
            fldText.setText("");
        }

    }

NACHTRAG:
Ich hab noch ein wenig rumgespielt und jetzt werden die Notizen angezeigt aber ich bin mir nicht sicher ob es so richtig implementiert ist. Im Endeffekt speichert das "NoteListModel" ja keine Notizen, sondern gibt sie lediglich an den Datenbestand weiter, welche die Notiz dann im Array anlegt. Wenn ich in meinem ActionListener z.B. die Methode .addElement(index) von DefaultListModel anstatt der überschriebenen Methode .add(index,note) aufrufe dann werden die Elemente ja nicht in meinem Array gespeichert. Aber wo genau werden sie dann gespeichert? Hält mein NoteListModel noch eine interne Liste auf die ich dann zugreifen kann/muss??

Ich hab mir zu dem Thema bereits einige Tutorials und Beispiele angesehen aber es wird immer etwas anders umgesetzt und ich bin mir daher nicht wirklich sicher ob ich alles richtig gemacht habe.
 
Zuletzt bearbeitet:
Ein DefaultListModel (und damit auch deine abgeleitete Klasse) kann auch selber Daten speichern. Es verwendet dazu intern eine Instanz von Vector.
Ein (möglicher) Fehler, den ich sehe, ist folgender: In deiner NoteListModel-Klasse hast du add(int index, E element) überschrieben, ohne in der überschriebenen Methode super.add(index, element) aufzurufen. Das hinzugefügte Element wird demnach nur der noteList hinzugefügt und NICHT dem Vector, aus dem sich das DefaultListModel die Daten holt. Wenn du nicht auch getSize() und getElementAt(int index) überschrieben hast, wird das dazu führen, dass du die hinzugefügten Daten in deiner Gui nicht siehst, weil der Vector, in dem das DefaultListModel die Daten speichert, leer ist.
 

Neue Themen


Zurück
Oben