0

私はこのコードに出くわしました。プログラミングの途中で問題が発生する前に、この混乱を緩和できると思いました。ペイントまたはactionPerformedメソッドがBoardクラスで最初に実行されるかどうかを理解するのに問題があります。私のJavaコメントが正しく記述されていることを願っています。

実は、私は夏にJavaの紹介をしましたが、グラフィックはコースの終わりにしか紹介されませんでした。クラスはImageIconを使用し、drawImageメソッドとImage抽象クラスには触れませんでした。塗装方法も全くわかりません。このコードは、私が行ったJavaグラフィックスの講義よりも複雑です。Java APIに基づいて、paintメソッドはJPanelのスーパークラスであるJComponentクラスから発生しました。

では、paintメソッドが取り込むこのパラメータGraphics gとは何であり、どのように考える必要がありますか?paintメソッドは、どのようにしてグラフィックスクラスのどのオブジェクトをペイントするかを認識します。Java APIを調べたところ、Graphicsは抽象クラスであると書かれています。データ型が抽象である場合、gはどのようにオブジェクトになることができますか?コードがオブジェクトgのdrawImageメソッドを呼び出しているため、gはオブジェクトであると言っています。

ちなみに、再描画方法とは、JPanelのコンテンツを消去し、レンダリングのようにコンポーネント全体を再描画することを意味しますか?

public class Board extends JPanel implements ActionListener{

private Image apple;
private int apple_x;
private int apple_y;

// over-riding the paint method from the JComponent Class
public void paint(Graphics g){
                // recursively call the paint method
                super.paint(g);

                g.drawImage(apple, apple_x, apple_y, this); 
    }

 // does this method gets called first or the top one?
 public void actionPerformed(ActionEvent e) {



        repaint();
    }

}
4

2 に答える 2

2

Java(および基本的に現在のすべてのウィンドウシステム)での描画は、ハリウッドの原則に従います。

あなたは私を呼ばないでください。電話するよ。

つまり、特定の領域を再描画する必要があることをシステムに伝えることができます(repaint())。ただし、システムが描画を行うように呼び出すまで待つ必要があります。Javaでは、システムはメソッドを呼び出し、描画に使用paint()するインスタンスを渡します。Graphics

したがって、イベントの順序は次のとおりです。

  1. actionPerformed()
  2. paint()

Graphics多くの場合、グラフィックスコンテキストと呼ばれます。描画に使用するオブジェクトです。システムと現在の要件に応じて、図面は画面に直接表示される場合と、後で画面にコピーされる画面外のバッファに入力される場合があります。Graphicsインスタンスが詳細を処理します。

于 2012-12-30T19:10:25.653 に答える
1

私が間違っていれば、誰かが私を訂正することができます。

はい、グラフィックは抽象クラスです。ただし、Graphicsを継承するクラス(Graphics2Dなど)のインスタンスは、graphicsとして渡すことができます。私が正しく思い出せば、これはアップキャスティングと呼ばれています。gは、オブジェクトが無効化されたか、更新する必要があるために、paint()を呼び出したUIスレッドによって渡されます。

グラフィックスオブジェクトは、ユーザーに表示される実際のビットマップへの参照です。

于 2012-12-30T19:10:17.950 に答える