جافا:التعامل مع إدخال لوحة المفاتيح المدمجة
-
03-07-2019 - |
سؤال
ما هي الطريقة الصحيحة للفصل بين F1 و أي. كنترول+F1 خاص به يحول-كنترول+F1 ضمن KeyListener المسجل خلف أي.جي بوتون؟
public void keyPressed(KeyEvent event) {
int key = event.getKeyCode();
logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")");
}
..دائما يعطيني 112 ل F1, ، 113 ل F2 وما إلى ذلك وهلم جرا.أدرك أنه يمكنني التعامل مع الأمر من خلال الاهتمام بـ keyPressed () الخاص بـ keyReleased for كنترول / يحول / بديل / الخ بمفردي، ولكن آمل أن يكون هناك طريقة أفضل.
شكرا جزيلا !!!
المحلول
الحل يكمن في أصل KeyEvent (InputEvent)
- استخدم الأساليب isAltDown أوisControlDown أوisShiftDown أو
- استخدم طريقة getModifiers
نصائح أخرى
ومنذ KeyEvent يمتد InputEvent، <وأ href = "http://java.sun.com/javase/6/docs/api/java/awt/event/InputEvent.html#isControlDown ()" يختلط = "نوفولو noreferrer "> isControlDown و <لأ href =" http://java.sun.com/javase/6/docs/api/java/awt/event/InputEvent.html#isShiftDown () "يختلط =" نوفولو noreferrer "> isShiftDown و <لأ href =" http://java.sun.com/javase/6/docs/api/java/awt/event/InputEvent.html#isAltDown () "يختلط =" نوفولو noreferrer "> isAltDown .
وKeyEvent
s وربما على مستوى منخفض قليلا عند التعامل مع القطعة سوينغ. بدلا من الذهاب من خلال InputMap
وActionMap
.
ويسمى المفتاح أسفل الحدث كلما مفتاح باستمرار، ومن الواضح. ليس لها عدة الحدث السلبي الرئيسي، وليس هناك شيء من هذا القبيل، لذلك ليس هناك الرمز الرئيسي للمفاتيح متعددة يجري أسفل.
وأنت فقط ستكون لدينا لاستخدام متغير لتتبع مفتاح CRTL للضغط. هذا يعني أنك تسير أيضا لدينا لاستخدام مفتاح يصل الحدث إلى تتبع عندما يتم تحرير مفتاح التحكم.
في كود 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; }