> Java > java지도 시간 > JLabel에서 드래그 앤 드롭 후 MouseRelease 이벤트 처리를 활성화하는 방법은 무엇입니까?

JLabel에서 드래그 앤 드롭 후 MouseRelease 이벤트 처리를 활성화하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-23 22:07:30
원래의
645명이 탐색했습니다.

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

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 배열에 대해 마우스 놓기 이벤트가 올바르게 처리되도록 할 수 있습니다.

추가 참고 사항:

  • 이전 가능 구현을 사용하여 정의하는 것을 고려하세요. 드래그 앤 드롭 작업 중에 전송된 데이터.
  • JLayeredPane 또는 MouseMotionListener 사용과 같은 드래그 앤 드롭 기능에 대한 추가 옵션을 살펴보세요.

위 내용은 JLabel에서 드래그 앤 드롭 후 MouseRelease 이벤트 처리를 활성화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿