2008-12-30 6 views
5

cách chính xác để tách giữa F1 và ví dụ CTRL + F1 tương ứng SHIFT là gì - CTRL + F1 trong một KeyListener đăng ký đằng sau tức là một JButton?Java: Xử lý kết hợp bàn phím đầu vào

public void keyPressed(KeyEvent event) { 
    int key = event.getKeyCode(); 

    logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")"); 
} 

.. luôn mang lại cho tôi 112 cho F1, 113 cho F2 và vân vân. Tôi hiểu rằng tôi có thể xử lý nó bằng cách quan tâm đến keyPressed() tương ứng với keyReleased cho CTRL/SHIFT/ALT/etc của riêng tôi, nhưng tôi hy vọng rằng có một cách tốt hơn.

Rất nhiều người cảm ơn !!!

+0

@ThomasAbraham Vui lòng ngừng tập trung vào một tác vụ chỉnh sửa - có rất nhiều điều có thể được thực hiện trong câu hỏi này (thẻ trong tiêu đề, cảm ơn ở cuối, từ khóa có thể được đánh dấu) và bất kỳ chỉnh sửa nào cần cố gắng sửa * tất cả * của nó, không chỉ là một điều duy nhất. =) –

Trả lời

4

Giải pháp nằm trong các phụ huynh của KeyEvent (InputEvent)

  1. phương pháp Sử dụng isAltDown, isControlDown, isShiftDown hoặc
  2. Sử dụng getModifiers phương pháp
+0

Rất cám ơn, đó chính là điều tôi đang tìm kiếm! – MrG

0

Sự kiện không hoạt động chính được gọi bất cứ khi nào một phím tắt, hiển nhiên. Sự kiện không phải là sự kiện đa khóa của nó và không có sự kiện như vậy, vì vậy không có mã khóa cho nhiều phím bị hỏng.

Bạn chỉ cần sử dụng biến để theo dõi khóa crtl đang được nhấn. Điều này có nghĩa là bạn cũng sẽ phải sử dụng một sự kiện quan trọng để theo dõi khi nào phím điều khiển được phát hành.

Trong mã pusedo:

 
// CRTLKeyCode is whatever the code is for the ctrl key 
private boolean ctrlPressed = false; 

onKeyDown(KeyEvent event){ 
    int key = event.getKeyCode(); 
    if(key == CRTLKeyCode) 
     ctrlPressed = true; 
    else if(ctrlPressed && key == 112) 
     //Perform your action 
} 
onKeyUp(KeyEvent event){ 
    int key = event.getKeyCode(); 
    if(key == CRTLKeyCode) 
     ctrlPressed = false; 
} 
+0

Rất cám ơn, nhưng tôi nghĩ rằng sẽ dễ dàng hơn khi tìm nạp trạng thái theo yêu cầu với isXxxDown() như được đề xuất bởi Midhat/bcash để quản lý trạng thái của riêng tôi. – MrG

1

KeyEvent s có lẽ một chút ở mức độ thấp khi giao dịch với một widget Swing. Thay vào đó, hãy xem qua InputMapActionMap.