JLabel でのドラッグ アンド ドロップ後の MouseRelease イベント処理を有効にする方法

Barbara Streisand
リリース: 2024-10-23 22:07:30
オリジナル
555 人が閲覧しました

How to Enable MouseRelease Event Handling After Drag and Drop on JLabel?

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 配列に対してマウス リリース イベントが正しく処理されることを確認できます。

追加メモ:

  • 定義するには Transferable 実装の使用を検討してください。ドラッグ アンド ドロップ操作中に転送されるデータ。
  • JLayeredPane や MouseMotionListener の使用など、ドラッグ アンド ドロップ機能の追加オプションを確認します。

以上がJLabel でのドラッグ アンド ドロップ後の MouseRelease イベント処理を有効にする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!