1

我想做一个2D游戏。我开始制作绘画课,但遇到了一个问题:这ActionListener行不通。它不会绘制或输出我的信息来说明它正在工作。这是代码:

public class Drawing extends JPanel implements ActionListener {

    private int count = 0;

    public void actionPerformed(ActionEvent e) {
        count++;
        repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
        System.out.println("Hi");
        g.setColor(Color.black);
        g.clearRect(0, 0, Boot.WIDTH, Boot.HEIGHT);
        g.fillRect(0, 0, Boot.WIDTH, Boot.HEIGHT);

        g.setColor(Color.white);
        g.drawString("Path count: " + count, 50, 50);
    }
}

我认为这会起作用,因为我在其他项目中使用了这种绘图方式。什么会导致这种情况?

4

1 回答 1

4

您不应该保留对 Graphics 对象的引用并paint()直接调用。您应该调用repaint()并等待 Swing 调用该paintComponent()方法,您应该重写该方法以在 Swing 作为参数传递给该方法的 Graphics 对象上执行您的自定义绘画。

有关详细信息,请参阅http://java.sun.com/products/jfc/tsc/articles/painting/index.html

public class Drawing extends JPanel implements ActionListener {

    private int count = 0;

    public void actionPerformed(ActionEvent e) {
        count++;
        repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
        System.out.println("Hi");
        g.setColor(Color.black);
        g.clearRect(0, 0, Boot.WIDTH, Boot.HEIGHT);
        g.fillRect(0, 0, Boot.WIDTH, Boot.HEIGHT);

        g.setColor(Color.white);
        g.drawString("Path count: " + count, 50, 50);
    }
}
于 2012-06-08T22:30:26.010 回答