2010-04-13 20 views
9

Tôi có đoạn mã sau thêm một ActionListener để một JTextField:làm thế nào để loại bỏ MouseListener/ActionListener trên một JTextField

chatInput.addMouseListener(new java.awt.event.MouseAdapter() { 
    public void mouseClicked(java.awt.event.MouseEvent evt) { 
     chatInputMouseClicked(evt); 
    } 
}); 

Bây giờ làm thế nào để loại bỏ MouseListener này sử dụng chatInput.removeMouseListener(), vì chức năng này cần một cuộc tranh cãi?

Trả lời

18

Bạn có thể xem xét 3 phương pháp:

1) Lưu tài liệu tham khảo để người nghe của bạn trước khi thêm nó, do đó bạn có thể loại bỏ nó sau này:

MouseListener ml = new MouseAdapter() { 
    public void mouseClicked(java.awt.event.MouseEvent evt) { 
     chatInputMouseClicked(evt); 
    } 
}; 
chatInput.addMouseListener (ml); 
... 
chatInput.removeMouseListener (ml); 

2) Bạn có thể nhận được tất cả người nghe sự kiện nhất định với các phương thức tương ứng như:

public MouseListener[] getMouseListeners() 

hoặc

public EventListener[] getListeners(Class listenerType) 

Dưới đây là các javadocs cho các phương pháp firstsecond. Nếu bạn có thể xác định trong số tất cả người nghe mà bạn muốn xóa hoặc nếu bạn muốn xóa tất cả người nghe thì phương pháp này có thể hữu ích.


3) Bạn có thể sử dụng một số biến boolean sẽ tắt 'người nghe của bạn. Nhưng bạn nên lưu ý rằng các biến phải là một lĩnh vực của lớp bên ngoài:

private boolean mouseListenerIsActive; 

public void doSmthWithMouseListeners() { 
    mouseListenerIsActive = true; 

    chatInput.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent evt) { 
      if (mouseListenerIsActive) { 
       chatInputMouseClicked(evt); 
      } 
     } 
    }); 
} 

public void stopMouseListner() { 
    mouseListenerIsActive = false; 
} 

tôi sẽ thích một phần ba vì nó mang lại một số linh hoạt và nếu tôi muốn bật nghe chuột một lần nữa tôi sẽ không cần để tạo đối tượng mới.

+0

Tôi thường sử dụng tùy chọn đầu tiên để xóa vĩnh viễn người nghe khỏi thành phần tồn tại lâu hơn mà người đã đăng ký người nghe (ví dụ: trong phương thức 'dispose()'). Để tạm thời vô hiệu hóa người nghe, tôi đã sử dụng tùy chọn thứ ba. Điều này chủ yếu là cần thiết để ngăn chặn đệ quy. Ví dụ. khi một người nghe kích hoạt các thay đổi văn bản dẫn đến một sự thay đổi trong cùng một văn bản đó (vì bất kỳ lý do gì), tôi vô hiệu hóa trình nghe khi bắt đầu phương thức nghe và bật nó ở cuối. –

+0

Tôi đoán tôi phải tạo một MouseListener trước khi sử dụng nó. Tôi không thể xóa các Danh sách phát chuột ẩn danh. – mithun1538

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