Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/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 圆圈不动了?_Java - Fatal编程技术网

Java 圆圈不动了?

Java 圆圈不动了?,java,Java,这段代码编译得很好,但是当我按下右键、左键、上键和下键时,为什么圆圈没有移动呢 还有,为什么我需要底部的按键方法?它不是已经被叫来了吗?Eclipse想让我把它放在那里 main.java(这是主要方法): Infout.java文件: import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

这段代码编译得很好,但是当我按下右键、左键、上键和下键时,为什么圆圈没有移动呢

还有,为什么我需要底部的按键方法?它不是已经被叫来了吗?Eclipse想让我把它放在那里

main.java(这是主要方法):

Infout.java文件:

    import javax.swing.*;

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.geom.Ellipse2D;

    public class Infout extends JPanel implements ActionListener, KeyListener{

Timer t = new Timer(5, this);
double x=0, y=0, velx=2, vely=2;

public Infout()
{
    t.start();
    addKeyListener(this);
    setFocusable(true);
    setFocusTraversalKeysEnabled(false);
}


public void paintComponent(Graphics g)
{
        super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    Ellipse2D circle = new Ellipse2D.Double(x, y, 40, 40);
    g2.fill(circle);
}

public void actionPerformed(ActionEvent e)
{
    if (x < 0 || x > 260)
    {
        velx = -vely; 
    }
    if (y < 0 || y > 340)
    {
        velx = -vely;
    }

    x += velx;
    y += vely;
    repaint();
}

public void up()
{
    velx = -1.5;
    vely = 0;
}

public void down()
{
    velx = 0;
    vely = 1.5;
}

public void left()
{
    velx = -1.5;
    vely = 0;
}

public void right()
{
    velx = 1.5;
    vely = 0;
}

public void KeyPressed(KeyEvent e)
{
    int code = e.getKeyCode();
        if (code == KeyEvent.VK_UP);
            {up();}
        if (code == KeyEvent.VK_DOWN);
            {down();}
        if (code == KeyEvent.VK_LEFT);
            {left();}
        if (code == KeyEvent.VK_RIGHT);
            {right();}
}

public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyPressed(KeyEvent e) {}
    }
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入java.awt.geom.Ellipse2D;
公共类Infout扩展JPanel实现ActionListener、KeyListener{
定时器t=新定时器(5,此);
双x=0,y=0,velx=2,vely=2;
公共资讯
{
t、 start();
addKeyListener(此);
设置聚焦(真);
setFocusTraversalKeysEnabled(false);
}
公共组件(图形g)
{
超级组件(g);
图形2d g2=(图形2d)g;
椭圆E2D圆=新的椭圆E2D双圈(x,y,40,40);
g2.填充(圆圈);
}
已执行的公共无效操作(操作事件e)
{
如果(x<0 | | x>260)
{
velx=-vely;
}
如果(y<0 | | y>340)
{
velx=-vely;
}
x+=velx;
y+=0;
重新油漆();
}
公开作废
{
velx=-1.5;
f=0;
}
公众假期
{
velx=0;
Vly=1.5;
}
公共空间(左)
{
velx=-1.5;
f=0;
}
公共无效权()
{
velx=1.5;
f=0;
}
按下公共无效键(按键事件e)
{
int code=e.getKeyCode();
if(code==KeyEvent.VK_UP);
{up();}
if(code==KeyEvent.VK_DOWN);
{down();}
if(code==KeyEvent.VK_LEFT);
{left();}
if(code==KeyEvent.VK_RIGHT);
{right();}
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void键按下(KeyEvent e){}
}

您按下的
公共无效键(KeyEvent e)
不正确。java是区分大小写的

所以你应该把你的逻辑转移到

public void keyPressed(KeyEvent e) {}

最后还必须调用repaint()。

看起来您也需要这样做addActionListener@sidgate
新定时器(5,此)查看您的最后一行代码:
public void keyPressed(KeyEvent e){}
——空的keyPressed处理程序。
repaint()
在计时器事件中。@如果按下键移动圆圈,MarkoTopolnik不需要计时器。按键只选择圆圈的方向。如果方法被标记为
@Override
,编译器会发现错误为
按键(KeyEvent e)
未实现接口方法。@StanisLavL我很困惑;你输入了两个完全相同的表达式。很抱歉,我是Java新手(正如您在上面的简单程序中看到的)
public void keyPressed(KeyEvent e) {}