JLabel のカスタム マウス イベント処理によるドラッグ アンド ドロップ機能
JLabel のマウス イベントをオーバーライドすることで、ドラッグ アンド ドロップ機能を実装しようとしています。 「サムネイル」という名前の配列。ただし、mousePressed イベント ハンドラーでドラッグ アンド ドロップを定義した後、mouseClosed イベント ハンドラーがトリガーされないことがわかりました。
問題の理解
この特定のシナリオでは、ドラッグ アンド ドロップ操作がマウス イベントをインターセプトするため、マウス リリース イベントは登録されません。 MousePressed ハンドラー内で importAsDrag メソッドを呼び出すと、ドラッグ操作が開始され、同じ操作内で後続のマウス イベントが消費されます。
解決策
これを解決するには、次のようにします。ドラッグ アンド ドロップ ロジックを別の MouseDragged イベント ハンドラーに移動できます。これにより、マウス リリース イベントを独立して処理できるようになります。
改訂コード:
<code class="java">Thumbnails[I_Loop].addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { JComponent comp = (JComponent) me.getSource(); TransferHandler handler = comp.getTransferHandler(); } @Override public void mouseReleased(MouseEvent me) { System.out.println("here mouse released"); } }); Thumbnails[I_Loop].addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent me) { JComponent comp = (JComponent) me.getSource(); TransferHandler handler = comp.getTransferHandler(); handler.exportAsDrag(comp, me, TransferHandler.COPY); } });</code>
ドラッグ アンド ドロップ機能を専用の MouseDragged ハンドラーに分離することで、目的の動作を維持し、JLabel 配列に対してマウス リリース イベントが正しく処理されることを確認できます。
追加メモ:
以上がJLabel でのドラッグ アンド ドロップ後の MouseRelease イベント処理を有効にする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。