# JTable remove row



## Nathy (25. Mai 2007)

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:

```
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


----------



## Gast (25. Mai 2007)

es gibt doch auch removeAll()


----------



## André Uhres (25. Mai 2007)

oder:  model.setRowCount(0)


----------



## Nathy (25. Mai 2007)

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


----------



## André Uhres (25. Mai 2007)

Nathy hat gesagt.:
			
		

> ..Was kann ich mit der Methode model.setRowCount(0) erreichen?


Damit kannst du erreichen, daß das Model nur noch 0 rows hat


----------



## Estrados (25. Mai 2007)

Dein Fehler ist im übrigen hier zu finden:


```
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:


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

Oder um bei deinem Beispiel zu bleiben:

```
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 .


----------



## Nathy (25. Mai 2007)

Besten Dank für die Hilfe.

Gruss


----------

