Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java KeyListener不';行不通_Java_Keylistener - Fatal编程技术网

Java KeyListener不';行不通

Java KeyListener不';行不通,java,keylistener,Java,Keylistener,我有以下两个类,main类(SamG)和Panll类。我已经在Panll类中实现了KeyListener,但它似乎不起作用 public class SamG { public static void main(String[] args) { JFrame jf = new JFrame("My APP"); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setSize(800

我有以下两个类,main类(SamG)和Panll类。我已经在Panll类中实现了KeyListener,但它似乎不起作用

public class SamG {
    public static void main(String[] args) {
        JFrame jf = new JFrame("My APP");
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(800, 400);
        jf.setVisible(true);
        jf.pack();
        jf.setContentPane(new Panll());
    }   
}

public class Panll extends JPanel implements KeyListener {
    int x=100,y=100;
    boolean run=true;
    Panll() {
        addKeyListener(this);
    }

    @Override
    public void paint (Graphics g) {
        super.repaint();
        g.clearRect(0, 0, 800, 400);
        update();
        draw(g);
        try {
            Thread.sleep(17);
        } catch (InterruptedException ex) {
            Logger.getLogger(Panll.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void update(){
        x++;
        y++;
    }

    public void draw(Graphics g){
        g.drawOval(x, y, 100, 100);
    }

    @Override
    public void keyTyped(KeyEvent e) {           
    }

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

    @Override
    public void keyReleased(KeyEvent e) {    
    }
}

如果不显式地允许JPanel使用
setFocusable(true),则无法对其进行聚焦。如果你加上这一行,你可以把注意力集中在JPanel上。如果按下任何按钮,KeyListener工作正常

如果不显式地允许JPanel使用
setFocusable(true),则无法对焦JPanel。如果你加上这一行,你可以把注意力集中在JPanel上。然后,如果按下任何按钮,KeyListener工作正常

首先从不将主线程发送到睡眠状态。创建一个新线程,定期调用面板的重新绘制。
Second不要使用
paint()
方法来绘制你的东西。改用
paintComponent()
方法。

Third将您的
KeyListener
添加到您的
JFrame
。您的
JPanel
将不会收到
KeyEvents
,因为它从未获得焦点。

首先从不将主线程发送到睡眠状态。创建一个新线程,定期调用面板的重新绘制。
Second不要使用
paint()
方法来绘制你的东西。改用
paintComponent()
方法。

Third将您的
KeyListener
添加到您的
JFrame
。您的
JPanel
将不会收到
KeyEvents
,因为它从未得到关注。

您的问题不太清楚。检查一下,你的问题不太清楚。检查这个