드래그 앤 드롭을 위한 JLabel 마우스 이벤트
JLabel과 함께 마우스 이벤트를 사용하면 드래그 앤 드롭 기능이 허용되지만 다음과 같은 문제가 발생할 수 있습니다. mousePressed 이벤트에 드래그 앤 드롭이 정의된 경우 mouseReleased가 예상대로 작동하지 않는 문제.
문제를 이해하려면 mousePressed에서 드래그 앤 드롭 기능을 정의할 때 전송을 시작한다는 점에 유의하는 것이 중요합니다. 프로세스. 이는 mouseReleased를 포함한 모든 후속 이벤트가 예상대로 처리되지 않을 수 있음을 의미합니다.
제공된 코드에서:
<code class="java"> public void mousePressed(MouseEvent me) { ... handler.exportAsDrag(comp, me, TransferHandler.COPY); }</code>
exportAsDrag를 호출하면 드래그 앤 드롭 작업이 시작됩니다. 다른 마우스 이벤트보다 우선합니다. 결과적으로 끌어서 놓기 작업을 완료해야 하는 mouseReleased와 같은 후속 이벤트는 트리거되지 않습니다.
대안:
두 가지 대체 접근 방식을 사용할 수 있습니다. 이 문제 해결:
MouseMotionListener 사용:
<code class="java"> addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { // Handle drag operation } });</code>
이 접근 방식은 드래그 작업과 버튼 누름을 분리하여 mouseReleased가 작동하도록 합니다. 예상대로입니다.
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 중에 Ctrl 키를 눌렀을 때만 드래그 작업이 시작되므로 mouseReleased가 의도한 대로 작동할 수 있습니다.
위 내용은 Java에서 JLabel 드래그 앤 드롭에 대해 MouseReleased 이벤트가 작동하는지 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!