Toon posts:

[Java] Toepassen van ActionListeners

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik kreeg zojuist een discussie met iemand over het gebruiken van meerdere ActionListeners in één klasse.

Stel je hebt 10 Buttons en je wilt aan allemaal een ActionListener toevoegen...dat kan dan op twee manieren die vaak gebruikt worden.

1. Je schrijft één actionPerformed methode en zoekt met if/else if uit op welke Button geklikt is

2. Je geeft elke Button een eigen ActionListener (dus als inner class)

Dit is wat ik denk:

Voordelen 1:
- Lekker overzichtelijk
- Minder geheugen gebruik omdat er maar 1 object aangemaakt hoeft te worden

Voordelen 2:
- Elke Button krijgt keurig zijn eigen ActionListener

Momenteel gebruik ik methode 2. En dat is puur omdat "men" dat in het algemeen meer aanraadt dan methode 1. Maar ik wil nu wel eens weten hoe het echt zit, en of beide methoden meer voor- en nadelen hebben.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Methode 1, lekker overzichtelijk?
Ik ben nooit zo dol op methodes die > 10-20 regels beslaan die uit allerlei verschillende delen bestaan (en opzich verschillende methodes horen te zijn)
Verder moet je gaan uitkijken met je variabeles. Die krijgen een te grote scope (gehele actionPerformed), of alleen binnen de ifs waardoor ze eigenlijk gewoon losse methodes zijn.

Een actionListener object zal sowieso weinig geheugen beslaan. Hoeveel methodes en members heeft hij nou? Bedenk je ook dat de overhead voornamelijk bij het aanmaken van de objecten zal ontstaan, niet bij het gebruiken :) Misschien zijn aparte innerclasses zelfs sneller. Een vtable lookup (voor het polymorphisme) kost waarschijnlijk minder tijd dan (worst case) n if's aflopen :)

Verwijderd

nou even wat kort door de bocht he.... maar dat hele if... then .... else voor ActionListener zie ik echt niet als geen goede manier van coden! je maakt code die moeilijk te lezen is en dat moet je niet willen... ik praat dus over methode 1

Sta ik ook niet alleen in geloof ik, in de Sun certicatie programs wordt je ook gewoon netjes geleerd om methode 2 toe te passen. Dat moet niet zonder reden zijn, waarschijnlijk omdat het lekker overzichtelijk is :p

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 19-08 23:13
Over het algemeen groepeer ik bepaalde functionaliteit in een actionlistener. Daardoor zullen er hooguit 3 of 4 ActionCommands gecheckt hoeven te worden. Althans, meer ben ik nog niet tegengekomen per ActionListener. Worden het er wel meer, dan kan je altijd weer specifieker opdelen.
Ik moet alleen wel zeggen dat ik er nou niet bepaald van overtuigd ben dat, wat ik hierboven zeg, "the way to go" is.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik werk eerlijk gezegd nauwelijksnog met action listeners, het zijn tegenwoordig voornamelijk Action objecten. Een Action object kan je vergelijken met de 'command' design pattern uit het gof boek, en wat je doet is gewoon een actie bundelen in 1 object zodat meerdere objecten dezelfde commando kunnen gebruiken. Als je kijkt naar de AbstractAction (een convenience implementatie van de Action interface), dan kan je hier bv ook icoontjes en tekst ed invullen, en zal dit op de buttons en menuitems bv dit ook op die wijze erin staan. Een ander voordeel is dat je een action kan disabelen, hierdoor zullen componenten die een action aankunnen, zichzelf ook gaan disabelen.

[edit]
Dus geen centrale actionlistener, die overal naar loopt te luisteren, maar gewoon 1 actionlistener per functionaliteits aansturing (dus loadmenuitem, loadbutton en loadtoolbarbutton) die mogen gezamelijk 1 actionlistener delen (en een Action is dus nog beter).

[ Voor 20% gewijzigd door Alarmnummer op 13-08-2003 13:28 ]