KeyListener

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…)

Der KeyListener wird nur ausgelöst wenn die entsprechende Komponente den Fokus hat.

trotz setFocusable(true) und reinklicken nichts.

evtl. besser geeignet als Keylistener: Key Binding

Probier mal
requestFocus()

Wie meinen ?(Key Bindings),
request Focus geht nicht

Ahh das müsste es aber sein:
Keine Ahnung wofür keyTyped gut ist, benutz mal keyPressed.

ändert nichts.

Wenn man nicht sicher stellen kann, dass die Komponente den Fokus hat
http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

public class Test
{

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    JFrame f = new JFrame();
                    MainPanel p = new MainPanel();
                    f.add(p);
                    f.setSize(100, 100);
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    f.setVisible(true);
                    p.requestFocus();
                }
            });

    }
}

class MainPanel
    extends JPanel
{
    MainPanel()
    {
        this.addKeyListener(new KeyAdapter()
            {
                @Override
                public void keyPressed(KeyEvent e)
                {
                    if (e.getKeyCode() == KeyEvent.VK_0)
                    {
                        System.out.println("geil");
                    }
                }

                @Override
                public void keyTyped(KeyEvent e)
                {
                    if (e.getKeyChar() == '0')
                    {
                        System.out.println("obergeil");
                    }
                }

            });
    }
}

Auch so tut sich nichts:

this.getInputMap().put(KeyStroke.getKeyStroke("0"),
                            "test");

[QUOTE=Zombiepriester]Auch so tut sich nichts:

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.

Auch so geht es nicht, oder mach ich wieder was falsch ?

this.getInputMap().put(KeyStroke.getKeyStroke("0"),
                        "ding");
				this.getActionMap().put("ding", new Action(){

					@Override
					public void actionPerformed(ActionEvent arg0) {
                        	System.out.println("test");					
					}
[...]
});

Poste doch vielleicht mal ein KSKB (ein K darin steht für kurz), das zeigt was bei dir nicht so funktioniert wie du es willst.

Ist oben leider nicht zu sehen: Gibt die isEnabled() Deiner Action vielleicht false zurück?
Empfehle AbstractAction. Da brauchst Du nur actionPerformed implementieren.

  1. ich würde von AbstractAction statt von Action erben, macht die implementierung einfacher
  2. wenn sich “this” auf ein JPanel bezieht sollte dein code eigentlich funktionieren
  3. 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 ?

Doch nichts.

Dann nochmal der Hinweis:
Poste bitte nen KSKB der den Fehler zeigt. So ohne Code ist da recht schwierig nen Fehler zu finden.