2

awt.dndプログラムの上のパネルにあるキャンバス 2D から、プログラムの途中のパネルにもあるキャンバス 3D への操作を実行しながら、ゴースト イメージを作成しようとしています。DnD のものは実装され、動作していsetDragImage()ます。ゴースト イメージは簡単に取得できますが、このメソッドがない Java 1.6 で動作させる必要があります。

今、私はガラスパネルなどでたくさん試しました:

  • ガラス パネルは、Canvas3D (重いコンポーネント) を除いて機能しています。
  • AWT ガラス パネル (フレーム) を使用すると、ゴースト イメージが描画されますが、プログラム全体が黒くなります

GHOSTドラッグアンドドロップ、複数のウィンドウで:これを作成するための興味深いリンクを見ましたJDialogが、作成しましたが、ダイアログを非不透明にする方法がわかりません:WindowsUtils.setOpaque(d, false);私が持っているクラスがなく、見つかりません。canvas3d にフォーカスするには、カーソル上にこの 1 ピクセルのスペースが必要なので、これが必要です。Googleで私の問題に役立つものはもう見つかりません。ありがとう

4

1 に答える 1

1

あなたはたくさんの仕事をしています。私はcanvas3dまたはcanvas2dを持っている農民ではありませんが、あなたが言うように、それらは重いコンポーネントのように見えます、これらは透明性をサポートしない傾向があります。

Per-PixelAlpheringはプライベートAPIとしてJava6.10に導入され、Java7で公開され始めました。

プライベートAPIにアクセスすることはできますが、お勧めしません。次に尋ねる必要がある質問は、APIが存在しない場合の対処方法です。

public static void setOpaque(Window window, boolean opaque) {
    try {
        Class<?> awtUtilsClass = Class.forName("com.sun.awt.AWTUtilities");
        if (awtUtilsClass != null) {
            Method method = awtUtilsClass.getMethod("setWindowOpaque", Window.class, boolean.class);
            method.invoke(null, window, opaque);
        }
    } catch (Exception exp) {
    }
}
于 2012-11-19T23:23:48.300 に答える