> Java > java지도 시간 > 본문

MousePressed 메서드는 JLabel 드래그 앤 드롭에서 MouseReleased의 트리거링을 금지합니까?

Mary-Kate Olsen
풀어 주다: 2024-10-24 02:41:29
원래의
848명이 탐색했습니다.

Does MousePressed Method Inhibit MouseReleased from Triggering in JLabel Drag and Drop?

드래그 앤 드롭을 위한 JLabel 마우스 이벤트

질문:

마우스 이벤트 재정의를 통해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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