首頁 > Java > java教程 > 主體

如何確保 MouseReleased 事件適用於 Java 中的 JLabel 拖放操作?

Mary-Kate Olsen
發布: 2024-10-24 00:26:02
原創
667 人瀏覽過

How to Ensure MouseReleased Event Works for JLabel Drag-and-Drop in Java?

用於拖放的JLabel 老鼠事件

將滑鼠事件與JLabel 結合使用可以實現拖放功能,但可能會導致在mousePressed 事件中定義拖放時,mouseReleased 無法如預期運作的問題。

要理解該問題,需要注意的是,在 mousePressed 中定義拖放功能時,它會啟動傳輸過程。這意味著任何後續事件,包括 mouseReleased,可能不會如預期般處理。

在提供的程式碼中:

<code class="java">            public void mousePressed(MouseEvent me) {
                ...
                handler.exportAsDrag(comp, me, TransferHandler.COPY);
            }</code>
登入後複製

呼叫 exportAsDrag 會啟動拖曳操作,這實際上是優先於其他滑鼠事件。因此,諸如 mouseReleased 之類需要完成拖放操作的後續事件不會被觸發。

替代方案:

兩種替代方法可以解決此問題:

  1. 使用MouseListListList :

    <code class="java">     addMouseMotionListener(new MouseMotionAdapter() {
             @Override
             public void mouseDragged(MouseEvent e) {
                 // Handle drag operation
             }
         });</code>
    登入後複製
    此方法將拖曳操作與按鈕按下分離,從而允許mouseReleased 工作

  2. 使用JComponent.setTransferHandler 並在mouseReleased 中開始拖放:

    <code class="java">     setTransferHandler(new TransferHandler("text"));
    
         addMouseListener(new MouseAdapter() {
             @Override
             public void mouseReleased(MouseEvent e) {
                 if (e.isControlDown()) {
                     getTransferHandler().exportAsDrag(this, e, TransferHandler.COPY);
                 }
             }
         });</code>
    登入後複製
    這裡,傳輸處理程序是在JLabel 上設置,只有在mouseReleased 期間按下Control 鍵時才會啟動拖曳操作,讓mouseReleased 按預期工作。

以上是如何確保 MouseReleased 事件適用於 Java 中的 JLabel 拖放操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!