2011-04-01 15 views
6

Tôi đang xử lý một số MouseEvent trong ứng dụng GUI bằng cách sử dụng Java Swing.Phát hiện các công cụ sửa đổi Shift trên MouseEvent được tạo ra từ cú nhấp chuột trong swing

Kể từ bây giờ tôi đã phân tích các sự kiện chuột bên trong phương pháp mousePressed, chỉ để xác định nếu một nhấp chuột trái hoặc phải xảy ra.

Mã của tôi là:

public void mousePressed(MouseEvent me) { 
    if (me.getModifiers == InputEvent.BUTTON1_DOWN_MASK){ 
    //left click 
    }else if (me.getModifiers == InputEvent.BUTTON3_DOWN_MASK){ 
    //right click 
    } 

Bây giờ ứng dụng của tôi đang trở thành phức tạp hơn và tôi cũng cần phải kiểm tra xem nút Shift được nhấn trong khi chuột được nhấp chuột trái. Tôi muốn thực hiện một việc như sau:

public void mousePressed(MouseEvent me) { 
    if (me.getModifiers == InputEvent.BUTTON1_DOWN_MASK && me.isShiftDown()){ 
    //left click 
    } 

Bây giờ việc này không hiệu quả. Đặc biệt nếu tôi nhấp vào nút bên trái trong khi giữ SHIFT isShiftDown trả về đúng (rigth. Tôi đã mong đợi rằng), nhưng bây giờ có vẻ là modifiers cũng thay đổi và so sánh với BUTTON1_DOWN_MASK thất bại.

me.getModifiers == InputEvent.BUTTON1_DOWN_MASK //failed..modifiers are changed 

Tôi đang làm gì sai? Làm thế nào tôi có thể sửa mã của tôi?

Trả lời

10

Lưu ý rằng phương thức này được gọi là getModifier_s_(), với "s", bởi vì nó có thể trả về nhiều hơn một công cụ sửa đổi, được kết hợp bằng bitwise "hoặc". Đó là về mặt kỹ thuật không bao giờ đúng để sử dụng "==": bạn nên sử dụng bitwise "&", như thế này:

if ((me.getModifiers() & InputEvent.BUTTON1_DOWN_MASK) != 0) ... 

sau đó bạn sẽ trả lời rằng một modifier, ngay cả khi những người khác có mặt.

+0

bạn là đúng. Dù sao mã của bạn (me.getModifiers() & InputEvent.BUTTON1_DOWN_MASK) không trả về một boolean – Heisenbug

+0

Xin lỗi, bạn nói đúng. Bây giờ đã được sửa. –

+0

xin lỗi. Tôi hơi bối rối. Dường như hoạt động chính xác theo cách ngược lại: (me.getModifiers() & InputEvent.BUTTON1_DOWN_MASK) == 0. Dù sao ... bạn có điểm. thanks – Heisenbug

0

Bạn nên sử dụng

if ((me.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) != 0) 

hoặc

if ((me.getModifiers() & InputEvent.BUTTON1_MASK) != 0) 
Các vấn đề liên quan