[Java] meerdere views updaten

Pagina: 1
Acties:

  • Tjeerd
  • Registratie: Oktober 1999
  • Laatst online: 12-02 16:18

Tjeerd

Be Original, Be Yourself.

Topicstarter
Om gelijk maar met de deur in huis te vallen, ik heb het volgende probleem:

Ik heb een eigen JComponent gemaakt genaamd Doos met daarin een MouseListener. Het komt er dus op neer dat als je met de muis over/in 'Doos' komt deze daar op reageert. Hartstikke fijn. Nu heb ik een reeks van die Doos-objecten in een JPanel gestopt. Werkt ook prima en als je over een 'Doos' heen gaat krijg ik netjes een melding via System.err.println() dat ik er over heen ga.

Nu mijn punt, ik heb meerdere JPanels (views) en al die JPanels voeg ik toe aan mijn JApplet. Zodra ik in één JPanel op bijv. een 'Doos' klik. Wil ik dat de andere JPanels (views) daar ook van op de hoogte worden gesteld.

Dan nu de vraag: hoe kan ik dit het beste doen? Simpelweg referenties meegeven aan elk JPanel? Of gebruik maken van Observers/Observables? Of nóg een andere manier? Tot nu toe doe ik het altijd met referenties meegeven aan de constructor bijvoorbeeld, maar ik vind dit een beetje vies smaken.

www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:29
Ik zou eens kijken naar die Observers/Observables, en het Observer pattern.

https://fgheysels.github.io/


  • Tjeerd
  • Registratie: Oktober 1999
  • Laatst online: 12-02 16:18

Tjeerd

Be Original, Be Yourself.

Topicstarter
whoami schreef op woensdag 11 oktober 2006 @ 10:54:
Ik zou eens kijken naar die Observers/Observables, en het Observer pattern.
Ik heb er naar gekeken en op de fora van Sun Java. Maar het implementeren in mijn eigen toepassing raak ik nog in de knoop.

Ik heb mijn 'Doos'-object Observable gemaakt en als ik het dan goed begrijp moet mijn JPanel die Doos-objecten gaan observeren? Maar dan is alleen dat JPanel nog maar op de hoogte van de events en niet de andere JPanels. Ik zie niet direct hoe ik die andere JPanels op de hoogte moet houden van events. Allicht maak ik ergens een denkfout waardoor ik iets over het hoofd zie, maar enige verheldering is welkom.

www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.


  • maxjuh
  • Registratie: November 2004
  • Laatst online: 19-03-2025
Ik zou een klasse maken waarin je alle objecten aanmaakt om op die mannier de models aan de views mee te geven.

bijv:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class StartApp
{
    public static void main(String[] args)
    {
        Doos doos1 = new Doos();
        Doos doos2 = new Doos();
        
        DosenPanel panel1 = new DosenPanel(doos1, doos2);
        DosenPanel panel2 = new DosenPanel(doos1, doos2);
        
        //Hier zal je dan waarschijnlijk de JPanels doorgeven aan de JAplet
    }
}

  • Tjeerd
  • Registratie: Oktober 1999
  • Laatst online: 12-02 16:18

Tjeerd

Be Original, Be Yourself.

Topicstarter
Nu zijn ze inderdaad benaderbaar vanuit de JApplet, maar hoe weet de JApplet nu wanneer een Doos-object is veranderd?

Het Doos-object zelf heeft momenteel een MouseListener en reageert zelf op events, maar hoe geef ik die events door aan de JApplet/hoe komt de JApplet te weten dat er een Doos-object-event heeft plaats gevonden? Dat is eigenlijk de vraag waar ik niet uit kom.

www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Op het moment dat je wilt dat de jpanel geinformeerd wordt van updates bij je doos object, dan moet je bij je doos object op die plek notify() aanroepen. Deze gooit een update naar alle klasses die dat doos object observen.

Dit staat toch duidelijk beschreven in het Observer pattern...

  • DaRKie
  • Registratie: December 2001
  • Laatst online: 12-02 09:57
Misschien moet je het observer pattern eens beter bekijken (ik gebruik de reeds bestaande classes en interface in de jdk die voor dit pattern gebruikt kunnen worden).

je hebt 2 soorten entiteiten:
- de observable: dit is degene die de observers gaat informeren als er iets gebeurt
- de observer(s): degene die op de hoogte gebracht willen worden als er iets gebeurt met de observable

alle observers informeren de observable dat ze op de hoogte willen blijven:
addObserver(Observer o)

de observable heeft dus een lijst met alle observers. Via deze lijst kun je dus alle observers informeren dat er iets gebeurd is met de observable. Omdat alle observers de Observer interface implementeren, hebben ze ook allemaal de update() functie.
De observable gaat dus van elke observer deze functie aanroepen en zodoende worden ze allemaal geinformeerd.
Pagina: 1