用於拖放的JLabel 老鼠事件
將滑鼠事件與JLabel 結合使用可以實現拖放功能,但可能會導致在mousePressed 事件中定義拖放時,mouseReleased 無法如預期運作的問題。
要理解該問題,需要注意的是,在 mousePressed 中定義拖放功能時,它會啟動傳輸過程。這意味著任何後續事件,包括 mouseReleased,可能不會如預期般處理。
在提供的程式碼中:
<code class="java"> public void mousePressed(MouseEvent me) { ... handler.exportAsDrag(comp, me, TransferHandler.COPY); }</code>
呼叫 exportAsDrag 會啟動拖曳操作,這實際上是優先於其他滑鼠事件。因此,諸如 mouseReleased 之類需要完成拖放操作的後續事件不會被觸發。
替代方案:
兩種替代方法可以解決此問題:
使用MouseListListList :
<code class="java"> addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { // Handle drag operation } });</code>
使用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>
以上是如何確保 MouseReleased 事件適用於 Java 中的 JLabel 拖放操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!