질문:
마우스 이벤트 재정의를 통해 JLabel에 대한 드래그 앤 드롭 구현 , mouseReleased 이벤트는 mousePressed 이벤트 내에 정의된 경우 마우스 놓을 때 트리거되지 않습니다. 제가 뭔가 잘못하고 있는 것이 있나요?"
코드:
<code class="java">Thumbnails[I_Loop].addMouseListener( new MouseAdapter() { public void mouseReleased(MouseEvent me) { System.out.println("here mouse released"); } public void mousePressed(MouseEvent me) { System.out.println("here mouse pressed"); JComponent comp = (JComponent) me.getSource(); TransferHandler handler = comp.getTransferHandler(); handler.exportAsDrag(comp, me, TransferHandler.COPY); });</code>
답변:
@Thomas의 솔루션 맞습니다. 고려해야 할 두 가지 대체 접근 방식은 다음과 같습니다.
1. JLayeredPane 사용:
이 예에서는 JLayeredPane을 사용하여 구성 요소를 드래그하는 방법을 보여줍니다. , 보다 최근의 예에서는 유사한 접근 방식을 사용합니다.
2. MouseMotionListener 사용:
<code class="java">// ... private Point mousePt; private Point dragPt; private Rectangle bounds; public MouseDragTest() { this.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { int dx = e.getX() - mousePt.x; int dy = e.getY() - mousePt.y; dragPt.setLocation(dragPt.x + dx, dragPt.y + dy); super.mouseDragged(e); } }); this.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { bounds = getBounds(); Point p = SwingUtilities.convertPoint(this, e.getPoint(), Bounds.Parent); if (bounds.contains(p)) { dragPt = p; mousePt = e.getPoint(); } } }); // ... }</code>
이 코드는 MouseMotionListener 사용을 보여줍니다. 이 더 복잡한 예는 동일한 원리를 사용합니다.
코드:
위 내용은 MousePressed 메서드는 JLabel 드래그 앤 드롭에서 MouseReleased의 트리거링을 금지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!