JLabel에 대한 사용자 정의 마우스 이벤트 처리를 통한 드래그 앤 드롭 기능
JLabel에서 마우스 이벤트를 재정의하여 드래그 앤 드롭 기능을 구현하려고 합니다. "Thumbnails"라는 배열입니다. 그러나 mousePressed 이벤트 핸들러에서 드래그 앤 드롭을 정의한 후 mouseReleased 이벤트 핸들러가 트리거되지 않는 것을 확인했습니다.
문제 이해
이 특정 시나리오에서는 드래그 앤 드롭 작업이 마우스 이벤트를 가로채기 때문에 마우스 놓기 이벤트가 등록되지 않습니다. mousePressed 핸들러 내에서 내보내기AsDrag 메소드를 호출하면 드래그 작업이 시작되고 동일한 작업 내에서 후속 마우스 이벤트가 소비됩니다.
해결책
이 문제를 해결하려면 드래그 앤 드롭 논리를 별도의 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!