Java 使用箭头键移动矩形
我编写了以下代码来使用箭头键移动矩形,但一旦我按下这些键,jframe窗口上就不会发生任何移动。关于这一点,我在谷歌上搜索了很多,但都没有用。我只看到一个为寡妇画的矩形,其他什么都没有。好心帮忙 这是我的密码Java 使用箭头键移动矩形,java,Java,我编写了以下代码来使用箭头键移动矩形,但一旦我按下这些键,jframe窗口上就不会发生任何移动。关于这一点,我在谷歌上搜索了很多,但都没有用。我只看到一个为寡妇画的矩形,其他什么都没有。好心帮忙 这是我的密码 import javax.swing.JFrame; public class Main { public static void main(String args[]) { JFrame window=new JFrame(); window.setSize(64
import javax.swing.JFrame;
public class Main
{
public static void main(String args[])
{
JFrame window=new JFrame();
window.setSize(640,480);
window.setTitle("window");
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
drawingComponent DC=new drawingComponent();
window.add(DC);
}
}
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JComponent;
import javax.swing.Timer;
public class drawingComponent extends JComponent implements ActionListener,KeyListener
{
Timer t=new Timer(50,this);//moving after 5 milliseconds
int x=0,y=0,vx=0,vy=0;
public drawingComponent()
{
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g)
{
Graphics2D g2=(Graphics2D) g;
Rectangle rect1=new Rectangle(x,y,100,30);
g2.draw(rect1);
}
public void actionPerformed(ActionEvent e) //inbuilt fncn f actionListener(interface) which needs to be created
{
x+=vx; //changing values
y+=vy;
repaint(); //inbuilt fncn to repeat the paintComponent method
}
public void keyPressed(KeyEvent e)
{
System.out.println("ewbkw");
int code=e.getKeyCode();
if(code==KeyEvent.VK_UP)
{ vx=0; vy=-2;repaint(); }
if(code==KeyEvent.VK_DOWN)
{ vx=0; vy=2; repaint(); }
if(code==KeyEvent.VK_LEFT)
{vy=0; vx=-2; repaint(); }
if(code==KeyEvent.VK_RIGHT)
{vy=0; vx=2; repaint();}
}
public void keyTyped(KeyEvent e)
{}
public void keyReleased(KeyEvent e)
{}
}
您可以尝试使用
ArrayList
向ArrayList
添加一个按下的键,然后在释放后将其删除
您也可以使用
repaint();
在你所有的if
语句之后
public void keyPressed(KeyEvent e)
{
System.out.println("ewbkw");
int code = e.getKeyCode();
if(code==KeyEvent.VK_UP){
vx=0; vy=-2;
}
if(code==KeyEvent.VK_DOWN){
vx=0; vy=2;
}
if(code==KeyEvent.VK_LEFT){
vy=0; vx=-2;
}
if(code==KeyEvent.VK_RIGHT){
vy=0; vx=2;
}
repaint();
}
如果对If
语句只使用一条语句,则不需要使用花括号{}
if (true)
System.out.println("Example of no brackets");
else
System.out.println("Not even for an IF ELSE");
您也可能不需要计时器。但我可能错了。您看到了错误吗?当我运行代码时,矩形会移动。我按了一个箭头键,矩形就一直朝那个方向移动。我没有看到任何错误。当我运行它时,屏幕上会出现一个静止的矩形,当我按任何箭头时,都看不到任何效果key@edwintorres你的意思是说当你运行代码时,矩形最初也在移动,没有按任何箭头键。我不确定问题出在哪里。你的密码似乎对我很管用。也许可以尝试不同的箭头键,或者确保你的NUM lock已关闭。当我运行代码并按->一次时,矩形会不断向右移动。当我按下按钮时,你确定这里不需要花括号吗?我不是java专家,但在JavaScript和C++中,这不是个案。只有在使用多个语句时才需要它们。但是我想我没有注意到在每个if语句之后有两个语句,所以在这个特定的方法中可能需要花括号@雅科瓦尔