java - java keylistener 有什么问题?

标签 java swing applet keyevent mixing

我不断收到错误消息:

Multiple markers at this line
    - The type Main must implement the inherited abstract method     KeyListener.keyTyped(KeyEvent)
    - The serializable class Main does not declare a static final serialVersionUID field of type     long
    - The type Main must implement the inherited abstract method     KeyListener.keyPressed(KeyEvent)

我该怎么办?

这是我的代码:(我在错误的地方注释了)

`package drawLines;

import java.util.Date;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.applet.Applet;
    import java.awt.Color;
    import java.awt.Graphics;

    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.Timer;


**/*here appears the error message*/**public class Main extends Applet implements KeyListener {

    boolean right=true;
    boolean left=false;
    boolean up=false;
    boolean down=false;
    boolean inGame=true;

    public void listen(){
        addKeyListener((KeyListener) this);
        setFocusable(true);
        setFocusTraversalKeysEnabled(false);
    }

    public void actionPerformed(KeyEvent e){
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_LEFT) {
            left=true;
            up=false;
            down=false;
        }

        if (key == KeyEvent.VK_RIGHT) {
            right=true;
            up=false;
            down=false;
        }

        if (key == KeyEvent.VK_UP) {
            up=true;
            right=false;
            left=false;
        }

        if (key == KeyEvent.VK_DOWN) {
            down=true;
            right=false;
            left=false;
        }


    }

    public void keytyped(KeyEvent e){}
    public void keyReleased(KeyEvent e){}




    int x1=5;
    int y1=5;
    int x2=x1+5;
    int y2=y1+5;


    public int moveRight(){
        return ++x1;
    }

    public int moveLeft(){
        return --x1;
    }

    public int moveUp(){
        return ++y1;
    }

    public int moveDown(){
        return --y1;
    }

    public void paint1(Graphics g){
        g.drawOval(x1,y1,x2,y2);
    }



    public void paint(Graphics e){

        while (right=true){
        long millis =System.currentTimeMillis();
        long millisn =System.currentTimeMillis();

            while (millisn<millis+20){
                millisn=System.currentTimeMillis();
            }

        e.setColor(Color.white);
        e.drawOval(x1,y1,x2,y2);
        e.setColor(Color.red);
        moveRight();
        e.drawOval(x1,y1,x2,y2);

        }
        while(inGame==true){
            if(right==true){
                long millis =System.currentTimeMillis();
                long millisn =System.currentTimeMillis();

                    while (millisn<millis+20){
                        millisn=System.currentTimeMillis();
                    }

                e.setColor(Color.white);
                e.drawOval(x1,y1,x2,y2);
                e.setColor(Color.red);
                moveRight();
                e.drawOval(x1,y1,x2,y2);
            }

            else if(down==true){
                    long millis =System.currentTimeMillis();
                    long millisn =System.currentTimeMillis();

                        while (millisn<millis+20){
                                    millisn=System.currentTimeMillis();
                        }

                    e.setColor(Color.white);
                    e.drawOval(x1,y1,x2,y2);
                    e.setColor(Color.red);
                    moveDown();
                    e.drawOval(x1,y1,x2,y2);

            }
                else if (left==true){
                    long millis =System.currentTimeMillis();
                    long millisn =System.currentTimeMillis();

                        while (millisn<millis+20){
                            millisn=System.currentTimeMillis();
                        }

                    e.setColor(Color.white);
                    e.drawOval(x1,y1,x2,y2);
                    e.setColor(Color.red);
                    moveLeft();
                    e.drawOval(x1,y1,x2,y2);


                    }}
    }

    public static void main(String[] args) {

    }    


        }

`

最佳答案

错误说明了一切:

Main类型必须实现继承的抽象方法KeyListener.keyTyped(KeyEvent)

  • 您需要实现抽象方法,对于这个方法,只需像 JavaBanana 所说的那样纠正拼写即可。

可序列化类 Main 没有声明 long 类型的静态最终 serialVersionUID 字段

  • 这是您必须包含在类(class)中的 ID,只需创建一个或通过 google 搜索示例 ID

Main类型必须实现继承的抽象方法KeyListener.keyPressed(KeyEvent)

  • 同样,您需要实现抽象方法 keyPressed。我的意思是,您必须定义并实现将在那种情况下调用的方法。

许多 IDE 会处理这个问题,甚至会为您创建方法声明,让他们试一试。 (我用的是netbeans)

关于java - java keylistener 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19298196/

相关文章:

java - 对 JTable 进行排序后无法获取正确的行 (Swing)

java - 带有日期和时间的 JFormattedTextField

jakarta-ee - Java EE 应用程序中的小程序访问蓝牙外设客户端

Java Applet 包装器规模输出

java - 优化新的BufferedReader(输入流)

java - 使用 "\\\\"将 '\' 与 Java 中的正则表达式匹配是最易读的方式吗?

java - System.LoadLibrary() 找不到库

java - 表格中按钮的翻转效果?

在 jTextField 中输入文本后,Java KeyBindings 不起作用?

Java小程序不会移动图像