2012-05-02 1 views
1

NetBeansプラットフォームアプリケーションで作業していますが、現在はVisual Libraryで詳細に取り組んでいます。さて、ここに問題があります。私はパレット、シーン、すべてがうまくいく、私のアプリのためのビジュアルエディタを持っているだけで、私はパレットからシーンにアイコンをドラッグしているときに問題があります。彼らはドラッグイベント中に表示されません、私はその効果を作成したい、誰かがこれを助けることができますか?ドラッグアンドドロップ中にアイコンを表示するには

答えて

1

よく聞こえたら、要素のドラッグアンドドロップで、ある種のグラフィカルエディタを作成していて、そのドラッグアンドドロップ中にエフェクトを作成したいのですか?

もしそうなら、基本的にドラッグしているオブジェクトのゴーストを作成し、それをマウスの動きに付け加える必要があります。もちろん、やったよりも簡単だが、あなたは要点を得る。 あなたが必要とするのは、あなたがドラッグしているもののイメージを取ることです(それほど大きな問題ではないはずです)。マウスの位置に合わせて移動します(オブジェクト内のマウスカーソルの相対位置を引くあなたはドラッグしている)。

しかし、私はその種のコードはどこかで入手できると思います。私はそれをルックアップするためにあなたをお勧めする:あなたを助け
http://free-the-pixel.blogspot.fr/2010/04/ghost-drag-and-drop-over-multiple.html
http://codeidol.com/java/swing/Drag-and-Drop/Translucent-Drag-and-Drop/

希望を!

4

私は2つのフェーズでこれを実行します。

1)パレット要素のスクリーンショット(画像)を作成します。スクリーンショットを遅れて作成し、それをビュー内にキャッシュします。受信ビュー上のスクリーンショットをペイント

screenshot = new BufferedImage(getWidth(), getHeight(), java.awt.image.BufferedImage.TYPE_INT_ARGB_PRE);// buffered image 
// creating the graphics for buffered image 
Graphics2D graphics = screenshot.createGraphics(); 
// We make the screenshot slightly transparent 
graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f)); 
view.print(graphics); // takes the screenshot 
graphics.dispose(); 

2):スクリーンショットを作成するには、このスニペットを使用することができます。ドラッグジェスチャが認識されたら、受信ビューまたはその祖先のスクリーンショットを利用できるようにする方法を見つけます(スクリーンショットドラッグを使用可能にする場所に応じて、フレームまたはそのコンテンツペインで利用できるようにすることができます)ペイント方法でイメージをペイントします。このようなもの:

a。スクリーンショットを利用できるようにする:

capturedDraggedNodeImage = view.getScreenshot(); // Transfer the screenshot 
dragOrigin = SwingUtilities.convertPoint(e.getComponent(), e.getDragOrigin(), view); // locate the point where the click was made 

b。マウスをドラッグすると、スクリーンショットの場所を更新します

// Assuming 'e' is a DropTargetDragEvent and 'this' is where you want to paint 
// Convert the event point to this component coordinates 
capturedNodeLocation = SwingUtilities.convertPoint(((DropTarget) e.getSource()).getComponent(), e.getLocation(), this); 
// offset the location by the original point of drag on the palette element view 
capturedNodeLocation.x -= dragOrigin.x; 
capturedNodeLocation.y -= dragOrigin.y; 
// Invoke repaint 
repaint(capturedNodeLocation.x, capturedNodeLocation.y, 
    capturedDraggedNodeImage.getWidth(), capturedDraggedNodeImage.getHeight()); 

c。塗装方法でスクリーンショットを描く:代わりに(再描画呼び出す

public void paint(Graphics g) { 
    super.paint(g); 
    Graphics2D g2 = (Graphics2D) g; 
    g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 
    g2.drawImage(capturedDraggedNodeImage, capturedNodeLocation.x, 
     capturedNodeLocation.y, capturedDraggedNodeImage.getWidth(), 
     capturedDraggedNodeImage.getHeight(), this); 
} 

)を、塗料()メソッドで絵を実行するには、マウスの移動としてpaintImmediately()を呼び出すことができますが、レンダリングは多くの貧しいとなり、いくつかのちらつきを見ることができるので、私はそのオプションをお勧めしません。 paint()とrepaint()を使用すると、ユーザーエクスペリエンスが向上し、レンダリングが円滑になります。

関連する問題