GUIサーバ高速化/05.部分描画実装(libbaygui)/実装/AWT/04 の変更点



 #topicpath
 #contents
 
 ** 背景のクリア [#dbf78a62]
 
 repaint()の説明を読むと描画の際にクリアされるとあります。
 そこで初回とそれ以降でpaint()の挙動を変えて確認しました。
 
  import java.awt.*;
  import java.awt.event.*;
  
  class MyFrame extends Frame {
      public static void main(String args[]) {
          new MyFrame().setVisible(true);
      }
      
      MyFrame() {
          setSize(100, 100);
          addWindowListener(new WindowAdapter() {
              public void windowClosing(WindowEvent e) {
                  System.exit(0);
              }
          });
          add(new MyComponent());
      }
  }
  
  class MyComponent extends Component {
      public MyComponent() {
          enableEvents(AWTEvent.MOUSE_EVENT_MASK);
      }
      
      private boolean first = true;
      
      public void paint(Graphics g) {
          Rectangle r = g.getClipBounds();
          if (first) {
              g.setColor(Color.RED);
              g.fillRect(r.x, r.y, r.width, r.height);
              first = false;
          } else {
              g.drawRect(r.x, r.y, r.width - 1, r.height - 1);
          }
      }
      
      protected void processMouseEvent(MouseEvent e) {
          super.processMouseEvent(e);
          if (e.getID() == MouseEvent.MOUSE_CLICKED) {
              repaint(20, 20, 40, 20);
          }
      }
  }
 
 #ref(clear-1.png,nolink)
 
 確かにrepaint()では背景がクリアされています。
 
 paint()で毎回全描画するようなアルゴリズムの場合、
 パラメータを変化させることで動きを表現するのには、
 クリアされている方が都合が良いということでしょう。
 
 *** update() [#i364e08d]
 
 ライトウェイトではpaint()を呼ぶのと同じなので、
 単なる追加描画になるはずです。
 
     protected void processMouseEvent(MouseEvent e) {
         super.processMouseEvent(e);
         if (e.getID() == MouseEvent.MOUSE_CLICKED) {
             Graphics g = getGraphics();
             g.setClip(20, 20, 40, 20);
             update(g);
             g.dispose();
         }
     }
 
 #ref(clear-2.png,nolink)
 
 予想通りでした。
 
 自前でGraphicsを調整してupdate()を呼ぶ意味は、
 ほとんどないような印象です。
 通常はrepaint()だけを考慮すれば良さそうです。
 
 ** コメント [#b39a5f58]
 
 #comment(below)

リロード   新規 編集 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.017 sec.