Tabelle aktuallisieren

julian.veh

Bekanntes Mitglied
Hi,
wie einige, bei meiner nun 3. Frage, bestimmt schon wissen, arbeite ich an einem Hardwareverwaltungssystem ^^.
Bis jetzt werden Produkte einwandfrei hinzugefügt, zu der JTable hinzugefügt usw., allerdings habe ich ein Problem beim löschen, was auch klappt, allerdings war es erst so, dass man das Programm neu starten musste um die gelöschten Produkte nicht mehr in der Tabelle zu sehen. Habe mir gedacht ich lösche einfach den ganzen Inhalt der Tabelle und lese ihn neu aus.

Java:
private void loeschen(String typ, String hersteller, String modell, String baujahr, String seriennummer, String lieferant, String preis) {
        Loeschen loeschen = new Loeschen();
        loeschen.loeschen(typ, hersteller, modell, baujahr, seriennummer, lieferant, preis);
        int a = this.model.getColumnCount();
        while(a > 0) {
            this.model.removeRow(a);
            a = a-1;
        }
        auslesen();
    }

Bekomme aber folgende Fehlermeldung:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 7 >= 4
at java.util.Vector.removeElementAt(Vector.java:554)
at javax.swing.table.DefaultTableModel.removeRow(DefaultTableModel.java:463)
at HardwareVerwaltungsSystem.loeschen(HardwareVerwaltungsSystem.java:373)
at HardwareVerwaltungsSystem.access$900(HardwareVerwaltungsSystem.java:15)
at HardwareVerwaltungsSystem$6.actionPerformed(HardwareVerwaltungsSystem.java:323)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6504)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Wind.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
BUILD SUCCESSFUL (total time: 22 seconds)


Die Methode auslesen() rufe ich ja beim Start des Programms immer auf, daran kann es ja also nicht liegen. Falls aber doch ^^:

Java:
private void auslesen() {
        Auslesen auslesen = new Auslesen();
        ArrayList<Produkt> produkte = auslesen.auslesen();
        System.out.println(produkte);
        
        for (Produkt p : produkte) {
            int size = model.getColumnCount();
            String typ = p.getTyp();
            String hersteller = p.getHersteller();
            String modell = p.getModell();
            String baujahr = p.getBaujahr();
            String seriennummer = p.getSeriennummer();
            String lieferant = p.getLieferant();
            String preis = p.getPreis();

            Vector newDatas = createDataVector(typ, hersteller, modell, baujahr, seriennummer, lieferant, preis, size);
            model.addRow(newDatas);
        }
    }

Danke schonmal, falls mir jemand weiterhelfen kann ;)

lG
 
C

Camino

Gast
Woher kommen denn deine Daten? Aus einer Datenbank?
Normalerweise hat man für die JTable ein TableModel, in dem man die Daten ändert (hinzufügen, löschen, ändern) und das dann den Inhalt der Tabelle aktualisiert. Dazu hat das TableModel Methoden, die mit fire... anfangen.
 

julian.veh

Bekanntes Mitglied
Ja die Daten kommen aus einer Datenbank :).

Ich habe einfach das DefaultTableModel importiert.

Java:
private final DefaultTableModel model;

Java:
private static Vector createDataVector(String typ, String hersteller, String modell, String baujahr, String seriennummer, String lieferant, String preis, int size) {
        Vector vector = new Vector(size);
        String inhalt = "";
        for (int i = 0; i < size; i++) {
            if (i == 0) {
                inhalt = typ;
            }
            if (i == 1) {
                inhalt = hersteller;
            }
            if (i == 2) {
                inhalt = modell;
            }
            if (i == 3) {
                inhalt = baujahr;
            }
            if (i == 4) {
                inhalt = seriennummer;
            }
            if (i == 5) {
                inhalt = lieferant;
            }
            if (i == 6) {
                inhalt = preis;
            }
            vector.add(inhalt);
        }

        return vector;
    }

Java:
 private void auslesen() {
        Auslesen auslesen = new Auslesen();
        ArrayList<Produkt> produkte = auslesen.auslesen();
        System.out.println(produkte);
        
        for (Produkt p : produkte) {
            int size = model.getColumnCount();
            String typ = p.getTyp();
            String hersteller = p.getHersteller();
            String modell = p.getModell();
            String baujahr = p.getBaujahr();
            String seriennummer = p.getSeriennummer();
            String lieferant = p.getLieferant();
            String preis = p.getPreis();

            Vector newDatas = createDataVector(typ, hersteller, modell, baujahr, seriennummer, lieferant, preis, size);
            model.addRow(newDatas);
        }
    }

Java:
    private void loeschen(String typ, String hersteller, String modell, String baujahr, String seriennummer, String lieferant, String preis) {
        Loeschen loeschen = new Loeschen();
        loeschen.loeschen(typ, hersteller, modell, baujahr, seriennummer, lieferant, preis);
        int a = this.model.getColumnCount();
        while(a > 0) {
            this.model.removeRow(a);
            a = a-1;
        }
        auslesen();
    }


Habe zu dem DefaultTableModel nur die Methode removeRow(int row) gefunden und dachte ich lösche alle und lese neu aus.
 
C

Camino

Gast
Aber mir
Code:
removeRow(int row)
kannst du doch auch einzelne Zeilen löschen.
 

julian.veh

Bekanntes Mitglied
Habe aber keine Idee wie ich herausfinden soll in welcher Zeile das gelöschte Objekt ist. Es können ja auch mehrere Objekte mit dem gleichen Namen sein. ||edit: geben, nicht sein ^^

Habe erst überlegt beim Erstellen des Objektes eine Zahl mit zu erstellen, die angibt, um das wie vielte Objekt es sich in der Datenbank handelt, aber wenn eins gelöscht wird würde sich das dann ja auch verschieben und wenn mein Programm so busy wird, dass es mehr als 2Milliarden Einträge gibt und ich als Datentyp int habe, auch wenn das unwahrscheinlich ist, würde es nicht mehr gehen.
 

Fant

Bekanntes Mitglied
Ich versteh nicht, was du gerade sagst. In einer relationalen Datenbank werden Einträge niemals doppelt gespeichert.
Und wenn absehbar ist, dass int nicht reichen könnte, dann nimmt man halt long, oder BigInteger, oder was weiß ich...
 
C

Camino

Gast
Wie löschst du denn im Moment? Normalerweise hast du doch eine eindeutige ID-Nummer aus der Datenbank für deine Datensätze (primary key).

Das mit den fire...-Methoden ist im AbstractTableModel.
 

julian.veh

Bekanntes Mitglied
Ich versteh nicht, was du gerade sagst. In einer relationalen Datenbank werden Einträge niemals doppelt gespeichert.
Und wenn absehbar ist, dass int nicht reichen könnte, dann nimmt man halt long, oder BigInteger, oder was weiß ich...

Ich weiß nicht genau was eine relationale Datenbank ist, jedenfalls verwende ich eine objektorientierte Datenbank db4o, weil ich ein objektorientiertes Projekt in der Schule mache. Natürlich gibt es nicht die selben Objekte, aber die gleichen, wenn ich 2 mal ein Objekt mit dem gleichen Attributen erstelle. Und ich lösche ja Objekte indem ich die Datenbank nach Objekten mit bestimmten Attributen durchsuche und diese entferne ;).
 
C

Camino

Gast
Und ich lösche ja Objekte indem ich die Datenbank nach Objekten mit bestimmten Attributen durchsuche und diese entferne ;).

Hmm, das kann aber auch mal schief gehen. Deshalb gibt es ja eindeutige IDs = Primärschlüssel, die nur einmal exisitieren dürfen. Damit hast du sichergestellt, dass z.B. genau der gewünschte Datensatz gelöscht wird.
 
C

Camino

Gast
Sorry, kenn mich mit db4o leider garnicht aus. Hab gerade nur auf der Wikipedia-Seite zu db4o ein Beispiel gesehen, wie da Daten hinzugefügt, geändert oder gelöscht werden.

Du musst doch irgendwie das Objekt bekommen (Zeile in Tabelle selektiert) und das dann löschen können.
 

julian.veh

Bekanntes Mitglied
Ok Trotzdem dann danke ;)

und meine Idee

Java:
private void loeschen(String typ, String hersteller, String modell, String baujahr, String seriennummer, String lieferant, String preis) {
        Loeschen loeschen = new Loeschen();
        loeschen.loeschen(typ, hersteller, modell, baujahr, seriennummer, lieferant, preis);
        int a = this.model.getColumnCount();
        while(a > 0) {
            this.model.removeRow(a);
            a = a-1;
        }
        auslesen();
    }

ist Humbug?

Ich makiere das mal nicht als erledigt, vllt kann mir ja noch jemand helfen ;)
 
C

Camino

Gast
Ich versuche das gerade nur zu verstehen. Man wählt Datensätze, die man ändern oder löschen möchte, anhand von Attributen wie z.B. Namen aus? Was aber wenn es doch mal mehrere gleiche Attribute gibt? Oder muss man sich dann selbst um einen Primärschlüssel kümmern? Oder alle Attribute mitgeben und den Datensatz dann dadurch identifizieren, so wie du es anscheinend gemacht hast.
 

julian.veh

Bekanntes Mitglied
Ich versuche das gerade nur zu verstehen. Man wählt Datensätze, die man ändern oder löschen möchte, anhand von Attributen wie z.B. Namen aus? Was aber wenn es doch mal mehrere gleiche Attribute gibt? Oder muss man sich dann selbst um einen Primärschlüssel kümmern? Oder alle Attribute mitgeben und den Datensatz dann dadurch identifizieren, so wie du es anscheinend gemacht hast.

Es wird immer nur ein Objekt gelöscht, ich denke das zu letzt hinzugefügte. Selbst wenn ich wüsste, wie man bestimmte Objekte löscht, habe ich auch keine Idee, wie ich in der Tabelle ein Objekt makieren könnte.
Ich finde es auch nicht sehr edel, alle Attribute einzugeben und dann das Objekt zu löschen, aber ich wollte erstmal das Projekt so weit fertig stellen, dass alles funktioniert, da ich noch fast 2 Monate Zeit habe, kann ich das ja immer noch verändern. So erschien es mir zunächst als einfachste Methode.

Ganz nebenbei. Gibt es eine Methode zum Schließen eines JDialog, die ich im Button hinzufügen und löschen ergänzen kann? So dass sich der Dialog direkt nach Hinzufügen eines Produkts schließt?

Gruß
 

julian.veh

Bekanntes Mitglied
http://community.versant.com/Documentation/Reference/db4o-8.0/java/tutorial/

Das ist nebenbei das Tutorial was mir empfohlen wurde und was ich verwendet habe.

2.5. Deleting objects


Objects are removed from the database using the #delete() method.

// deleteFirstPilotByName
ObjectSet result = db
.queryByExample(new Pilot("Michael Schumacher", 0));
Pilot found = (Pilot) result.next();
db.delete(found);
System.out.println("Deleted " + found);
retrieveAllPilots(db);


Let's delete the other one, too.

// deleteSecondPilotByName
ObjectSet result = db
.queryByExample(new Pilot("Rubens Barrichello", 0));
Pilot found = (Pilot) result.next();
db.delete(found);
System.out.println("Deleted " + found);
retrieveAllPilots(db);


Please check the deletion with the retrieval examples above.

As with updating objects, the object to be deleted has to be 'known' to db4o. It is not sufficient to provide a prototype object with the same field values.
[http://community.versant.com/Documentation/Reference/db4o-8.0/java/tutorial/]
 
C

Camino

Gast
Na ja, aber in dem Beispiel holt man sich aus der DB das Objekt anhand eines Attributs wie dem Namen und löscht das dann. Das kann es doch aber eigentlich nicht wirklich sein, oder?
 
C

Camino

Gast
Kann ich mir eigentlich nicht vorstellen, ausser man geht davon aus, dass es keine Objekte mit den exakt gleichen Attributen geben darf. Vielleicht weiss ja wer anderes mehr über db4o Bescheid...
 
I

IMartin

Gast
Zur ArrayIndexOutOfBoundsException:
Der ColumnCount wird verwendet, um die Rows zu löschen. Der Index für
Code:
removeRow(index)
sollte >= 0 und < RowCount sein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
L Anpassung der Spaltenbreite auch auf eine zweite Tabelle anwenden Java Basics - Anfänger-Themen 8
P Zweidimensionales Array als Tabelle mit befüllten Zahlen Java Basics - Anfänger-Themen 10
J Tabelle Sortieren Java Basics - Anfänger-Themen 48
Sonas814 ASCII-Tabelle Java Basics - Anfänger-Themen 2
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
J Autovervollständigung in einer Tabelle Java Basics - Anfänger-Themen 40
RudiRüssel maximale Anzahl von Schlüsseln in einer Hash Tabelle Java Basics - Anfänger-Themen 2
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
F Tabelle - Berechnung Rang Java Basics - Anfänger-Themen 2
N Tabelle schön in der Konsole ausgeben Java Basics - Anfänger-Themen 5
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
D Tabelle in der Konsole Java Basics - Anfänger-Themen 3
H Meine Tabelle befüllen in .fxml Java Basics - Anfänger-Themen 16
B Import Tabelle - Struktur durch User einstellbar Java Basics - Anfänger-Themen 4
O Max Gewinn einer Tabelle Java Basics - Anfänger-Themen 12
D Apache POI Tabelle wechseln Java Basics - Anfänger-Themen 2
B Kann man eine Tabelle in Eclipse erzeugen und damit arbeiten? Java Basics - Anfänger-Themen 8
S Ich verstehe die RegEx Tabelle von Javadoc nicht so ganz Java Basics - Anfänger-Themen 3
krgewb ASCII-Tabelle Java Basics - Anfänger-Themen 12
BlueFox Tabelle in der Konsole ausgeben - Probleme Java Basics - Anfänger-Themen 1
V Operatoren Was will mir die Tabelle in meinem Lehrbuch sagen? (logische Operatoren) Java Basics - Anfänger-Themen 4
J Werte aus einer Tabelle übernehmen Java Basics - Anfänger-Themen 2
F Daten aus Excel-Tabelle in Java importieren Java Basics - Anfänger-Themen 15
W Befüllung einer Tabelle mit Checkbox, Trennung GUI und Model Java Basics - Anfänger-Themen 5
P ASCII-Tabelle Java Basics - Anfänger-Themen 5
T printf Daten aus der Tabelle in Excel übernehmen Java Basics - Anfänger-Themen 5
A Hash Tabelle Element suchen Java Basics - Anfänger-Themen 1
B Vererbung In offener Hash Tabelle einfügen Java Basics - Anfänger-Themen 4
M 1x1 Tabelle Abstände korrigieren Java Basics - Anfänger-Themen 2
P Wert aus Tabelle erhalten Java Basics - Anfänger-Themen 1
U Tabelle ändern und die Inhalte speichern Java Basics - Anfänger-Themen 9
I HTML Tabelle nur so lange erzeugen bis Höhe erreicht Java Basics - Anfänger-Themen 9
N Erste Schritte MySQL Tabelle in JList darstellen Java Basics - Anfänger-Themen 1
S Klassen Objekt- Tabelle / Dynamisches 2Dimensionales Array für Objekte Java Basics - Anfänger-Themen 6
H "Tabelle" Java Basics - Anfänger-Themen 4
B Tabelle mit Fremdschlüssel versehen Java Basics - Anfänger-Themen 0
M Primefaces tabelle bearbeiten Java Basics - Anfänger-Themen 4
M Tabelle aktualisieren (mal wieder) Java Basics - Anfänger-Themen 10
M Erste Schritte Tabelle aktualisieren (mal wieder) Java Basics - Anfänger-Themen 7
G JTable: Werte in Tabelle direkt ansprechen Java Basics - Anfänger-Themen 3
P Excel-Tabelle erstellen Java Basics - Anfänger-Themen 4
I Daten aus Arraylists in eine Tabelle übertragen Java Basics - Anfänger-Themen 2
B daten speichern in einer tabelle Java Basics - Anfänger-Themen 5
J Zuweisung/Tabelle Java Basics - Anfänger-Themen 6
M Werte aus Tabelle elegant zuordnen? Java Basics - Anfänger-Themen 2
D String aus txt in label für Tabelle einfügen Java Basics - Anfänger-Themen 8
S Abfragen wenn das ende einer Tabelle erreicht ist Java Basics - Anfänger-Themen 8
M Tabelle aktualisiert sich erst nach mausklick Java Basics - Anfänger-Themen 4
J Tabelle aus Website einlesen [nicht im Quellcode] Java Basics - Anfänger-Themen 6
A Im Telefonbuch eine Tabelle ergänzen Java Basics - Anfänger-Themen 6
N Ergebnisse dynamisch in Tabelle schreiben Java Basics - Anfänger-Themen 3
F Werte aus Tabelle vergleichen/rechnen Java Basics - Anfänger-Themen 5
J Punkte hinzufügen Tabelle Java Basics - Anfänger-Themen 5
C CSV-Tabelle Java Basics - Anfänger-Themen 21
M nur 1 wert in tabelle Java Basics - Anfänger-Themen 3
M Kreuztabellenabfrage an Tabelle anfügen Java Basics - Anfänger-Themen 3
M Wert aus Tabelle lesen Java Basics - Anfänger-Themen 4
M Überschrift wird nicht angezeigt Tabelle Java Basics - Anfänger-Themen 2
O Tabelle Formatieren mit system.out.format Java Basics - Anfänger-Themen 11
M Tabelle mit Buttons Java Basics - Anfänger-Themen 24
M JSON Datensätze aus Website in Tabelle Java Basics - Anfänger-Themen 17
U Drag&Drop von Tabelle in Textfeld Java Basics - Anfänger-Themen 3
D Auf Objekt in Tabelle zugreifen Java Basics - Anfänger-Themen 4
D Eclipse und Visual Editor - erzeugen einer Tabelle Java Basics - Anfänger-Themen 8
Binary.Coder JTable bzw. Tabelle in bestimmte Form überführen Java Basics - Anfänger-Themen 5
D Inhalt der Spalten einer Tabelle addieren Java Basics - Anfänger-Themen 4
H JTable Überschrift der Tabelle wird nicht angezeigt Java Basics - Anfänger-Themen 5
F Aus Tabelle auslesen Java Basics - Anfänger-Themen 10
B Tabelle, Größe der Komponenten Java Basics - Anfänger-Themen 2
H ButtonGroup in Tabelle Java Basics - Anfänger-Themen 2
X Zeile in Tabelle kopieren und in andere einfügen Java Basics - Anfänger-Themen 6
X Arraylist in Tabelle Java Basics - Anfänger-Themen 18
M Tabelle mit immer sortiertem Inhalt Java Basics - Anfänger-Themen 5
R ASCII-Tabelle Java Basics - Anfänger-Themen 6
F Tabelle in anderer Klasse füllen Java Basics - Anfänger-Themen 9
Beckenbauer OOP Durch Komma getrennte Einträge in einem String in ein Array oder eine Tabelle schreiben Java Basics - Anfänger-Themen 4
M 2D-Array als Tabelle ausgeben ? Java Basics - Anfänger-Themen 6
M Konsole: Tabelle Ausgeben Java Basics - Anfänger-Themen 5
M Sortierte Tabelle in Datei schreiben Java Basics - Anfänger-Themen 5
A Leere Fläche einer Tabelle umfärben Java Basics - Anfänger-Themen 3
J Tabelle in Fenster anzeigen Java Basics - Anfänger-Themen 12
Z Array mit daten einer datenbankbefüllen und dies an eine tabelle geben Java Basics - Anfänger-Themen 6
M Einfügen von Daten in eine Tabelle Java Basics - Anfänger-Themen 9
J Java Ein mal Eins Tabelle Java Basics - Anfänger-Themen 11
G POI: Zelle aus einer Tabelle kopieren und in einr anderen einfügen Java Basics - Anfänger-Themen 5
J Feld in Tabelle suchen Java Basics - Anfänger-Themen 8
babel Datenbank Daten direkt an die Tabelle übergeben ohne Arrays Java Basics - Anfänger-Themen 9
T Programm startet nicht wg. Tabelle? Java Basics - Anfänger-Themen 19
R Moechte Tabelle ausschreiben auf der Konsole Java Basics - Anfänger-Themen 2
S Daten aus Tabelle auslesen Java Basics - Anfänger-Themen 5
J Datei auslesen und in Tabelle einfügen Java Basics - Anfänger-Themen 6
E Boolean wert innerhalb einer Tabelle ändern Java Basics - Anfänger-Themen 4
B zahlen verschieben tabelle Java Basics - Anfänger-Themen 2
P Zeilnumbruch vermeiden bei einer Tabelle *hilfe* Java Basics - Anfänger-Themen 11
M Daten in Tabelle setzen. Java Basics - Anfänger-Themen 6
C Tabelle sortieren (evtl. setComparator) Java Basics - Anfänger-Themen 2
T ASCII Tabelle darstellen Java Basics - Anfänger-Themen 7
G Tabelle änderungen Java Basics - Anfänger-Themen 48
S Dynamische Tabelle Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben