如何重新绘制JPanel以更新图形对象的位置?

问题描述 投票:-1回答:2

我正在为我正在研究的俄罗斯方块项目测试KeyListener。我的主要问题是,按下一个键后,我无法让JPanel重新绘制以更新矩形的位置。 JPanel嵌入到JFrame中,因此我不确定是更新面板还是框架。这是代码:

public class mainBoardTest extends JPanel implements KeyListener { 
    private Rectangle rect;
    public mainBoardTest() {
    setPreferredSize(new Dimension(400, 800));
    setBackground(Color.BLACK);
}


public void init() {
    this.addKeyListener(this);
}

public void paint(Graphics g) {
    //super.paintComponent(g);
    rect = new Rectangle(0,0,50,50);
    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(Color.RED);
    g2.fill(rect);
}

@Override
public void keyPressed(KeyEvent e) {
    // TODO Auto-generated method stub
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
        rect.setLocation(rect.x + 2, rect.y);
    }
    else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
        rect.setLocation(rect.x - 2, rect.y);
    }
    else if (e.getKeyCode() == KeyEvent.VK_UP) {
        rect.setLocation(rect.x, rect.y - 2);
    }
    else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
        rect.setLocation(rect.x, rect.y + 2);
    }
    repaint(); //does not repaint
}
java keylistener
2个回答
0
投票

它的所有代码都与面板和框架有关?如果是,它看起来像缺少一些东西。

已经有一个与按键移动对象相关的答案,即链接

how to move an object in a JPanel using the arrow keys

也许这可以帮到你


0
投票

在paint()方法中,每次调用时都会创建一个新的Rectangle,并带有一个默认位置。这取代了您在keyPressed处理程序中所做的更改。

© www.soinside.com 2019 - 2024. All rights reserved.