ich hab einen KeyListener, der aber nicht merkt wenn eine Taste gedrückt wird.
this.addKeyListener(new KeyAdapter(){//"this" bezieht sich auf das Haupt JPanel
@Override
public void keyTyped(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_0){
System.out.println("geil");
}
}
});
rumrat irgendeine Focus-Sache? Vor dem Hinzufügen mal
this.setFocusable(true);
aufrufen und vor dem Tippen ggf. erstmal mit der Maus in das Panel reinklicken (zum Testen…)
this.getInputMap().put(KeyStroke.getKeyStroke("0"),
"test");
```[/QUOTE]
Ja! In dem von mir geposteten Link steht ja auch mehr als eine Zeile. Unter "How Key Bindings works" steht alles beschrieben. Die verschiedenen InputMaps werden erwähnt und von einer ActionMap und Actions ist die Rede. Beides wird hier nicht beachtet.
Ist oben leider nicht zu sehen: Gibt die isEnabled() Deiner Action vielleicht false zurück?
Empfehle AbstractAction. Da brauchst Du nur actionPerformed implementieren.
ich würde von AbstractAction statt von Action erben, macht die implementierung einfacher
wenn sich “this” auf ein JPanel bezieht sollte dein code eigentlich funktionieren
kskb
import javax.swing.*;
public class Test
{
public static void main(String[] args)
{
JFrame jFrame=new JFrame("TEST");
jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel jPanel=new JPanel();
jPanel.getInputMap().put(KeyStroke.getKeyStroke("0"), "test");
jPanel.getActionMap().put("test", new AbstractAction()
{
public void actionPerformed(ActionEvent actionEvent)
{
System.out.println("TEST");
}
});
jFrame.add(jPanel);
jFrame.setVisible(true);
}
}```
gibt auf der console korrekt "TEST" aus wenn man die taste "0" drückt
Im KSKB hat alles funktioniert, ich hab es jetzt gelöst, es lag daran, dass ich den JFrame sichtbar gemacht habe, bevor ich das JPanel addete.Zwei Fragen wäre noch:
Läuft dieses Key Binding über den EDT ?
Gibt es noch irgendwelche Tücken, auf die ich achten muss ?