JLabel 的拖放功能和自定义鼠标事件处理
您寻求通过覆盖 JLabel 上的鼠标事件来实现拖放功能名为“缩略图”的数组。但是,您发现在 mousePressed 事件处理程序中定义拖放后,不会触发 mouseReleased 事件处理程序。
了解问题
在此特定场景中,未注册鼠标释放事件,因为拖放操作拦截了鼠标事件。当您在 mousePressed 处理程序中调用 exportAsDrag 方法时,它会启动拖动操作,并在同一操作中消耗后续鼠标事件。
解决方案
要解决此问题,您可以将拖放逻辑移动到单独的 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中文网其他相关文章!