Java 使用箭头键移动矩形

Java 使用箭头键移动矩形,java,Java,我编写了以下代码来使用箭头键移动矩形,但一旦我按下这些键,jframe窗口上就不会发生任何移动。关于这一点,我在谷歌上搜索了很多,但都没有用。我只看到一个为寡妇画的矩形,其他什么都没有。好心帮忙 这是我的密码 import javax.swing.JFrame; public class Main { public static void main(String args[]) { JFrame window=new JFrame(); window.setSize(64

我编写了以下代码来使用箭头键移动矩形,但一旦我按下这些键,jframe窗口上就不会发生任何移动。关于这一点,我在谷歌上搜索了很多,但都没有用。我只看到一个为寡妇画的矩形,其他什么都没有。好心帮忙 这是我的密码

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语句之后有两个语句,所以在这个特定的方法中可能需要花括号@雅科瓦尔