eine einfache Frage: Wie soll ich das implementieren, dass einen JButton durch Drücken "Return" Key gleichwirkend gedrückt wird.
Code:
JPanel jp = new JPanel();
JButton b = new JButton("Enter");
jp.add(b);
jp.addKeyListener(new KeyLister());
.........................................
class KeyListener extends KeyAdapter {
public void keyPressed(KeyEvent e) {
if (e.getSource() == KeyEvent.VK_ENTER)
{.............} // was soll hier rein
danke erstmal. Es funktioniert aber nicht, dh. es macht nichts wenn ich "Return" drücke. Ich weiss nicht ob ich irgendwo einen Fehler gemacht habe. Die Code sieht so aus:
Code:
class JP extends JPanel{
private JButton b;
public JP(){
b = new JButton("Enter");
this.add(b);
this.addKeyListener(new KeyLister());
....................................
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{...............}});
}
.........................................
class KeyListener extends KeyAdapter {
public void keyPressed(KeyEvent e) {
if (e.getSource() == KeyEvent.VK_ENTER)
{b.doClick();
}}}
}
Vielleicht funktioniert es, wenn du nicht dem JPanel den Listener hinzufügst sondern einer höher geordneten Komponente in dem das Panel ist (JDialog, JFrame), die auch den Focus für KeyEvents haben *shrug*
Diese Bedingung wird nie angesprochen: denn die Source ist die Komponente, welche den Fokus hatte, als die Taste gedrückt wurde (das ist was anderes als der KeyCode :wink: )
Versuch mal
Code:
(e.getKeyCode() == KeyEvent.VK_ENTER)
Und: immer die Komponente, welche den Fokus besitzt, bekommt das Event, die anderen nicht.
Du musst also alle Komponenten deines Dialoges/Frames abhören, wenn das universell funktioniern soll.
sorry, das e.getSource() habe ich früher schon geändert, aber es funktioniert trotzdem nicht. und dein Vorschlag habe ich auch nicht ganz verstanden. Die Struktur meines Programms sieht etwa so:
Der Focus besitzt diejenige Component, auf welcher du arbeitest. Wenn du z.B. auf einen Knopf drückst, besitzt der Knopf den Focus. Wenn du auf ein Textfeld drückst (und in ihm schreibst), besitzt das Textfeld den Focus.
-> Jede Component auf deinem Frame kann den Focus besitzen, und welche es tatsächlich ist, wechselt die ganze Zeit.
-> Der Listener muss bei jeder Component angemeldet werden (nicht nur bei den Parentcomponents deines Buttons!)
Ich denke, grundsätzlich ist es besser, wenn die Actions in
einem Pool (Map etc.) gehalten werden, denn eine Action kann
wiederverwendet werden, z.B.: im JMenuItem.