3

このようにペイントメソッドをオーバーライドします

public void paint(Graphics g)
{
   g.drawString(msg,xpos,ypos);
}

別のメソッドがある場合は、マウスプレスされたイベントメソッドとしましょう

public void mousePressed(MouseEvent me)    
    {
        xpos=me.getX();  // msg, xpos and ypos are variables of class
        ypos= me.getY();
        msg="You pressed mouse";
        repaint();
    }

(Graphics g)なぜ私たちはではなくペイントと呼ぶことができないのrepaint()ですか?

4

2 に答える 2

14

おそらくそれを試してみるべきです。あなたが気づくでしょう

  1. 何らかの方法でGraphicsオブジェクトを取得する必要があります。g
  2. イベント ハンドラーの本体での呼び出しpaintは、そのメソッドの本体が GUI スレッドですぐに実行されるため、ベスト プラクティスではありません。そのため、paint戻るまでイベントを処理できません。OTOH はrepaint、ペイント イベントが将来の都合のよい時点で発生するようにスケジュールし、GUI がハングしているように見えないようにします。確かに、あなたの場合、drawStringそれほど遅くはありませんが、一般的には....

これは、Java の人々自身によるペイントに関する古典的な記事です。

于 2012-08-07T02:58:51.330 に答える
9

repaint() を呼び出しても、すぐに paint() が呼び出されるとは限りません。通話をスケジュールするように要求します。

通常、GUI フレームワークが再描画を適切にスケジュールできるように、ペイントではなく再描画を呼び出す必要があります。ペイントが正しいスレッドで呼び出されるようにするなどのことを行い、フレームワークが実際のペイントを実行する前に複数の呼び出しが発生した場合は、再ペイントの呼び出しをマージする可能性があります。

再描画を呼び出すと、はるかに堅牢になります。

于 2012-08-07T03:00:07.797 に答える