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


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

背景のクリア

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);
        }
    }
}
clear-1.png

確かにrepaint()では背景がクリアされています。

paint()で毎回全描画するようなアルゴリズムの場合、 パラメータを変化させることで動きを表現するのには、 クリアされている方が都合が良いということでしょう。

update()

ライトウェイトでは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();
       }
   }
clear-2.png

予想通りでした。

自前でGraphicsを調整してupdate()を呼ぶ意味は、 ほとんどないような印象です。 通常はrepaint()だけを考慮すれば良さそうです。

コメント

コメントはありません。 コメント/GUIサーバ高速化/05.部分描画実装(libbaygui)/実装/AWT/04?

お名前:

MENU

now: 1

リンク


最新の20件
2018-05-03 2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 1848, today: 1, yesterday: 0

添付ファイル: fileclear-2.png 357件 [詳細] fileclear-1.png 357件 [詳細]

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

Last-modified: 2008-03-28 (金) 15:47:54 (3734d);  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.061 sec.