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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-24 02:41:29764검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.