Archief - JAVA, JTable laten refreshen.

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

da_flux

Legacy Member
Ik heb dus een JTable, gelinkt aan een MySQL database.
Bij aanroep van tabel wordt die gevuld met gegevens van MySql database.
Nu kun je hier een nieuw rij in toevoegen , dat werkt allemaal.

Ik gebruik deze code. voor refreshen tabel momenteel
Code:
 masterTable = new JTable(model);

        int numrows = model.getRowCount();
        for (int i = numrows - 1; i >= 0; i--) {
            model.removeRow(i);
        }

        tabelInvullen("werknemer");
       model.fireTableDataChanged();

Dat werkt deels, want als ik op de knop refresh druk moet ik eerst mijn venster is minimaliseren, kleiner of groter zetten en dan wordt et gerefresht.
Dus het wordt niet dadelijk gerefresht als ik op die knop druk.
Wat is nu een betere manier om te refreshen?

da_flux

Legacy Member
Kheb geen listener nodig, want ik weet zowiezo dat die tabel upgedate is, en dit:
model.fireTableDataChanged();
had ik erbijgezet om te zien of het dan niet direct zou mijn tabel updaten.
Want die code update mijn tabel wel, maar ik moet eerst zo nog is minzimize of maximaliseren...
en dat vindt ik niet normaal

Squealer

Legacy Member
uw refresh lukt volgens mij dan wel, enkel uw window wordt niet hertekend. Probeer eens een repaint/revalidate na de refresh van de table.

MiniJeffrey

Legacy Member
Idd je moet via een observable patroon werken. Dat betekent dat de GUI geinformeerd zal worden wanneer een wijziging plaatsvindt en dan kan je via de update() methode je tabel aanpassen.

forloRn_

Legacy Member
Dat is het geval. Die JTable registreert zich als listener bij dat TableModel, en die fireTableDataChanged() waarschuwt de JTable. Als je in de code gaat kijken, zie je trouwens dat er ook een repaint zou moeten gebeuren.

froginvasion

Legacy Member
zoals al vermeld:
leer het observer pattern.
Zit standaard al in java onder de interface Observer(met de update() method)
en de interface Observable, handig zodat je dit zelf niet hoeft te maken.

Tip:
lees
Head first design patterns.

forloRn_

Legacy Member
Tip:
lees
mijn vorige post.

da_flux, ik hoop dat je niet bij elke refresh een nieuwe JTable instantieert.

phil_r

Legacy Member
Je zoals men zei het Observer Patroon zou het moeten lukken.

Om een beetje op weg te helpen:
De klasse waarin je die methode 'tabelInvullen("werknemer");' hebt maak je die klasse dus:

Code:
class UwKlasse implements Observable { ... }

Vervolgens zet je onderaan die methode in die klasse:
Code:
setChanged();
                notifyObservers( tabel_data_dat°gewijzigd );

In de User Interface klasse zet je:
Code:
class UIklasse implements Observer {
  // Constructor:
  public UIklasse() {
    addObserver( UwKlasse );
  }

  public void update(Observable obj, Object arg) {
    if (arg instanceof TableData* ) { // Type van je data
      //.. Verander tabel inhoud
  }

}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan