Archief - Java: Array van JButtons en actionListener

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.

Beejee

Legacy Member
Ik heb voor school een project, waarin ik graag gebruik zou maken van het spel galgje.
Het probleem is dat ik momenteel vast zit aan mijn actionListeners.
Ik heb nu de 26 buttons al die elk een letter van het alfabet voorstellen en die elk voorzien zijn van een actionListeners.
Het probleem zit hem nu dat ik zoek naar een een manier om deze 26 buttons allemaal te laten werken met 1 action die dan gewoon altijd een andere letter meekrijgt dat die knop dan voorstelt.
Dus de knop a stelt de string gok="a" en zet dan de methode controleer in actie, om te checken of die wel degelijk in het woord zit)
het enige dat dus steeds verschillend is is de letter die in gok wordt opgeslagen.

mijn code om de knoppen aan te maken
Code:
		//Galgje
		int i;
		StringBuffer buffer;
		a = new Button[26];
		pButtonkes = new JPanel();
		pButtonkes.setLayout( new GridLayout( 2,13) );
		
		// knoppen maken voor spel
		for (i = 0; i <26; i++) 
		{
		    buffer = new StringBuffer();
			buffer.append((char)(i+65));
			a[i] = new Button(buffer.toString());
			a[i].addActionListener( this );
			a[i].setActionCommand("" + i);
			pButtonkes.add(a[i]);
		}

sorry als ik onduidelijk ben.

Yngwie

Legacy Member
Je kan bv in de actionPerformed de sender parameter casten naar een button, daar de labeltekst van ophalen en dat is de letter waarop geklikt is.

bv
Code:
public void actionPerformed(Object sender) {
     Button but = (Button)sender;
     String labeltekst = but.getLabel();
     char gekozenChar = labeltekst.charAt(0);
}

heb al lang geen swing meer gezien dus code is nogal met de losse pols geschreven.

Beejee

Legacy Member
Ik snap niet echt het bovenstaande, zit nu in mijn eerste jaar en grotendeels is alle sop eigen houtje gedaan om mijn mijn project partners.
we leren vooral veel van elkaar en niet van de leerkrachten :p

EDIT:
Ow k ik dank dat ik het begin te snappen, je neemt dus de tekst van de button waarop geklikt is en dat is inderdaad de letter.
Maar het probleem is vooral dat ik dus 1 action wil. tot nu toe heb ik altijd al voor iedere knop een aparte action gebruikt.

Yngwie

Legacy Member
wel met de addActionListener methode geef je aan op welke klasse de actionPerformed moet aangeroepen worden wanneer je op een button klikt. Omdat je bij elke knop addActionListener(this) gebruikt zal bij elke knop dezelfde actionPerformed methode horen. namelijk die van this (de huidige klasse).

Nu is het zaak van in die actionPerformed(Object sender) na te gaan op welke button er precies geklikt is. Dit kan je doen adhv de sender parameter die meegegeven wordt. Omdat de meegegeven parameter van het type Object is zal je deze eerst moeten omzetten naar een JButton.

Vandaar de JButton but = (JButton)sender;

vanaf dan kan je but gebruiken als een gewone JButton waarop je dus methodes kan aanroepen om onder andere de labeltekst op te halen.

Ben nogal gehaast atm dus kan niet veel tijd in mijn uitleg steken maar binnen een uurtje als ik terugben zal ik een poging doen om het iets beter verwoorden

Beejee

Legacy Member
De oplossing blijkt niet echt te werken omdat je geen button kan maken aan de hand van een object

Cycloon

Legacy Member
Gebruik gewoon die actioncommand correct:

a.setActionCommand((char)(65+i));

en dan in je actionPerformed vraag je e.getActionCommand() en je hebt direct de letter die aangeklikt is.

Beejee

Legacy Member
werkt blijkbaar niet omdat je een string moet meegeven aan actioncommand.
en bij de actions zelf geeft hij dan ook een faut omdat hij de string niet kan parsen naar bolean -_-

Beejee

Legacy Member
OMG,
guys het werkt ty voor jullie hulp.
met wat combinatie te maken van al jullie oplossingen is het uiteindelijk gelukt.
Nu kan ik eindelijk dit spel afwerken.
greets

Cycloon

Legacy Member
Beejee zei:
werkt blijkbaar niet omdat je een string moet meegeven aan actioncommand.

Mocht je nog zulke problemen hebben: setActionCommand(Character.toString((char)(65+i)));

Ik weet niet hoe jij je code hebt samengeprutst trouwens als je een combinatie van beiden hebt gebruikt :unsure:

Beejee

Legacy Member
het kan nog gemakkelijker :p
ik heb dus
a.setActionCommand(""+(char)(65+i));;
bij de for lus waar je de knoppen aanmaakt

en dit bij de Actions dus
if(e.getActionCommand().equalsIgnoreCase(""+(char)(65+i)))
{
gok=""+(char)(65+i);
lblOpgave.setText(gok);
}

Yngwie

Legacy Member
Kunt ge de volledige code eens posten? want ik zie dat ge daar een i gebruikt in u actions wat mij doet denken dat ge in u action een lus gebruikt om elke letter af te gaan en te vergelijken of de actionCommand van de gedrukte knop overeen komt met de letter in i wat dus helemaal niet proper is
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