DefaultTableModel ruft paintComponent auf !

mutoki

Mitglied
Hallo,

hab im Internet schon etwas rumgesucht, aber leider nichts passendes gefunden.

Und zwar hab ich das Problem, dass die Tabelle (Klasse: DefaultTableModel) bei jedem addRow ( table.addRow(zeilenInfo) ) die paintComponent Methode für ein anderes SpliPane aufruft. Es werden zB. 10 Zeilen hinzugefügt und die paintComponent Methode wird 10 mal aufgerufen.

Sind 10 Zeilen hinzugefügt, wird die Tabelle gelöscht und es folgen wieder 10 Zeilen.
Die paintComponent Methode soll nur bei diesem Übergang (Tabelle löschen) ausgeführt werden.

Sowohl die Tabelle als auch die Animation sind in einem eigenen SplitPane.

Wie kann ich verhindern, dass die paint Methode bei jedem addRow ausgeführt wird?

vereinfachter Code für Tabelle:
Java:
DefaultTableModel table = new DefaultTableModel();
for (int i = 0; i < 10; i++){
  table.addRow(data);
}

Code um Animation anzuzeigen:
Java:
splitpane.setBottomComponent(new Animation());
clearTable();
 
S

SlaterB

Gast
grundsätzlich sollte es dir ganz egal sein, wann warum wie oft paintComponent() ausgeführt wird,
du solltes nicht den Start oder die Schritt-Weite z.B. einer Animation davon abhängig machen,
das lieber zeitlich steuern, egal ob jedes Bild 3x gemalt wird,
aber ist natürlich aufwändig

Möglichkeiten sind noch:
- die 10x addRow() in einen SwingUtilities.invokeLater()-Block setzen, bekannt?
sowieso zu empfehlen bei allen GUI-Änderungen, allerdings nur nötig wenn du einen separaten Thread hast,
wo steht der Code mit dem add(), von wo aufgerufen?
anderenfalls die paints wiederum kaum vorstellbar, also Thread?

kommen die add() wirklich direkt hintereinander in einer Schleife oder dauert es jeweils bisschen mit Berechnung?
falls in direkter Folge sollte gar nicht die Zeit sein, jeweils mit paint zu reagieren..

- DefaultTableModel selber bietet noch eine Methode, um die gesamten Daten in einem Schlag auszutauschen,
vorher separat sammeln usw.,
oder greife tiefer ins Model ein, eigene Implementierung, Methode add10Rows() mit nur einem Aufruf an die JTable am Ende,
siehe Quellcode DefaultTableModel als Vorlage
 

mutoki

Mitglied
wo steht der Code mit dem add(), von wo aufgerufen?
anderenfalls die paints wiederum kaum vorstellbar, also Thread?

Ja die add() Anweisung steht in einer run() Methode, also Thread

kommen die add() wirklich direkt hintereinander in einer Schleife oder dauert es jeweils bisschen mit Berechnung?
falls in direkter Folge sollte gar nicht die Zeit sein, jeweils mit paint zu reagieren..

Nein du hast natürlich Recht, es wird zuerst eine Berechnung bzw. Zuweisung ausgeführt.

- DefaultTableModel selber bietet noch eine Methode, um die gesamten Daten in einem Schlag auszutauschen,
vorher separat sammeln usw.,
oder greife tiefer ins Model ein, eigene Implementierung, Methode add10Rows() mit nur einem Aufruf an die JTable am Ende,
siehe Quellcode DefaultTableModel als Vorlage

Die Zeilen alle auf einmal auszutauschen wäre zwar möglich, ist aber nicht gewünscht, da der Benutzer sehen soll, dass Zeile für Zeile hinzugefügt wird.

Es irritiert mich einfach wenn ich beim debuggen in der Konsole die Ausgaben mehrfach erhalte, obwohl ich den Code eben nur einmal aufgerufen habe. Deswegen kam ja auch die Frage auf.
 

Marco13

Top Contributor
Sobald das paintComponent egal ist, kann man ein "langsames Hinzufügen" GROB mit sowas machen wie
Java:
void addRows()
{
    Thread adder = new Thread(new Runnable())
    {
        @Override
        public void run()
        {
            Row row = readRowFromSomewhere();
            doAddRow(row);

            sleepIfDesired();
        }
    });
    adder.start();
}


private void doAddRow(final Row row)
{
    SwingUtilities.invokeLater(new Runnable())
    {
        @Override
        public void run()
        {
            tableModel.addRow(row);
        }
    });
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
N Hashmap in DefaultTableModel AWT, Swing, JavaFX & SWT 1
M JList wird angezeigt, JTable (DefaultTableModel) nicht AWT, Swing, JavaFX & SWT 7
Z DefaultTableModel + checkbox AWT, Swing, JavaFX & SWT 0
F AddRow funktionier nicht (DefaultTableModel) AWT, Swing, JavaFX & SWT 3
M Swing DefaultTableModel Problem AWT, Swing, JavaFX & SWT 5
H JTable - DefaultTableModel vs AbstractTableModel AWT, Swing, JavaFX & SWT 5
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
D Swing DefaultTableModel setValueAt Methode AWT, Swing, JavaFX & SWT 7
J Objekte aus Defaulttablemodel AWT, Swing, JavaFX & SWT 5
J JTable DefaultTableModel - Änderungen feststellen AWT, Swing, JavaFX & SWT 8
B Swing DefaultTableModel, Checkbox in Spalte AWT, Swing, JavaFX & SWT 4
M DefaultTableModel setDataVector AWT, Swing, JavaFX & SWT 6
H Zeile in DefaultTableModel hinzufügen, ProgressBar AWT, Swing, JavaFX & SWT 4
J Swing JTable - Konflikt DefaultTableModel+DefaultTableColumnModel AWT, Swing, JavaFX & SWT 7
calzone Swing JTable/DefaultTableModel, rowData auslesen ? AWT, Swing, JavaFX & SWT 15
T Von JTable auf DefaultTableModel AWT, Swing, JavaFX & SWT 2
A insertRow: is ambiguous for the type DefaultTableModel ? AWT, Swing, JavaFX & SWT 2
T JTable und DefaultTableModel AWT, Swing, JavaFX & SWT 4
D Nochmal ne Frage zum DefaultTableModel AWT, Swing, JavaFX & SWT 8
D DefaultTableModel aktualisieren AWT, Swing, JavaFX & SWT 15
G Funktionsfrage zu DefaultTableModel AWT, Swing, JavaFX & SWT 2
J JTablemi DefaultTableModel:Spaltennamen werd.nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Daten von DefaultTableModel sortieren AWT, Swing, JavaFX & SWT 3
J JTableModel: DefaultTableModel vs. AbrstractTableModel AWT, Swing, JavaFX & SWT 4
K JComboBox in DefaultTableModel darstellen AWT, Swing, JavaFX & SWT 2
K DefaultTableModel makierte Row ermitteln AWT, Swing, JavaFX & SWT 6
B fire methoden auch bei defaultTableModel? AWT, Swing, JavaFX & SWT 5
A defaultTableModel "Problem" AWT, Swing, JavaFX & SWT 6
M Wann AbstractTableModel und wann DefaultTableModel AWT, Swing, JavaFX & SWT 4
M DefaultTableModel, kann keine Rows hinzufügen AWT, Swing, JavaFX & SWT 3
M Problem mit JTable und DefaultTableModel AWT, Swing, JavaFX & SWT 2
L JTable (DefaultTableModel) nach Spalte sortieren-TableSorter AWT, Swing, JavaFX & SWT 2
A JTable Änderungen anzeigen (DefaultTableModel) AWT, Swing, JavaFX & SWT 5
G JTable/DefaultTableModel zur Seite scollen AWT, Swing, JavaFX & SWT 3
J DefaultTableModel einlesen aus *txt AWT, Swing, JavaFX & SWT 2
J JOptionPane ruft sich selbst immer wieder neu auf AWT, Swing, JavaFX & SWT 3
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
T JList ruft getElementAt nicht mehr auf AWT, Swing, JavaFX & SWT 4
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
F Wer ruft paintComponent() Methode auf? AWT, Swing, JavaFX & SWT 9
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
H new Operator in paintComponent - Speicherprobleme vorprogrammiert? AWT, Swing, JavaFX & SWT 2
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
G update, paintComponent AWT, Swing, JavaFX & SWT 1
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
C Objekt an paintComponent weitergeben AWT, Swing, JavaFX & SWT 1
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
D PaintComponent wird nicht aufgerufen AWT, Swing, JavaFX & SWT 3
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I (JPanel) paintComponent mit Zeitverschiebung (Sleep/Wait) AWT, Swing, JavaFX & SWT 1
K Swing paintComponent, JPanel auslagern, ChangeEvents AWT, Swing, JavaFX & SWT 7
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
B AWT paintComponent wird nur 2 mal ausgeführt?! AWT, Swing, JavaFX & SWT 5
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
D paintComponent() mit transparentem Hintergrund. AWT, Swing, JavaFX & SWT 0
G Swing Flackern nach Override von paintComponent() AWT, Swing, JavaFX & SWT 3
M Swing paintComponent in rekusivem JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 2
T Swing paintComponent(); AWT, Swing, JavaFX & SWT 24
K Swing JButton paintComponent überschreiben AWT, Swing, JavaFX & SWT 5
Kenan89 2D-Grafik paintComponent quetsch alles in Panel AWT, Swing, JavaFX & SWT 26
B 2D-Grafik paintComponent für rechteckigen Bereich? AWT, Swing, JavaFX & SWT 6
P Swing problem mit paintComponent AWT, Swing, JavaFX & SWT 2
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
K paintComponent nicht aufgerufen AWT, Swing, JavaFX & SWT 2
J Mal wieder Probleme mit paintComponent AWT, Swing, JavaFX & SWT 3
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
S auf paintComponent() warten AWT, Swing, JavaFX & SWT 34
W JPanel Überschreiben // paintComponent? AWT, Swing, JavaFX & SWT 4
propra Wieso wird paintComponent() beim Start 2 malausgeführt? AWT, Swing, JavaFX & SWT 4
T BufferedImage bei paintComponent AWT, Swing, JavaFX & SWT 6
P JLabel paintComponent AWT, Swing, JavaFX & SWT 3
Z Swing paintcomponent und menbar Problem AWT, Swing, JavaFX & SWT 3
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
R 2D-Grafik auf JPanel zeichen - ohne @Override paintComponent AWT, Swing, JavaFX & SWT 6
A Probleme mit paintComponent & BorderFactory AWT, Swing, JavaFX & SWT 2
A paintComponent AWT, Swing, JavaFX & SWT 4
T Rechtecke zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 3
R paintComponent direkt bei actionPerformed aufrufen AWT, Swing, JavaFX & SWT 2
P Swing Vom BufferedImage bei paintComponent nur soviel zeichnen, wie nötig AWT, Swing, JavaFX & SWT 3
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
A paintComponent() - Animation AWT, Swing, JavaFX & SWT 2
K JPanel und paintComponent AWT, Swing, JavaFX & SWT 8
E 2D-Grafik Zeichnen außerhalb der "paintComponent"-Methode? AWT, Swing, JavaFX & SWT 5
C Checkbox in Liste deaktivieren und paintComponent explizit aufrufen AWT, Swing, JavaFX & SWT 12
C Performance-Problem beim Überschreiben von paintComponent() AWT, Swing, JavaFX & SWT 2
P 2D-Grafik PaintComponent() übernimmt keine Werte aus update() AWT, Swing, JavaFX & SWT 8
F Swing Problem mit KeyListener||paintComponent() in JFrame AWT, Swing, JavaFX & SWT 12
P Game of Life - PaintComponent-Problem / Timer? AWT, Swing, JavaFX & SWT 8
B Anzeigefehler in GridBagLayout durch paintComponent(Graphics g) AWT, Swing, JavaFX & SWT 3
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
J paintComponent() übergeben AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben