Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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_Applet_Awt_Keylistener - Fatal编程技术网

Java 小程序-KeyListener不工作

Java 小程序-KeyListener不工作,java,applet,awt,keylistener,Java,Applet,Awt,Keylistener,启动小程序时,键侦听器没有响应。我该如何解决这个问题?下面是代码 import java.applet.Applet; import java.awt.Graphics; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Timer; import java.util.TimerTask; public class Main extends Applet { private st

启动小程序时,键侦听器没有响应。我该如何解决这个问题?下面是代码

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Timer;
import java.util.TimerTask;

public class Main extends Applet {
private static final long serialVersionUID = 1L;
public String mode = "";
public Graphic gr;

public void init() {
    this.setSize(400, 400);
    gr = new Graphic();
    this.add(gr);
    gr.addKeyListener(new MyKeyListener());
    TimerTask timerTask = new TimerTask() {

        @Override
        public void run() {
                    gr.requestFocus();
            gr.repaint();
        }

    };
    new Timer().scheduleAtFixedRate(timerTask, 0, 1000 / 5);

}

public void paint(Graphics g) {

}

private class MyKeyListener extends KeyAdapter {
    public MyKeyListener(){
        System.out.println("HELLO");
    }
    public void keyPressed(KeyEvent e) {

        switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:
            gr.direction = Graphic.Direction.up;
            gr.move();

            break;
        case KeyEvent.VK_DOWN:
            gr.direction = Graphic.Direction.down;
            gr.move();
            break;
        case KeyEvent.VK_LEFT:
            gr.direction = Graphic.Direction.left;
            gr.move();
            break;
        case KeyEvent.VK_RIGHT:
            gr.direction = Graphic.Direction.right;
            gr.move();
            break;
        }
    }

    public void keyReleased(KeyEvent e) {

    }
}
}

必须将键事件侦听器添加到小程序本身,而不是图形对象。但是,我认为可以将鼠标事件监听器添加到applet以外的对象中

“我没有收到按键监听器的响应。”给定像
public void paint(Graphics g){}
这样的代码,我很惊讶您竟然得到了任何东西。1) 为什么AWT会出现在第三个千年?2) 为什么是applet而不是frame?3) 为什么使用
keylister
而不是键绑定?4) 为什么没有调用任何提到“焦点”的方法?有关详细信息,请参见教程。-似乎您正在尝试“用魔法编码”,而这通常不起作用。
this.setSize(400400)不要这样做。小程序的大小是由HTML中的属性设置的。在任何时候,试图使用这样的计时器获取焦点都是一个可怕的想法,千万不要这样做(我知道“只是一个测试”——但这句话是正确的)。避免使用键侦听器,并喜欢使用键侦听器,因为它们不会受到与
键侦听器
相同的焦点问题的影响。我认为setSize对于在本地机器上进行测试仍然很方便1-我认为
Graphic
有自己的类。2-关于完全缺乏上下文,我不建议使用
KeyListener
,有一个更好的API用于这类事情-我认为问题是由上面的代码引起的,因为在部署程序时,程序关注的是applet对象,而不是图形对象。因此,键盘侦听器无法识别输入。
    import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Shape;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class TTest extends Applet{
    @Override
    public void init() {
        // TODO Auto-generated method stub
        super.init();
        this.setSize(400, 400);
        addKeyListener(new KeyListener());

    }
    class KeyListener extends KeyAdapter{
        public KeyListener(){

        }

        @Override
        public void keyPressed(KeyEvent e) {
            // TODO Auto-generated method stub
            super.keyPressed(e);
            switch(e.getKeyCode()){
            case KeyEvent.VK_UP:
                System.out.println("Pressed up arrow!");
                break;
            case KeyEvent.VK_DOWN:
                System.out.println("Pressed down arrow!");
                break;
            default:
                System.out.println("You pressed: " + e.getKeyCode());
            }
        }

    }
}