图形g - 使用绘画,我如何擦除东西?

时间:2015-01-06 01:59:34

标签: java applet paint keylistener

我的绘画方法是这样的。

public void paint (Graphics g)
{      

    while (cardChosen != 'a');
    {
       g.drawImage (selectionBG, 0, 0, 1960, 677, null);
        g.drawImage (duelSGX, x_coordinate, y_coordinate, 483, 677, null);
        g.drawImage (Ultor, x_coordinate + 777, y_coordinate, 483, 677, null);
        g.drawImage (Seirin, x_coordinate + 777 * 2, y_coordinate, 483, 677, null);
        g.drawImage (Rowgen, x_coordinate + 777 * 3, y_coordinate, 483, 677, null);
        g.drawImage (Ronel, x_coordinate + 777 * 4, y_coordinate, 483, 677, null);
        g.drawImage (Ophelia, x_coordinate + 777 * 5, y_coordinate, 483, 677, null);
        g.drawImage (Narza, x_coordinate + 777 * 6, y_coordinate, 483, 677, null);
        g.drawImage (Michele, x_coordinate + 777 * 7, y_coordinate, 483, 677, null);
        g.drawImage (Maxwell, x_coordinate + 777 * 8, y_coordinate, 483, 677, null);
        g.drawImage (MageDEAN, x_coordinate + 777 * 9, y_coordinate, 483, 677, null);
        g.drawImage (Kuda, x_coordinate + 777 * 10, y_coordinate, 483, 677, null);
        g.drawImage (Gravion, x_coordinate + 777 * 11, y_coordinate, 483, 677, null);
    }

}

我也有这个。

    if (ev.getKeyCode () == KeyEvent.VK_A)
    cardChosen = 'a';

    repaint ();

现在考虑到这一点,当我按下'a'并且在我放手时出现时,我画的所有东西都不会消失吗? 它没有。图片显示,向上和它滞后。

2 个答案:

答案 0 :(得分:1)

你的paint(...)方法应该是:

public void paint(Graphics g)
{
    super.paint(g); // to clear the background

    // add your code here
}

答案 1 :(得分:1)

你有危险的代码:你在绘画方法中有一个while (true)循环,这将使GUI陷入可耻的停顿。永远不要那样做。代替

  • 在JPanel或JCompnent的paintComponent(...)方法中使用Swing并绘制。
  • 请务必调用超级paintComponent(...)方法。通常这应该是paintComponent方法覆盖的第一行,这将删除旧图像。
  • 最重要的是,获取所有程序逻辑,就像所有绘制方法的循环, out 一样。所有的绘制方法都必须尽可能快,因此你永远不会想要那些可以在别处调用的代码,这可能会减慢它的速度。此外,您永远无法完全控制是否或何时调用绘制方法,因此如果存在于这些方法中,程序逻辑可能会动摇。
  • 最好在paintComponent方法中拥有某个类型的if (...)块,然后在事件监听器中更改此块的状态,然后调用repaint()
  • 由于你的是一个事件驱动的程序,所以不应该在你的代码中。而是倾听事件,然后回应。