2013-08-15 20 views
9

Mục tiêu của tôi là để đơn giản hóa mã này (tất cả hoạt động tốt):Phương pháp MouseAdapter - tại sao `mouseDragged`,` mouseMoved` và `mouseWheelMoved` được bao gồm?

package test; 

import java.awt.Window; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 
import javax.swing.JWindow; 

public class A extends JWindow implements MouseListener, MouseMotionListener { 

    public A() { 
     addMouseListener(A.this); 
     addMouseMotionListener(A.this); 
    } 

    @Override 
    public void mouseClicked(MouseEvent e) { 
    } 

    @Override 
    public void mousePressed(MouseEvent e) { 
     //This method is being used, working fine 
    } 

    @Override 
    public void mouseReleased(MouseEvent e) { 
    } 

    @Override 
    public void mouseEntered(MouseEvent e) { 
    } 

    @Override 
    public void mouseExited(MouseEvent e) { 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     //This method is being used, working fine 
    } 

    @Override 
    public void mouseMoved(MouseEvent e) { 
    } 
} 

Nhưng nếu tôi quyết định sử dụng MouseAdapter như thế này:

addMouseListener(new MouseAdapter() { 
    @Override 
    public void mousePressed(MouseEvent e) { 
     transferFocusBackward(); 
     //This method is being used, working fine 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     //This method is being used, not working anymore 
    } 
}); 

mouseDragged nhận có sự kiện nào. Nhưng nếu tôi thêm MouseMotionListener như sau:

addMouseListener(new MouseAdapter() { 
    @Override 
    public void mousePressed(MouseEvent e) { 
     //This method is being used, working fine 
    } 
}); 

addMouseMotionListener(new MouseMotionAdapter() { 
    @Override 
    public void mouseDragged(MouseEvent e) { 
     //This method is being used, working fine 
    } 
}); 

Sau đó mọi thứ trở lại bình thường. Vì vậy, câu hỏi của tôi là - mục đích của các phương pháp mouseDragged, mouseMovedmouseWheelMoved trong lớp MouseAdapter là gì nếu chúng không hoạt động?

+3

Bạn phải thêm 'MouseAdapter' bằng cách sử dụng' addMouseMotionListener' nếu bạn muốn nó lắng nghe các sự kiện chuyển động của chuột. – Vulcan

+0

Chờ ... cái gì? Tôi đã không nhận ra rằng họ đã thay đổi điều này trong Java 6, vì tôi vẫn bị mắc kẹt bằng cách sử dụng Java 5, nơi 'MouseAdapter' * chỉ * triển khai' MouseListener'. Điều tiếp theo bạn sẽ nói với tôi là họ đã cải thiện 'SwingWorker'. Ha, đúng rồi. – splungebob

Trả lời

9

OK, tôi nghĩ rằng tôi hiểu bây giờ: trong MouseAdapter tài liệu hướng dẫn lớp người ta nói rằng "Tạo một đối tượng người nghe bằng cách sử dụng lớp mở rộng và sau đó đăng ký nó với một thành phần sử dụng addMouseListener, addMouseMotionListener, addMouseWheelListener phương pháp của thành phần". Vì vậy, bây giờ nó trông giống như:

private class MouseListeners extends MouseAdapter { 

    @Override 
    public void mousePressed(MouseEvent e) { 
     //This method is being used, working fine 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     //This method is being used, working fine 
    } 
} 

và sau đó:

MouseListeners listeners = new MouseListeners(); 
addMouseListener(listeners); 
addMouseMotionListener(listeners); 

Bây giờ mọi thứ đều OK.

+0

Làm tốt lắm. Đừng quên đánh dấu câu trả lời của riêng bạn như được chấp nhận. – Vulcan

+0

+1 tiến bộ thú vị :-), lần thứ hai của tuần này tôi có thể ở đây một cái gì đó như là == Tôi đọc tài liệu – mKorbel

Các vấn đề liên quan