2010-06-16 30 views
6

Tôi cần xác định trạng thái hiện tại của phím Shift, nhưng tại thời điểm tôi cần trạng thái, tôi không có đối tượng InputEvent xung quanh. Tôi cần một cái gì đó như java.awt.Toolkit.getLockingKeyState(int) hoạt động cho Shift, không chỉ các phím khóa như VK_CAPS_LOCK. Có cách nào tôi có thể làm điều này mà không cần nghe các sự kiện đầu vào và lưu trữ sau này khi tôi cần phải kiểm tra trạng thái?Xác định trạng thái khóa bổ trợ mà không cần đối tượng InputEvent trong Java

Cảm ơn!

+1

Câu hỏi hay. Việc thực hiện tôi làm việc với việc sử dụng InputEvent/KeyListener nhưng nó có nghĩa là chúng tôi có một hack để xác định xem sự thay đổi có giảm hay không không hoạt động nếu bạn có một ứng dụng khác tập trung, nhấn shift, sau đó chuyển đến cửa sổ ứng dụng của chúng tôi. –

Trả lời

1

Tôi không nghĩ rằng bạn có thể nhận trạng thái của phím Shift nếu bạn không có Sự kiện trong tay. Thậm chí java.awt.Toolkit.getLockingKeyState (int) sử dụng mã nguồn gốc để lấy thông tin của nó. Tôi chắc chắn bạn có thể tạo ra bộ theo dõi sự kiện/cửa hàng của riêng bạn, v.v. nhưng chỉ trong trường hợp, đây là một phương pháp nhỏ có thể hữu ích. Bạn phải cung cấp nó với một thành phần AWT có tiêu điểm.

public static boolean isShiftDown(Component c) throws AWTException { 
    final List<Boolean> res = new ArrayList<Boolean>(); 
    final KeyListener listener = new KeyAdapter() { 
     @Override public void keyReleased(KeyEvent e) { 
      res.add(e.isShiftDown()); 
     } 
    }; 
    c.addKeyListener(listener); 
    new Robot().keyRelease(KeyEvent.VK_ALT); 
    try {Thread.sleep(50);} catch (InterruptedException e) {} 
    c.removeKeyListener(listener); 
    if (res.size() > 0) 
     return res.get(0); 
    throw new AWTException("Could not get shift key status."); 
} 
Các vấn đề liên quan