使用java使用箭头键移动图形

使用java使用箭头键移动图形,java,keylistener,Java,Keylistener,我试图用箭头键移动矩形(用于游戏),但收到错误消息。它这么说,但当我改变它时,它仍然不起作用。我尝试了多次,但仍然收到相同的错误。有人知道为什么会出现这个错误吗? 这就是错误: java.lang.Error: Do not use javax.swing.JFrame.add() use javax.swing.JFrame.getContentPane().add() instead at javax.swing.JFrame.createRootPaneException(

我试图用箭头键移动矩形(用于游戏),但收到错误消息。它这么说,但当我改变它时,它仍然不起作用。我尝试了多次,但仍然收到相同的错误。有人知道为什么会出现这个错误吗? 这就是错误:

java.lang.Error: Do not use javax.swing.JFrame.add() use javax.swing.JFrame.getContentPane().add() instead
        at javax.swing.JFrame.createRootPaneException(Unknown Source)
        at javax.swing.JFrame.addImpl(Unknown Source)
        at java.awt.Container.add(Unknown Source)
        at Tutorial.main(Tutorial.java:109)
这是我的密码:

// The "Test" class.
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;

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


public class Tutorial extends JPanel implements ActionListener, KeyListener
{
    Timer tm = new Timer (5,this);
    int x = 0, y = 0, velX = 0, velY = 0;

    public Tutorial ()
    {
        tm.start();
        addKeyListener(this);
        setFocusable (true);
        setFocusTraversalKeysEnabled(false);
    }   

    public void paintComponent (Graphics g)
    {
        super.paintComponent (g);
        g.setColor (Color.RED);
        g.fillRect (x, y, 50, 30);
    }

    public void actionPerformed (ActionEvent e)
    {
        if (x < 0)
        {
            velX = 0;
            x = 0;
        }
        else if (x > 530)
        {
            velX = 0;
            x = 530;
        }

        if (y < 0)
        {
            velY = 0;
            y = 0;
        }

        else if (y > 330)
        {
            velY = 0;
            y = 330;
        }

        x = x + velX;
        y = y + velY;
        repaint ();
    }

    public void keyPressed (KeyEvent e)
    {
        int c = e.getKeyCode ();
        if (c == KeyEvent.VK_LEFT)
        {
            velX = -1;
            velY = 0;
        }

        if (c == KeyEvent.VK_UP)
        {
            velX = 0;
            velY = -1;
        }

        if (c == KeyEvent.VK_RIGHT)
        {
            velX = 1;
            velY = 0;
        }

        if (c == KeyEvent.VK_DOWN)
        {
            velX = 0;
            velY = 1;
        }
    }   

    public void keyTyped (KeyEvent e) {}
    public void keyReleased (KeyEvent e) 
    {
        velX = 0;
        velY = 0;
    }

    public static void main (String arge [])
    {
        Tutorial t = new Tutorial ();
        JFrame jf = new JFrame ();
        jf.setTitle ("Tutorial");
        jf.setSize (600, 400);
        jf.setVisible (true);
        jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        jf.add(t); 
    }


} // Test class
//测试”类。
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyListener;
导入java.awt.event.KeyEvent;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.Timer;
公共类教程扩展了JPanel实现ActionListener、KeyListener
{
定时器tm=新定时器(5,此);
int x=0,y=0,velX=0,velY=0;
公共教程()
{
tm.start();
addKeyListener(此);
设置聚焦(真);
setFocusTraversalKeysEnabled(false);
}   
公共组件(图形g)
{
超级组分(g);
g、 setColor(Color.RED);
g、 fillRect(x,y,50,30);
}
已执行的公共无效操作(操作事件e)
{
if(x<0)
{
velX=0;
x=0;
}
如果(x>530),则为else
{
velX=0;
x=530;
}
if(y<0)
{
f=0;
y=0;
}
如果(y>330),则为其他情况
{
f=0;
y=330;
}
x=x+velX;
y=y+y;
重新油漆();
}
按下公共无效键(按键事件e)
{
intc=e.getKeyCode();
if(c==KeyEvent.VK_左)
{
velX=-1;
f=0;
}
if(c==KeyEvent.VK_UP)
{
velX=0;
velY=-1;
}
if(c==KeyEvent.VK_RIGHT)
{
velX=1;
f=0;
}
if(c==KeyEvent.VK_DOWN)
{
velX=0;
fly=1;
}
}   
public void keyTyped(KeyEvent e){}
公共无效密钥已释放(密钥事件e)
{
velX=0;
f=0;
}
公共静态void main(字符串arge[])
{
教程t=新教程();
JFrame jf=新的JFrame();
jf.setTitle(“教程”);
jf.setSize(600400);
jf.setVisible(真);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.添加(t);
}
}//测试类

哇,你使用的是什么版本的Java?这在Java1.5中得到了修复(我想)。基于错误
jf.add(t)
应该是
jf.getContentPane().add(t)。另外,您应该调用
jf.setVisible(true)
Last我还建议您仔细研究一下如何使用
KeyListener
,它将解决与
KeyListener
相关的焦点问题,我正在使用ready to program java。谢谢你的帮助out@user481710我建议寻找(更多)最新的学习资源,其中许多是在线的。Java的当前版本是8,Java 9计划在今年的某个时候发布。