login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[JAVA] luisteren naar button met enkel icon (Opgelost)

Offline Dierre - 27/12/2007 16:52 (laatste wijziging 27/12/2007 16:56)
Avatar van DierreMySQL interesse Hoe kan je "luisteren" naar een knop met enkel een Icon en geen tekst?

Wanneer je tekst op je knop zet dan kan de luisteraar er bijvoorbeeld als volgt uitzien:

  1. class BPLuisteraar implements ActionListener {
  2.  
  3. public void actionPerformed(ActionEvent evt) {
  4.  
  5. String actionCommand = evt.getActionCommand();
  6.  
  7. System.out.println(actionCommand.toString());
  8. }
  9.  
  10. }


maar wanneer er geen tekst staat, dan kan je geen gebruik maken van de String actionCommand, hoe kan je dan luisteren naar die knop?

11 antwoorden

Gesponsorde links
Offline Wim - 27/12/2007 16:53
Avatar van Wim Crew algemeen mss handig om de taal erbij te vermelden. C++ oid?
Offline Dierre - 27/12/2007 16:56
Avatar van Dierre MySQL interesse sorry vergeten, bij deze gebeurd...
Offline cloudstrife - 27/12/2007 17:06
Avatar van cloudstrife PHP beginner Je kan dit doen door de source op te vragen bij je ActionEvent.
  1. evt.getSource() == btnOK


Waarbij btnOK dan de knop is waar je de actionlistener aanhangt
  1. btnOK.addActionListener(this);


Persoonlijk gebruik ik liever geneste klassen om dit te doen, dan moet je niet in 1 methode gaan kijken wie ze heeft opgeroepen. Hoe je dit doet vind je hier terug:

http://en.wikib...ed_Classes
Offline Dierre - 27/12/2007 17:21
Avatar van Dierre MySQL interesse Ik gebruik een inner-class als luisteraar. En mijn buttons worden "dynamisch" aangemaakt via een for-lus omdat ik niet altijd met een zelfde aantal buttons werk. Hierdoor hebben mijn buttons geen naam...

Kan ik dan ook de source opvragen bij ActionEvent zoals in jou voorbeeld? (ik dacht van niet...)

Zijn er nog andere mogelijkheden om te luisteren naar een button???
of zie ik het voorbeeld van cloudstrife helemaal verkeerd...
Offline cloudstrife - 27/12/2007 17:46
Avatar van cloudstrife PHP beginner Al eens geprobeert om die source op te vragen? In principe is dit altijd mogelijk, elk event heeft immers altijd een source die het event oproept.

Wat wil je dan juist maken?

Offline Dierre - 27/12/2007 17:54
Avatar van Dierre MySQL interesse we moeten voor examen van Java een memoryspel maken
de gebruiker moet de grootte van het spelbord kunnen instellen (= aantal buttons is dus variabel). Daarom heb ik mijn knoppen via een for-lus aangemaakt... en hebben ze dus geen naam meegekregen.

Wat ik nu niet vind is dat wanneer er op een knop geklikt wordt een figuur getoond moet worden... tijdens het spel moet natuurlijk altijd dezelfde figuur op dezelfde twee knoppen terug komen...

Maar voor mij is nu het belangrijkste dat ik een knop kan laten luisteren. Een ander icon plaatsen zal dan wss niet zo moeilijk meer zijn denk ik...
Offline cloudstrife - 27/12/2007 18:08
Avatar van cloudstrife PHP beginner Dan zou ik toch gewoon aan mijn knop die actionlistener hangen via een inner class, dan stop je daar toch gewoon zijn acties in waarmee hij het plaatje toont en als die inner class is aangemaakt stop je gewoon de knop in je collectie.

Als dat niet gaat misschien eens je knop aanmaken met text en icon (dit is geloof ik de 3de constructor van een JButton), maar ik weet nu niet zeker of hij ze dan alle 2 toont.

Als dat niet gaat kan je toch maar proberen om je button te krijgen via getSource() deze geeft je namelijk een object terug waar je wss mits een typecast je icon kan uit ophalen. Ik weet niet zeker of dit lukt maar het is denk ik wel het proberen waard.
Offline Dierre - 27/12/2007 18:16
Avatar van Dierre MySQL interesse ik heb inderdaad al geprobeerd om text en een icon op mijn button te zetten en daar toont hij ze alle twee. Daar kan je een actionListener opzetten, maar echt proper staat het niet als die tekst erop staat.

Wat je zegt over die inner class met knop in collectie enzo ben ik toch niet echt mee :-s
kan je daar een klein voorbeeldje van geven?
Offline cloudstrife - 27/12/2007 18:21
Avatar van cloudstrife PHP beginner Heb momenteel geen compiler staan dus kan niet echt iets testen, maar ik neem aan dat je je knoppen in een array, arraylist, list, vector, of iets anders van collectie duwt? Als je daar een instantie (= new JButton()) in duwt kan je toch ook direct er een innerclass aan meegeven die dan het klik event afwerkt.
Offline Dierre - 27/12/2007 18:26 (laatste wijziging 27/12/2007 18:27)
Avatar van Dierre MySQL interesse ik stop mijn JButton-objecten inderdaad in een ArrayList

met onderstaande code maak ik mijn knoppen aan:
  1. private void createButtons() {
  2.  
  3. //Bepalen aantal knoppen
  4. int aantalButtons = lengte * breedte;
  5.  
  6. for(int i = 0; i < aantalButtons; i++) {
  7.  
  8. figButtons.add(new JButton(""+i,uploadStdIcon()));
  9.  
  10. }
  11. }


maar begrijp dan niet echt wat je bedoeld met het meegeven van die innerclass   

In dezelfde classe heb ik wel een innerclass die als luisteraar zal fungeren...
Offline cloudstrife - 27/12/2007 18:30 (laatste wijziging 27/12/2007 18:33)
Avatar van cloudstrife PHP beginner Wel dat je hierbij het volgende doet: (het zal niet 100% correct zijn maar het gaat maar om de denkwijze)

  1. private void createButtons() {
  2.  
  3.  
  4.  
  5. //Bepalen aantal knoppen
  6.  
  7. int aantalButtons = lengte * breedte;
  8. JButton btntmp;
  9.  
  10.  
  11. for(int i = 0; i < aantalButtons; i++) {
  12. btntmp = new JButton(""+i,uploadStdIcon());
  13. btntmp.addActionListener(new ActionListener(){
  14. public void actionPerformed(ActionEvent e){
  15. //toon afbeelding
  16. }});
  17.  
  18.  
  19. figButtons.add(btntmp);
  20.  
  21.  
  22.  
  23.  
  24. }
  25.  
  26. }

Ik heb wat zitten zoeken en kwam ergens iets tegen waarbij men net als jij een icon zet op de knop maar daarbij toch nog een appart commandArgument meegeeft aan de knop. Misschien kan je dit eens proberen.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.287s