- PR -

swingでグラフィックコンテキストは取得できますか?

投稿者投稿内容
さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2003-10-17 10:30
こんにちは、さくらばです。

引用:

バンブーさんの書き込み (2003-10-17 06:08) より:

ところで、初歩的な質問ですが、Jpanelには、ダブルバッファが実装済みだと聞き
ましたが、どの参考書をみても、ユーザーが実装して、それを利用するように
なっています。システムが持っているダブルバッファはユーザーからは利用できない
のでしょうか?まあ、ダブルバッファを二重に持っても支障はないのですが...



Swing の場合、何もしなくても勝手にダブルバッファリングにしてくれます。
ダブルバッファリングしたくない場合は JComponent#setDoubleBuffered
メソッドでやめることができます。

Swing のダブルバッファリングはよく考えられていて、コンポーネントごとに
バッファを持ち合うようなことはしませんし、Windows であれば DirectX の
VRAM に直接バッファを持つようにするので高速に行えます。

これを自作するとなると BufferStrategy クラスを使用して行うのですが、
それなりに面倒です。

# だいたいの書籍の著者はかなり怠慢です。中にはいい本もあるのですが...
# Swing に AWT の作法で書いてみたり、バックコンパチのためにだけに
# 残されているようなクラスを使っていたりします。
# 例えば JFrame#setDefaultCloseOperation を使わずに WindowEvent
# でフレームのクローズ処理していたり、Vector や Hashtable などいまさら
# 使う意味のないクラスを使っていたりする本は要注意本です。


さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2003-10-17 10:35
こんにちは、さくらばです。

引用:

かずくんさんの書き込み (2003-10-17 10:17) より:

それより以前のversinは良く知りません。
たぶん http://java.sun.com にあげられたrelese noteに書かれているでしょう



ダブルバッファリングしてます。ただ VolatileImage は使っていないので、
それほど高速ではないです。

# ちなみに VolatileImage が DirectX の VRAM に直接バッファを取っている
# クラスです。

Swing は J2SE 1.4 (特に J2SE 1.4.2) でずいぶんパフォーマンスアップし
ているので、GUI があるのであれば J2SE 1.4 を使うべきだと思います。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-10-17 14:21
unibon です。こんにちわ。

引用:

バンブーさんの書き込み (2003-10-17 06:08) より:
ところで、初歩的な質問ですが、Jpanelには、ダブルバッファが実装済みだと聞き
ましたが、どの参考書をみても、ユーザーが実装して、それを利用するように
なっています。システムが持っているダブルバッファはユーザーからは利用できない
のでしょうか?まあ、ダブルバッファを二重に持っても支障はないのですが...


お考えのとおりだと思います。
Swing での「ダブルバッファ」は、そのバッファを
アプリケーション(Swing の API を利用するプログラム)からは自由に使えないので、
たとえば Java の入門書に載っているような「ダブルバッファ」とは意味合いが違います。
#余談ですが、なんでいずれも「ダブル」なんでしょう?
#どちらにしても「シングルバッファ」だと思うのですが。
#もしかしたら最終的に描画対象となるスクリーンも「フレームバッファ」として
#バッファのひとつに勘定するからなのでしょうか。

なので、入門書に載っているダブルバッファの手法を、
Swing 上でやると、自然に「トリプルバッファ」になります。

スキルアップ/キャリアアップ(JOB@IT)