Java

2010-06-16 10 views
6

'da bir InputEvent nesnesi olmadan değiştirici anahtarı durumunu belirleme Shift tuşunun geçerli durumunu belirlemem gerekir, ancak zamana ihtiyacım olan bir InputEvent nesnesine sahip olmam gerekir. Sadece VK_CAPS_LOCK gibi kilitleme tuşları için değil, Shift için çalışan java.awt.Toolkit.getLockingKeyState(int) gibi bir şeye ihtiyacım var. Giriş olaylarını dinlemeden ve durumu kontrol etmem gerektiğinde saklamak için bunu yapmanın bir yolu var mı?Java

Teşekkürler!

+1

İyi soru. Çalıştığım uygulama bir InputEvent/KeyListener kullanıyor, ancak başka bir uygulama odaklıysanız, vardiyaya basıldığında vardiyanın çalışıp çalışmadığına karar vermemeye karar vermemiz ve daha sonra uygulama penceremize geçmemiz gerektiği anlamına geliyor. –

cevap

1

Elinizde bir Etkinliğiniz yoksa, Shift tuşunun durumunu elde etmenin mümkün olduğunu düşünmüyorum. Java.awt.Toolkit.getLockingKeyState (int) bile bilgilerini almak için yerel kodu kullanır. Kendi etkinlik izleyicinizi/mağazanızı vb. Düzenleyebileceğinizden eminim, ancak her durumda, burada yararlı olabilecek küçük bir yöntem var. Odağı olan bir AWT Bileşeni sağlamanız gerekir.

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."); 
}