JTable remove row

Status
Nicht offen für weitere Antworten.

Nathy

Aktives Mitglied
Hallo

Ich habe ein JTable, welche Daten aus einer DB holt. Fuktioniert auch fast alles. Ich klicke auf einen Button und dann werden die Daten geholt. Wenn ich jetzt nochmals den Button drücke, werden nochmals die Daten geholt aber unten angehängt. Ich möchte, dass es zuerst die JTabel löscht und dann wieder einfügt.
Habe dies folgendermassen versucht:
Code:
DefaultTableModel model = (DefaultTableModel)jTable1.getModel();
        int rows = model.getRowCount();
        for(int i = 0; i < rows; i++)
        {
            System.out.println(i);
            model.removeRow(i);
        }
Ich habe im Moment 5 Datensätze gespeichert. Wenn ich den obigen Code ausführe kommt folgende Meldung:


0
1
2
3
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3 >= 2
at java.util.Vector.removeElementAt(Vector.java:511)
at javax.swing.table.DefaultTableModel.removeRow(DefaultTableModel.java:446)
at GUI.Robotersteuerung.jButton1ActionPerformed(Robotersteuerung.java:539)
at GUI.Robotersteuerung.access$100(Robotersteuerung.java:24)
at GUI.Robotersteuerung$3.actionPerformed(Robotersteuerung.java:241)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


Kann mir jemand sagen, was ich falsch mache?

Gruss und danke
 
Danke für die schnelle Antwort.

removeAll gibt es nur für das Objekt jTable. Nicht aber für das model. Und mit removeAll geschieht bei mir nichts.
Was kann ich mit der Methode model.setRowCount(0) erreichen?

Gruss und danke
 
Dein Fehler ist im übrigen hier zu finden:

Code:
  int rows = model.getRowCount();
        for(int i = 0; i < rows; i++)
        {
            System.out.println(i);
            model.removeRow(i);
        }

Du hast die Anzahl der rows abgefragt, und dann in der schleife entfernst du sie... wenn du 3 Rows entfernt hast, sind nur noch 2 da, dsa wird aber nicht berücksichtigt in deiner Schleife, und so kriegst du dann beim Versuch eine row mit dem Index 3 zu entfernen deine IndexOutOfBoundsException.

Alternativ würde das so z.B. aber gehen:

Code:
while(model.getRowCount()>0){
    model.removeRow(0);
}

Oder um bei deinem Beispiel zu bleiben:
Code:
  int rows = model.getRowCount()-1;
        for(int i = rows; i >=0; i--)
        {
            System.out.println(i);
            model.removeRow(i);
        }

Wobei natuerlich model.setRowCount(0) eleganter ist 😉.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben