【问题标题】:How to repaint a JPanel to update position of a graphics object?如何重新绘制 JPanel 以更新图形对象的位置?
【发布时间】:2019-04-25 01:16:52
【问题描述】:

我正在为我正在进行的俄罗斯方块项目测试 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


    【解决方案1】:

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

    已经有一个关于按键时移动对象的答案,这个链接

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

    也许对你有帮助

    【讨论】:

      【解决方案2】:

      在您的 paint() 方法中,您每次调用它时都会创建一个新的 Rectangle,并使用默认位置。这将替换您在 keyPressed 处理程序中所做的任何更改。

      【讨论】:

        猜你喜欢
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        • 2021-08-14
        • 2016-06-15
        • 2011-12-02
        • 2017-08-30
        • 2014-05-20
        • 1970-01-01
        相关资源
        最近更新 更多