• 締切済み

graphics2D setComposite

こんにちは。趣味でプログラミングをしているものです。 さっそくですが質問させていただきます。 まずは、以下のページを別のタブを開いて 見ていただきたいのですが・・・ http://terai.xrea.jp/Swing/DropShadowPopup.html このページの下部にある class DropShadowPopupMenu extends JPopupMenu のコードにおいて、 メソッド show のオーバーライドにおいて、 g2.setComposite(AlphaComposite. getInstance(AlphaComposite.SRC_OVER, 0.2f)); と記述されていますが、 setComposite というのは 描画を絵を描くことにたとえたら、 画用紙を用意する、というような意味になるのでしょうか? ご存知のかた、教えていただけないでしょうか。 よろしくお願いします。

みんなの回答

  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

ちょっと違う。絵を描く時に、キャンバス内のピクセルをどういったルールで変更するかを決めます。 http://docs.oracle.com/javase/jp/6/api/java/awt/Graphics2D.html#setComposite(java.awt.Composite) そして、AlphaCompositeってアルゴリズムに則り変更するよって話ですね。 AlphaCompositeってアルゴリズムは12のルールが有り、詳細はT. Porter および T. Duff 共著の『Compositing Digital Images』を読もうって書かれてます。 http://docs.oracle.com/javase/jp/6/api/java/awt/AlphaComposite.html 下記とかを見る限りと、今回はルール4. 「AlphaComposite.SRC_OVER」を指定し、 それは、キャンバスの範囲内なら古いピクセルに関係なく新しいピクセルで上書きするというルールですね。 http://www.ibm.com/developerworks/jp/java/library/j-mer0918/

noname#173931
質問者

お礼

お礼が遅れてしまい申しわけありません ですが、丁寧に解説して頂きありがとうございます。 回答して頂けたついで、といっては失礼かもしれませんが もう少し、教えていただけないでしょうか? http://terai.xrea.jp/Swing/DropShadowPopup.html 上記のページからソースコード(src.zip) をダウンロード、解凍してMainPanel.java を コマンドプロンプトでコンパイルしてみて、 画像ファイルをコンパイルしたフォルダと同じところに配置して 同じくコマンドプロンプトから、実行してみたのですが、 以下のようなエラーメッセージが表示されてしまいました。 (コマンドプロンプトの表示なのでコピーができず手打ちですので、 ミスタイプがありましたらご容赦ください) Excpition in thread "main" java.lang.noClassDefFoundError : MainPanel( wrong name : example.MainPanel ) at java.lang.ClassLoader.defineClass1( Naive Method ) at java.lang.ClassLoader.defineClassCond( Unknown Source ) at java.lang.ClassLoader.defineClass( Unknown Source ) at java.security.SecureClassLoader.defineClass( Unknown Source ) at java.net.URLClassLoader.defineClass( Unknown Source ) at java.net.URLClassLoader.access$000( Unknown Source ) at java.net.URLClassLoader$1.run( Unknown Source ) at java.security.AccessController.doPrivileged( Native Method ) at java.net.URLClassLoader.findClass( Unknown Source ) at java.lang.ClassLoader.loadClass( Unknown Source ) at sun.misc.Launcher$AppClassLoader.loadClass( Unknown Source ) at java.lang.ClassLoader.loadClass( Unknown Source ) Could not find the main class: MainPanel. Program will exit. なお、手打ちが面倒だと思ったのでeclipse で実行してみたら 画像ファイルがない、とのエラー表示になりましたので、 ソースコード中のラベルにアイコンを設定するところを以下のように変更したら 実行されました。 //label.setIcon(new ImageIcon(getClass() //.getResource("test.png"))); label.setIcon(new ImageIcon("./images/test.png") ); ------------------------------------------ 3点ほど質問させていただきたいのですが (1) この質問文を書いているときに Java の API でEventQueue についてみてみたのですが、 以下のような記述がありました。 >>EventQueue はどのプラットフォームでも共通のクラスであり、 >>基本となるピアクラスと信頼できるアプリケーションクラスからのイベントをキューに入れます。 これはeclipseが信頼できるアプリケーションであるということなのでしょうか? (2) コマンドプロンプトは信頼されない、ということでしょうか? (3) 基本となるピアクラス、とはどういったものがあるのでしょうか? 以上について、もしよければ教えていただけないでしょうか? よろしくお願いします。

関連するQ&A