2013-05-07 58 views
8

Từ trang web java:Sự khác nhau giữa BUTTON1_MASK và BUTTON1_DOWN_MASK là gì?

BUTTON1_DOWN_MASK = The Mouse Button1 extended modifier constant. 
BUTTON1_MASK = The Mouse Button1 modifier constant. 

Tôi thậm chí không chắc chắn những gì một "modifier liên tục" là. Hãy để một mình một mở rộng. Tuy nhiên, tôi hiểu rằng BUTTON1_MASK chỉ là biểu diễn số nguyên khi nhấn nút chuột trái.

Trả lời

8

BUTTON1_MASK là mặt nạ cho biết sự kiện đến từ nút 1. BUTTON1_DOWN_MASK tương tự về mặt khái niệm, nhưng là mở rộng phiên bản của hằng số đó.

Có hai phương pháp mà trở về bộ như các hằng số: InputEvent#getModifiers()InputEvent#getModifiersEx(), và họ sẽ trở lại hằng modifier, hoặc mở rộng hằng modifier, tương ứng.

From the docs (bold is mine):

Nút mặt nạ được trả về bởi InputEvent.getModifiers() chỉ phản ánh nút làm thay đổi trạng thái, không phải là hiện trạng thái của tất cả các nút ... Để có được trạng thái của tất cả các các nút và công cụ sửa đổi , sử dụng InputEvent.getModifiersEx().

and also (bold is mine): bổ

Extended đại diện cho nhà nước của tất cả các phím đa phương thức, chẳng hạn như ALT, CTRL, META, và các nút chuột chỉ sau sự kiện này xảy ra

Ví dụ: nếu người dùng nhấn nút 1 theo sau là nút 2 và thì giải phóng chúng theo cùng một thứ tự, chuỗi sự kiện sau đây.210 được tạo ra:

MOUSE_PRESSED: BUTTON1_DOWN_MASK 
MOUSE_PRESSED: BUTTON1_DOWN_MASK | BUTTON2_DOWN_MASK 
MOUSE_RELEASED: BUTTON2_DOWN_MASK 
MOUSE_CLICKED: BUTTON2_DOWN_MASK 
MOUSE_RELEASED: 
MOUSE_CLICKED: 

Nếu tất cả các bạn muốn là để phát hiện một nút 1 (bình thường, trái) nhấp chuột, sau đó một trong những nên làm việc:

if ((e.getModifiers() & MouseEvent.BUTTON1_MASK) != 0) { 
    System.out.println("BUTTON1_MASK"); 
} 

if ((e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) != 0) { 
    System.out.println("BUTTON1_DOWN_MASK"); 
} 

Ngoài ra, bạn có thể kiểm tra phiên bản nguồn mở này của InputEvent, which has some more useful comments, and shows what's happening inside

+0

Đã lâu rồi nhưng bất cứ ai đọc nội dung này: tại sao mã của bạn lại có ký hiệu đơn? ví dụ: e.getModifiers() & MouseEvent.BUTTON1_MASK. Đó có phải là đại diện cho giao lộ được thiết lập không? – user2316667

+1

@ user2316667, đó là vì 'getModifiers()' và [getModifiersEx()] (http://docs.oracle.com/javase/7/docs/api/java/awt/event/InputEvent.html#getModifiersEx%28 % 29) phương thức trả về một số nguyên, có thể chứa một * kết hợp * của cờ. Để kiểm tra cho bất kỳ ** một ** cờ cụ thể nào trong một số nguyên, bạn sử dụng toán tử '&' để xem bit cụ thể đó có phải là nonzero hay không (đó là nơi '! = 0' xuất phát từ). Vì vậy, nếu bit Button1 là những gì bạn quan tâm, bạn kiểm tra với một mặt nạ như 'e.getModifiers() & BUTTON1_MASK! = 0'. Đây không phải là toán tử boolean '&&' ... đó là một cái gì đó khác. – Nate

+0

[Xem hướng dẫn này để biết thêm] (http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm) về các toán tử như "bitwise AND". – Nate

3

Là trạng thái tài liệu, BUTTON1_MASKBUTTON1_DOWN_MASK là hằng số bổ trợ, tức là chúng được sử dụng kết hợp với MouseEvent#getModifiers. Họ không kéo dài, nhưng thay vì sử dụng như một giá trị mặt nạ, ví dụ

@Override 
public void mousePressed(MouseEvent me) { 
if ((me.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) { 
     System.out.println("Left button pressed."); 
    } 
} 

BUTTON1_DOWN_MASK được sử dụng để phát hiện tình trạng của nút chuột trong khi BUTTON1_MASK chỉ giúp để xác định nút được nhấn.

+0

Câu trả lời này là súc tích. – smwikipedia

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