ActionListener似乎没有工作?

时间:2012-06-08 22:21:38

标签: java swing graphics actionlistener paintcomponent

我想制作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);
    }
}

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

1 个答案:

答案 0 :(得分: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);
    }
}