سؤال

ما هي الطريقة الصحيحة للفصل بين 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)

  1. استخدم الأساليب isAltDown أوisControlDown أوisShiftDown أو
  2. استخدم طريقة 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 .

وKeyEvents وربما على مستوى منخفض قليلا عند التعامل مع القطعة سوينغ. بدلا من الذهاب من خلال 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;
 }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top