Invalid Range - Fehler bei TableRowSorter / Tabelle

Status
Nicht offen für weitere Antworten.

Taste

Bekanntes Mitglied
Hallo,
ich folgendes Problem:

Ich habe eine Tabelle, der ich ein Model und ein ColumnModel verpasse und soweit ist auch alles gut.
Nun habe ich versucht, anhand der Beispiele in den FAQ's eine Sortierung zu aktivieren:
Code:
         TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>( this.table.getModel() );
          this.table.setRowSorter( sorter );
Eigentlich ja kein Problem. Aber wenn ich dann Daten einfügen möchte mit:
Code:
           final Vector v = new Vector();
            v.add( entry.getKey() );
            v.add( entry.getValue() );
            extMappingTable.getComponent().addRow( v );
Dann erhalte ich folgende Fehlermeldung:

Caused by: java.lang.IndexOutOfBoundsException: Invalid range
at javax.swing.DefaultRowSorter.checkAgainstModel(DefaultRowSorter.java:904)
at javax.swing.DefaultRowSorter.rowsInserted(DefaultRowSorter.java:844)
at javax.swing.JTable.notifySorter(JTable.java:4208)
at javax.swing.JTable.sortedTableChanged(JTable.java:4056)
at javax.swing.JTable.tableChanged(JTable.java:4333)
at com.test.wswing.WJTable.tableChanged(WJTable.java:236)
at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
at javax.swing.table.AbstractTableModel.fireTableRowsInserted(AbstractTableModel.java:215)
at com.test.client.table.HyperTableModel2.addRow(HyperTableModel2.java:261)
at ...

Instanziiere und setze ich den TableRowSorter nach dem Hinzufügen der Rows, dann klappts problemlos, aber ich will doch eigentlich eine saubere Initialisierung der Tabelle haben, bevor ich Daten einfüge.

Hab ich da einen Gedankenfehler, oder was mache ich falsch?
Gruß, Nick
 

Taste

Bekanntes Mitglied
Hallo André,

mein Fehler, Deine Erwartung passt schon.
Diese Methode:
Code:
extMappingTable.getComponent().addRow(v);
ruft auf dem TableModel addRow(...) auf.

Dass das TableModel noch nicht existieren könnte war auch eine Vermutung von mir, aber wenn ich mir direkt an dieser Stelle, wo ich den sorter setze
Code:
tabelModel.getRowCount()
aufrufe, dann bekomme ich 0 zurück und nicht etwa eine NPE.

Ich bekomme die Exception ja auch nicht beim Erzeugen und setzen des RowSortes, sondern beim Einfügen der Daten...

---------------------------------

Ich habe nun testhalber mal Folgendes implementiert:
Code:
// erst Daten setzen
final Vector v = new Vector();
v.add( entry.getKey() );
v.add( entry.getValue() );
extMappingTable.getComponent().addRow(v);

// dann Sorter erzeugen und setzen 
extMappingTable.getComponent().addRow( v );
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>( this.table.getModel() );
          this.table.setRowSorter( sorter );
Dies funktioniert, aber ist ja wie schon gesagt in meinen Augen nicht ganz die richtige Reihenfolge, oder?
Wenn ich dann direkt danach eine weitere Zeile hinzufüge, dann erhalte ich wieder die gleiche Exception:
Code:
// eine weitere Zeile Daten setzen
final Vector v = new Vector();
v.add( entry.getKey() );
v.add( entry.getValue() );
extMappingTable.getComponent().addRow(v);

Was mag da falsch sein...
Herzlichen Gruß, Nick
 

Ebenius

Top Contributor
André Uhres hat gesagt.:
"this.table.getModel()" könnte, wenn es denn nicht null ist, auf eine andere Instanz zeigen als "extMappingTable.getComponent()".
TableModel kann nach Erzeugung der Tabelle nicht null sein. JTable Source Code:
Code:
public void setModel(TableModel dataModel) {
  if (dataModel == null) {
        throw new IllegalArgumentException("Cannot set a null TableModel");
  }
[...]
 

Taste

Bekanntes Mitglied
Ja, ihr habt beide Recht (nur fürs Ego :wink:)

Nur leider ist es die gleiche Instanz. Ich hatte bloß den Code nicht mehr genau im Kopf. Ich greife schon direkt auf das Model der Tabelle zu, die ich da mit Daten befülle... Sorry, dass ich mich so missverständlich ausgedrückt habe.

Ich werde mich dem Problem morgen nochmal widmen.

Gruß, Nick

[Edit: Es ist doch leider wirklich die gleiche Instanz :eek:)]
 

Ebenius

Top Contributor
Zeig mal den Source-Code von HyperTableModel2. Ich gehe davon aus, Du sendest den Event an der falschen Stelle oder zählst RowCount an der falschen Stelle hoch, oder ähnliches.
 

Ebenius

Top Contributor
André Uhres hat gesagt.:
Es ist wohl eher so, daß wir zwei verschiedene Instanzen von TableModels haben :wink:
Den letzten Kommentar von Taste hatte ich falsch gelesen... Hatte verstanden, es wären die gleichen Instanzen. :oops:
 

Taste

Bekanntes Mitglied
Also nun hab ich wieder einige Zeit debugged und Folgendes herausgefunden:

Es handelt sich definitiv um die selbe Instanz von dem Model.

Was fehl schlägt ist diese Methode in DefaultRowSorter:
Code:
private void checkAgainstModel(int firstRow, int endRow) {
        if (firstRow > endRow || firstRow < 0 || endRow < 0 ||
                firstRow > modelRowCount) {
            throw new IndexOutOfBoundsException("Invalid range");
        }
    }
Hier den gesamten Code des Models zu posten wäre wohl zuviel, aber diese Methode macht mich stutzig:
Code:
public void addRow( List aRowData )
   {
      List theRowData = ( aRowData != null ? aRowData : this.createEmptyRow() );
      this.myData.add( theRowData );
      this.fireTableRowsInserted( this.getRowCount(), this.getRowCount() );
   }
this.myData ist einfach nur eine lokale Liste und this.getRowCount() liefert nur die Länge dieser Liste...
Ich versuche nun zu verstehen, wo da überhaupt die Verbindung zur Tabelle ist... Kann doch eigentlich nur über die Methode this.fireTableRowsInserted(...) gehen, oder?

Achso, das Model ist abgeleitet von AbstractTableModel, falls das Euch hilft.
Habt Ihr eine Idee für mich oder könnt mir das erklären?
 

Ebenius

Top Contributor
Taste hat gesagt.:
Code:
public void addRow( List aRowData )
   {
      List theRowData = ( aRowData != null ? aRowData : this.createEmptyRow() );
      this.myData.add( theRowData );
      this.fireTableRowsInserted( this.getRowCount(), this.getRowCount() );
   }
Deine letzte Zeile ist nicht bei getRowCount(), sondern bei getRowCount() - 1.

Dann geht's, stimmt's?

PS: Herr Uhres, ich liebe es, wenn ich recht habe :lol:

Ebenius
 

Taste

Bekanntes Mitglied
Schon möglich, dass Du Recht hast. :D
Mir ist noch eingefallen, dass nur diese Bedingung erfüllt sein kann:
Code:
firstRow > modelRowCount
Daher muss die Exception kommen.

Wie meinst Du das mit getRowCount() - 1?
Ich stehe wohl auf dem berühmt berüchtigten Schlauch...
Gruß, Nick
 

Ebenius

Top Contributor
Richtig funktioniert es damit:
Code:
public void addRow( List aRowData ) { 
      List theRowData = ( aRowData != null ? aRowData : this.createEmptyRow() ); 
      this.myData.add( theRowData ); 
      this.fireTableRowsInserted( this.getRowCount() - 1, this.getRowCount() - 1 ); 
}

Oder damit:
Code:
public void addRow( List aRowData ) { 
      List theRowData = ( aRowData != null ? aRowData : this.createEmptyRow() );
      final int oldRowCount = this.getRowCount();
      this.myData.add( theRowData ); 
      this.fireTableRowsInserted( oldRowCount, oldRowCount ); 
}

Jetzt klar?

Ebenius
 

Taste

Bekanntes Mitglied
Ja, absolut!

DANKE!!! Du bist mein Held der Stunde!

So ein blöder Fehler in uraltem Code...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JXTable Invalid range Problem AWT, Swing, JavaFX & SWT 5
H JavaFX Invalid URL: unknown protocol: d AWT, Swing, JavaFX & SWT 5
D SWT SWT Elemente aus anderen Klassen aufrufen - Invalid thread access AWT, Swing, JavaFX & SWT 6
B Swing Laden von serialisierten Objekten (invalid type code AC)) AWT, Swing, JavaFX & SWT 3
Burny91 Swing Invalid SortKey?! AWT, Swing, JavaFX & SWT 2
D JFreeChart range der Y Achse verändern. AWT, Swing, JavaFX & SWT 1
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
J Fehler bei jFame.setTitle() AWT, Swing, JavaFX & SWT 8
thor_norsk SpringBoot-Fehler AWT, Swing, JavaFX & SWT 7
J Ich kriege eine Fehler Messesage bei meinem Media Player AWT, Swing, JavaFX & SWT 8
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
S JavaFX Fehler zwischen View und Controller bei MouseEvent (MVC) AWT, Swing, JavaFX & SWT 13
T ListView nach Erweiterung Fehler in CellFactory AWT, Swing, JavaFX & SWT 8
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
parrot JavaFX Fehler AWT, Swing, JavaFX & SWT 4
H JavaFX JavaFX Import Fehler AWT, Swing, JavaFX & SWT 4
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
Z Swing Wert aus Textfeld auslesen -- null Fehler AWT, Swing, JavaFX & SWT 4
A eine Fehler AWT, Swing, JavaFX & SWT 9
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
L JavaFX Fehler beim setzen von Farben AWT, Swing, JavaFX & SWT 16
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
W fillRect() in Schleife spukt nur Fehler aus AWT, Swing, JavaFX & SWT 3
S Fehler: Hauptklasse neon.Main konnte nicht gefunden oder geladen werden AWT, Swing, JavaFX & SWT 5
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
Tommy135 JavaFX JavaFX Fehler beim Scenewechsel AWT, Swing, JavaFX & SWT 23
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
E Fehler bei Button AWT, Swing, JavaFX & SWT 1
L Unbekannter Fehler AWT, Swing, JavaFX & SWT 13
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
I Fehler bei Alert AWT, Swing, JavaFX & SWT 6
J Fehler bei PixelColor erkennung AWT, Swing, JavaFX & SWT 4
T Fehler bei ActionEvent? AWT, Swing, JavaFX & SWT 3
V Fehler bei Würfelsimulator GUI AWT, Swing, JavaFX & SWT 2
Z GUI-Problem, finde meinen Fehler nicht! AWT, Swing, JavaFX & SWT 11
Seikuassi SWING - (Hoffentlicher) simpler Color-Fehler AWT, Swing, JavaFX & SWT 4
M Swing finde den fehler nicht AWT, Swing, JavaFX & SWT 9
A Fehler bei erstellen eines JTextFields AWT, Swing, JavaFX & SWT 2
D Unlogischer Fehler? AWT, Swing, JavaFX & SWT 2
L Eclipse Fehler besser zu verstehen!!! AWT, Swing, JavaFX & SWT 4
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
H GUI-Textausgabe Fehler AWT, Swing, JavaFX & SWT 5
S String is null Fehler AWT, Swing, JavaFX & SWT 2
P Swing GroupLayout() Fehler? AWT, Swing, JavaFX & SWT 3
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
N Touchscreen-Scrollen, wo liegt der Fehler? AWT, Swing, JavaFX & SWT 3
N Fehler Inhalt von JTable wird gelöscht AWT, Swing, JavaFX & SWT 5
S Fehler beim Zweites 3D Bild AWT, Swing, JavaFX & SWT 2
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
M GEF tutorial Fehler finden AWT, Swing, JavaFX & SWT 4
S Grafik Fehler AWT, Swing, JavaFX & SWT 15
M Fehler bei Arrayübergabe an JComboBox AWT, Swing, JavaFX & SWT 10
J Fehler beim Einklappen eines Trees AWT, Swing, JavaFX & SWT 4
P 2D-Grafik Fehler beim Laden eines Bildes AWT, Swing, JavaFX & SWT 25
S LayoutManager Fehler gesucht 18.6.2011 AWT, Swing, JavaFX & SWT 4
C Fehler nur bei manchen Usern AWT, Swing, JavaFX & SWT 8
Screen Fehler bei Get-Methode für ArrayList AWT, Swing, JavaFX & SWT 8
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
I Fehler bei JFileChooser AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Fehler beim Farbe auslesen AWT, Swing, JavaFX & SWT 3
J Fehler beim Gif Datei öffnen AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Fehler beim Überzeichnen von Linien AWT, Swing, JavaFX & SWT 11
E Swing Fehler nach Befüllen einer JTable mit gesetzem Rowsort?! AWT, Swing, JavaFX & SWT 10
P Swing Misteriöser Fehler JTable AWT, Swing, JavaFX & SWT 5
Y Swing JPasswordField Fehler AWT, Swing, JavaFX & SWT 14
A Swing Unknown Source Fehler AWT, Swing, JavaFX & SWT 9
N Fehler bei Grouplayout AWT, Swing, JavaFX & SWT 17
S ActionPerformed Fehler... AWT, Swing, JavaFX & SWT 9
C BufferedImage-Fehler? Falsches Bild wir gezeichnet AWT, Swing, JavaFX & SWT 5
A Tabellen Überschriften ändern -setColumnIdentifiers()- Fehler AWT, Swing, JavaFX & SWT 7
hdi Swing JTable: Fehler beim Nutzen von RowSorter#setRowFilter AWT, Swing, JavaFX & SWT 4
M.F.G. Fehler bei der Anzeige Grafischer Elemente AWT, Swing, JavaFX & SWT 13
D Swing Verwirrender Fehler AWT, Swing, JavaFX & SWT 7
J Fehler in fillRoundRect AWT, Swing, JavaFX & SWT 2
D Probleme mit Spiel-Engine. Komische Fehler. AWT, Swing, JavaFX & SWT 5
W fehler jedoch ka wo AWT, Swing, JavaFX & SWT 14
F Fehler in der Startklasse AWT, Swing, JavaFX & SWT 13
A Fehler bei der Parametereingabe? AWT, Swing, JavaFX & SWT 16
P finde den Fehler im JTable nicht AWT, Swing, JavaFX & SWT 2
Spin Fehler in Vergleich AWT, Swing, JavaFX & SWT 6
K Swing: ContentPane von JDialog ist transparent (Fehler) AWT, Swing, JavaFX & SWT 10
Dragonfire ZoomImage flackert -> Fehler: repaint-Aufruf [gelöst] AWT, Swing, JavaFX & SWT 5
DasDogma Fehler bei getText() AWT, Swing, JavaFX & SWT 10
I Fehler bei verschachtelten JScrollPanes AWT, Swing, JavaFX & SWT 2
M Fehler beim Zugriff von awt-KeyListener auf swt-Shell AWT, Swing, JavaFX & SWT 2
GilbertGrape Fehler bei HTML in JTextPane AWT, Swing, JavaFX & SWT 2
K Textfelder auslesen gibt immer Fehler AWT, Swing, JavaFX & SWT 2
D Fehler bei Button Array AWT, Swing, JavaFX & SWT 8
P Fehler beim Einlesen eines JTextFields AWT, Swing, JavaFX & SWT 2
G Viele Fehler beim zeichen AWT, Swing, JavaFX & SWT 5
M Fehler mit Jigloo AWT, Swing, JavaFX & SWT 3
M setColor mit Fehler cannot fiend symbol (java.awt.Color) AWT, Swing, JavaFX & SWT 2
Z habe code, habe fehler, habe keine lösung AWT, Swing, JavaFX & SWT 7
R JComboBox Fehler AWT, Swing, JavaFX & SWT 7
B NPE-Fehler AWT, Swing, JavaFX & SWT 11
A Fehler beim Auslesen aus einem Textfeld AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben