Toon posts:

[java] swing actionlistener ?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een applicatie waarin ik gebruik maak van JButtons en dus van Swing. Nu gebruikte ik om de acties van de buttons af te luisteren een addListener (awt container) Maar moet ik nu ik swing gebruik ook overstappen naar een andere listener?
Kan ik nog steeds dezelfde listener gebruiken? Of is dit niet aan te raden (wat wel?)

:?

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

je kunt gewoon op dezelfde manier doorgaan:

jButton.addActionListener(this);

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

Alarmnummer

-= Tja =-

je kunt beter een aparte classe maken voor de actionListerer zodat je niet een algemene (bijvoorbeeld op de jframe) gaat maken, want je code word super onoverzichtelijk en lastig om uit te breiden. Je kunt beter gebruik maken van een Action:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
KerstmanAction extends AbstractAction
{
    public  KerstmanAction()
    {
        super("hohoho");
    }
    
    public void actionPerformed(ActionEvent ae)
    {
        System.out.println("hohoho");   
    }
}


KerstmanAction kerstmanAction = new KerstmanAction();
JButton kerstmanButton1 = new JButton(kerstmanAction);
JButton kerstmanButton2 = new JButton();
kerstmanButton2.setAction(kerstmanAction);//zo kan het ook.

//en je kan nu zelfs zeggen:
kerstmanAction.setEnabled(false)

//en hierdoor gaan ketstmanButton1 en kerstmanbutton2 gedisabled worden.
//ideaal als meerdere knoppen op (toolbar en menu bv) op dezelde action 
//aangesloten moeten worden.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Een algemeen niet begrepen punt: Listeners zijn geen hokus-pocus. Het is gewoon een standaard Java constructie.

Een ActionListener is een interface. Zoals je hopelijk weet geeft die interface aan waaraan implementaties van die interface moeten voldoen.

Via een interface kan je instanties van klassen (objecten) gebruiken zonder dat je de concrete implementatie kent. Je roept namelijk gewoon methoden aan via deze interface.

Veel userinterface componenten kunnen akties produceren: enters in tekstvelden, klikjes op knoppen enzovoorts. Het systeem in Java om een stukje code aan te roepen als er een aktie plaats vindt werkt via een interface 'ActionListener'. Zoals ik net heb uitgelegd kan de knop hierdoor een stukje code aanroepen zonder dat hij de concrete implementatie van die code kent: generiek dus.
Je kunt aan componenten een ActionListener toevoegen. Beter gezegd: je kunt een instantie toevoegen van een klasse die de interface ActionListener implementeert. Als er wordt gezegd 'je voegt een ActionListener toe' wordt er dus bedoeld: 'je voegt een object toe wat zich kan manifesteren als een ActionListener'.

Als je 'this' toevoegt als ActionListener moet de klasse van 'this' de interface ActionListener implementeren....

Er zijn op dit punt dus helemaal geen verschillen tussen AWT en Swing.

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