Toon posts:

java: gui's en handlers

Pagina: 1
Acties:

Verwijderd

Topicstarter
Wanneer ik een grafische user interface bouw, met acionListeners e.d., krijg ik altijd een zeer onoverzichtelijke klasse. Daarom wil ik de gui en de 'action handler' scheiden. Het probleem is dan echter dat de handler een object in de gui wordt en andersom. Dit vanwege de actionListener die in de gui zit en dus bij een action de handler moet aanroepen, en de handler die de gedane action aan de gui moet doorgeven. Iemand suggesties?

Verwijderd

Ik begrijp niet precies uit je verhaal hoe je nu te werk gaat, maar misschien heb je hier iets aan: http://www.javaworld.com/javaworld/javaqa/2002-03/02-qa-0322-morelisteners.html

edit: Nu ik nu trouwens nog een keer kijk is dit denk ik trouwens toch niet wat je bedoelt.

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
code:
1
2
3
4
5
6
7
8
9
10
11
public class Guitje {
  private Handler handler
  public void init() {
    handler = new Handler( this ) {
  }
}

class Handler implements ActionListener {
  public Handler( Guitje guitje ){
  }
}

En dan in de gui handler doorgeven aan andere classes en dan .addActionListener( handler ), denk ik. :o
Als iemand een actie heeft gedaan kan je met guitje.doeiets() de gui iets laten doen. ;)

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
public class Guitje {
  private Handler handler
  public void init() {
    handler = new Handler( this ) {
  }
}

class Handler implements ActionListener {
  public Handler( Guitje guitje ){
  }
}
Bij deze oplossing heb ik nog steeds het probleem dat Handler moet weten welke componenten Guitje bevat. Anders is het niet mogelijk om in een textfield de verandering weer te geven.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Tja, het is misschien een beetje puristisch geneuzel maar in de praktijk werkt het toch echt uitstekend:

Een controller (ActionListener) zou eigenlijk niets direct in de view moeten aanpassen. Als je model gebaseerd werkt (MVC dus) past de controller het model aan en de wijzigingen hiervan zie je terug in je view.

Als je met Swing werkt is dit allemaal vrij eenvoudig te realiseren om Swing zelf al model gebaseerd is. Op deze manier hoef je dus vanuit je controller nooit een referentie naar de GUI te hebben. Je maakt een model aan en dit model geef je mee aan zowel de GUI als de controller. De controller geef je bovendien uiteraard ook nog door aan de GUI.

Ik verzamel m'n ActionListeners meestal even in een Controller omdat al dat gepruts met die losse ActionListeners niet zo lekker werkt. De GUI kan dan aan de hand van bekende identifiers voor Actions deze Actions uit de Controller halen.

In de praktijk zitten er nog wel wat kleine haken en ogen aan (hoe sluit je bijvoorbeeld de GUI) maar het is allemaal wel goed te realiseren met een beetje geknutsel.

Wat je voor je moeite terug krijgt is een veel betere scheiding van je onderdelen in je applicatie en een grotere kans op het hergebruik van een GUI of een deel van de Controller omdat de Controller niet vast zit aan een bepaalde GUI.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Ik zou eens naar setActionCommand en getActionCommand kijken. :)
En Handler zou alleen de actions af moeten vangen, kijken wat er gedaan is en dit doorgeven aan de gui die dan iets leuks doet, imho.
Pagina: 1