# button mit ENTER betätigen



## biker126 (24. Mrz 2004)

hallöchen

wie kann ichs erreichen, dass ich einen button mit der enter-taste "drücken" kann?
muss ich da n keylistener implementieren und den jedem button hinzufügen? und soll ich dann im keylistener einfach den gleichen code hinschreiben wie in der actionPerformed-methode?? oder soll ich zb. n actionEvent losschicken?

ausserdem weiss ich nicht, wie ich unterscheiden soll welcher button grad den focus hat, weil nur für den soll ja der code ausgeführt werden. muss ich da noch n focuslistener oder sowas implementieren?

wie macht ihr sowas?


----------



## lhein (25. Mrz 2004)

Überprüfung ob Fokus über hasFocus() glaub ich.

Ansonsten kann man Enter für einen Button drücken, wenn dieser den Fokus hat. Sinnvoll wäre allerdings, sich eine Routine zu schreiben, die die Fokusreihenfolge bei deinen Elementen festlegt, da Java nicht sowas kennt, was die Reihenfolge festlegt. In Delphi und anderen Sprachen gabs da glaub immer nen Attribut in den Componenten, was die Reihenfolge abbildet.

Achja, zu beachten ist auch, dass die Methode requestFocus() nur eine Anfrage darstellt und man nicht sicher sein kann, ob die Componente, die den Fokus requested hat diesen auch bekommt bzw. bekommen hat.

Aber genaueres dazu lies mal unter den Componenten in den Methoden requestFocus und requestFocusInWindow wars glaub nach.

LR


----------



## Beni (25. Mrz 2004)

LR hat gesagt.:
			
		

> Sinnvoll wäre allerdings, sich eine Routine zu schreiben, die die Fokusreihenfolge bei deinen Elementen festlegt, da Java nicht sowas kennt, was die Reihenfolge festlegt.


Von dem FocusManager und der FocusTraversalPolicy hast du aber auch schon gehört? Die Reihenfolge ist vielleicht ein bisschen chaotisch, aber sie ist vorhanden.

mfg Beni


----------



## biker126 (25. Mrz 2004)

hab ich das richtig verstanden?

wenn ein button den fokus hat kann man ihn automatisch mit enter betätigen? aber wo muss ich dann den code hinschreiben? weil atm passiert bei meiner applikation noch nix...


----------



## Beni (25. Mrz 2004)

In den ActionListener, es sollte keinen Unterschied machen, ob ENTER oder die Maus benutzt wurde.
Du benutzt schon ein Betriebssystem, bei dem ENTER existiert?

Und sonst kannst du mal einem einzigen Button einen KeyListener hinzufügen, um rauszufinden, ob die KeyEvents überhaupt dort ankommen.

mfg Beni


----------



## lhein (25. Mrz 2004)

Beni hat gesagt.:
			
		

> LR hat gesagt.:
> 
> 
> 
> ...




Japp, kenne ich. Mit Routine habe ich nicht gemeint, dass er sich nen eigenes Fokusmanager schreiben soll, sondern dass er sich um es mit den korrekten Worten auszudrücken, eine eigene TraversalPolicy schreiben soll.

LR


----------



## biker126 (25. Mrz 2004)

hmm, also entweder bin ich zu blöd oder meine actionPerformed is einfach falsch...

so wie ich euch verstanden haben müsste ich rein gar nix spezielles machen damit man einen button mit enter betätigen kann, richtig?

also meine methode sieht atm so aus:

```
class MyActionListener implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
        String cmd = event.getActionCommand();
        if (cmd.equals("ButtonLabel"))
        {
            // tu dies und das
        }
        else if (cmd.equals("AnderesButtonLabel"))
        {
            // mach was anderes
        }
    }
}
```

müsste ich an der was ändern, damit ENTER auch geht. weil atm gehts wie gesagt nicht...


----------



## Beni (26. Mrz 2004)

Wenn diese ActionListener richtig funktioniert, wenn du mit der Maus auf den Button klickst, dann musst du ihn nicht ändern.

Ich frag nochmal: kommt das KeyEvent beim Button an? Zum testen diesen Code einfügen:
	
	
	
	





```
button.addKeyListener(new KeyAdapter(){
  public void keyPressed( KeyEvent e ){
    System.out.println( "Ok, die KeyEvents kommen beim Button an. Werden aber falsch verarbeitet?" );
  }
});
```

mfg Beni


----------



## SBS (26. Mrz 2004)

Hi, nun gibt sicherlich immer mehrere Möglichkeiten, wobei das mit dem Focus hab ich noch nicht gemacht, ich hab es neulich so gelöst:



> ```
> ...
> private KeyListener kl; //some keylistener
> ...
> ...



Hoffe das hilft dir weiter, grüße


----------



## biker126 (26. Mrz 2004)

so, hab jetzt mal beni's keylistener nem button hinzugefügt. und es wird einfach das System.out.... ausgeführt wenn man bei dem button enter drückt.
heisst das jetzt, dass die actionPerformed beim enterdrücken DOCH NICHT ausgeführt wird???
muss ich die umschreiben oder muss ich n keylistener implementieren?


----------



## Beni (26. Mrz 2004)

Seltsam, ... verstehe ich nicht  ???:L


----------



## bygones (26. Mrz 2004)

ich denke es ist zeit mal die Klasse zu posten !!


----------



## biker126 (28. Mrz 2004)

die "actionPerformed" ist ein folgender klasse


```
class Fenster extends Frame implements ActionListener
```

so ungefähr. hab die dateien atm nich hier. die sind auf nem anderen pc... *g*
aber wär trotzdem kewl wenn ihr mir weiterhelfen könntet


----------



## Beni (29. Mrz 2004)

ich denke es ist zeit mal die *ganze *Klasse zu posten !!


----------



## biker126 (29. Mrz 2004)

hui... die is aber saulang und isn "krüppel" code ^^

aber sie am WE mal posten. hab die daten wie gesagt ned hier. aber ihr könnt sie euch dann ja gerne anschauen .


----------

