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

paint()Graphics オブジェクトへの参照を保持して直接呼び出すことは想定されていません。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 に答える