Java 圆圈不动了?
这段代码编译得很好,但是当我按下右键、左键、上键和下键时,为什么圆圈没有移动呢 还有,为什么我需要底部的按键方法?它不是已经被叫来了吗?Eclipse想让我把它放在那里 main.java(这是主要方法): Infout.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;
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) {}