Problem mit KeyListener in kombination mit dem ActionListener

hallo leute,
ich habe ein Problem mit meinem KeyListener. Ich habe ein Programm geschrieben, in dem man ein level schaffen muss in dem man zum ziel kommt. Es gibt sich bewegende Gegner, die nicht berührt werden dürfen. Der KeyListener funktioniert einwandfrei, aber nur bis ich das erste mal einen Button gedrückt habe. Ab dem Moment passiert nichts mehr.

Code:
public class Gui {

    static JFrame f = new JFrame();
   
    public static JButton b = new JButton();
    public static JButton p = new JButton();
    public static JButton e = new JButton();
    public static JButton s = new JButton();
    public static JButton sta = new JButton();
    public static JButton end = new JButton();
    public static JButton check = new JButton();
   
    static int sizeX = 517;
    static int sizeY = 630;

    public static int getSizeX() {
        return sizeX;
    }

    public static int getSizeY() {
        return sizeY;
    }


    public Gui() {
       
       
        f.setVisible(true);
        f.setSize(sizeX,sizeY);
        f.setLocationRelativeTo(null);
        f.setLayout(null);
        f.setResizable(false);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.addMouseListener(new MousePressedListener());
        f.addMouseMotionListener(new MotionListener());
        f.addKeyListener( new KeyHandler());
       
       
        Draw d = new Draw();
        d.setVisible(true);
        d.setBounds(0,0,sizeX,sizeY);
        f.add(d);
       
       
        b.setVisible(true);
        b.setBounds(30,515,30,30);
        b.addActionListener(new ActionHandler());
        f.add(b);
       
        p.setVisible(true);
        p.setBounds(150,515,30,30);
        p.addActionListener(new ActionHandler());
        f.add(p);
       
        e.setVisible(true);
        e.setBounds(270,515,30,30);
        e.addActionListener(new ActionHandler());
        f.add(e);
       
        s.setVisible(true);
        s.setBounds(390,515,30,30);
        s.addActionListener(new ActionHandler());
        f.add(s);
       
        sta.setVisible(true);
        sta.setBounds(150, 550, 30, 30);
        sta.addActionListener(new ActionHandler());
        f.add(sta);
       
        end.setVisible(true);
        end.setBounds(270, 550, 30, 30);
        end.addActionListener(new ActionHandler());
        f.add(end);
       
        check.setVisible(true);
        check.setBounds(390, 550, 30,30);
        check.addActionListener(new ActionHandler());
        f.add(check);
       
       
       
       
    }
   
    public static void setSize() {
       
        f.setSize(517,540);
       
    }
}





public class KeyHandler implements KeyListener{

    @Override
    public void keyTyped(KeyEvent e) {
       
        System.out.println("Typed");
    }
    @Override
    public void keyPressed(KeyEvent e) {
   
       
    }

    @Override
    public void keyReleased(KeyEvent e) {

       
    }

 

}





public class ActionHandler implements ActionListener{

    public static boolean start = false;
   
   
    public void actionPerformed(ActionEvent e) {
       
       
        if(e.getSource() == Gui.b) {
        Draw.status = 0;
        }
        if(e.getSource() == Gui.p) {
        Draw.status = 1;
        }
        if(e.getSource() == Gui.e) {
        Draw.status = 2;
        }
        if(e.getSource() == Gui.sta) {
        Draw.status = 3;
        }
        if(e.getSource() == Gui.end) {
        Draw.status = 4;
        }
        if(e.getSource() == Gui.check) {
        Draw.status = 5;
        }
       
       
       

        if(e.getSource() == Gui.s) {
       
            if(Goal.obj.size() > 3) {
           
            int antwort = JOptionPane.showConfirmDialog(null, "Are you sure that you want to start", "start",JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, null);
           
            if (antwort == JOptionPane.YES_OPTION) {
                start = true;
                Gui.setSize();
               
            }
           
        }
            else {
               
                JOptionPane.showMessageDialog(null, "You need a Goal to start the Game", "Error",  JOptionPane.INFORMATION_MESSAGE, null);
            }
           
    }
    }
           
    }




Bevor ich den Button drücke wird "Typed" ausgegeben, anschließend nicht mehr.
Vielen dank schonmal für eure hilfe.



EDIT: Fals ihr noch mehr Daten oder Klassen braucht einfach bescheid sagen.
 
oh ja danke hat funktioniert. Was macht focusable denn überhaupt? Eingentlich ist das nicht mein erstes Projekt dieser Art und bisher brauchte ich das noch nie.
Danke für die hilfe.
 
Die Tasken Events gehen das das Control, das den Focus hat. Wenn Du mit der Maus auf den Button klickst bekommt der den Focus und damit auch die Events von den Tasten.

Nun kann der Button den Fokus nicht mehr bekommen und somit bleibt dieser beim Frame selbst.
 

Zurück
Oben