JTable aktualisieren muss doch auch einfach gehn

The_RealMatrix

Grünschnabel
Hallo Zusammen,

lange, lange les ich hier schon im Forum und nun ist es mal an der Zeit, das auch ich mich mal zu Wort melde :)

Kurze Problembeschreibung:
Ich muss im Rahmen meines WInfo-Studiengangs ein Bibliotheksprogramm schreiben (Bücher, User anlegen; Bücher ausleihen/zurückbringen; User/Bücher auflisten). Soweit funktioniert auch alles.
NUR: Mit einem Klick auf einen Button öffnet sich ein neues Fenster mit einem JTable in dem alle Bücher aufgelistet sind. Da man ja auch Bücher hinzufügen kann, ändert sich diese Liste recht oft.
Ich hab das "Aktualisieren" jetzt so gelöst, das ich die Tabelle zu Beginn im Konstruktor über eine Methode FillTableBookList() fülle:

Java:
public LibraryUI() {
    initComponents();
    //...
    FillTableBookList();
    
}

public void FillTableBookList() {
    Database db = new Database();
    try {
        db.Open();
        ResultSet rs = db.Select("SELECT * FROM books");
        
        while(rs.next()){
            bookreturn_dtm.addRow(new String[] { rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getString(5) });
        }
        
    } catch (SQLException ex) {
        ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    }
}

Und wenn ich dann den Button drücke wird das Fenster nur auf "visible" gesetzt:

Java:
private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {
    BookListReturn.setLocation(500,100);
    BookListReturn.pack();
    BookListReturn.setVisible(true);
}

Problematik -> Bücher werden hinzugefügt hab ich folgendermaßen gelöst:

Java:
private void insertInto() {
    
    // Nur wenn alle Felder gefüllt sind, wird das Buch eingestellt
    if(bookname.getText().length() == 0 || isbn.getText().length() == 0 || author.getText().length() == 0) {
        // Fehlermeldung wird ausgegeben
    } else {
        int status2;
        // ...
        try {
            // Book-Objekt wird angelgt und dann in die MySQL Datenbank geschrieben
            Book book1 = new Book(isbn.getText(), bookname.getText(), author.getText(), status2);
            
            // ÄNDERUNG WIRD SOFORT IN DEN JTABLE GESCHRIEBEN!
            bookreturn_dtm.addRow(new String[] { book1.GetBookId()+"",isbn.getText(),bookname.getText(),author.getText(),status2+"" });
            // MESSAGE AUSGEBEN, OB ERFOLGREICH!
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
    }
}

Es ist hier ja kein richtiges "Aktualisieren" sondern nur ein Anfügen einer neuen Zeile, wenn ein neues Buch erstellt wird.

Meine Frage:
Geht das ganze nicht "einfacher" oder effektiver? Mit den zwei Methoden bookreturn_dtm.fireTableDataChanged(); und bookreturn_dtm.fireTableRowsInserted(); hab ich auch schon rumgespielt, aber ich kriegs nicht so ganz hin.

Über Hilfe würd ich mich sehr freuen.

Schönen Gruß und vielen Dank schon mal im Vorraus :)

Tom
 
Zuletzt bearbeitet:
Hey Erdal,

den Beitrag hab ich noch nicht gefunden :eek:

Werd ihn mal durchmachen und bei fragen melde ich mich halt noch mal

Vielen Dank und schönen Gruß,

Tom
 
Zurück