获取组合键

如何获得键盘上的按键组合( Ctrl + somekeyAlt + somekey )与Java?

我使用KeyEvent监听器, MouseEvent监听MouseEvent监听键盘上的所有按键。 我可以通过使用该侦听器捕获键盘上的所有关键事件。 但是,我不能抓住( Ctrl + Alt + Del )等键组合。

Solutions Collecting From Web of "获取组合键"

 public void keyPressed(KeyEvent kevt) { if(kevt.getKeyChar()=='c') { if(kevt.isAltDown()) //Code if Alt+c pressed if(kevt.isControlDown()) //Code if Ctrl+c pressed if(kevt.isShiftDown()) //Code if Shift+c pressed if(kevt.isAltDown()&&kevt.isControlDown()&&(!kevt.isShiftDown())) //Code if Alt+Ctrl+c pressed if(kevt.isAltDown()&&kevt.isShiftDown()&&(!kevt.isControlDown())) //Code if Alt+Shift+c pressed if(!(kevt.isAltDown())&&kevt.isControlDown()&&(kevt.isShiftDown())) //Code if Shift+Ctrl+c pressed if(kevt.isAltDown()&&kevt.isControlDown()&&kevt.isShiftDown()) //Code if Alt+Ctrl+Shift+c pressed } 

使用上面的代码,使用任何字符如果你想检查是否按下了Alt + c + e,请执行以下操作

 import java.awt.event.KeyEvent; import java.awt.event.Keylistner; import java.swing.*; public class Sample implements Keylistner { private JTextField lbl=new JLabel("Hello"); private JPanel pnl=new JPanel(new BorderLayout()); private JFrame frm=new JFrame ("Sample"); int []arr;int i=0; public Sample() { pnl.add("North", lbl); frm.setContentPane(pnl); frm.pack(); frm.setVisible(true); lbl.addKeylistner(this); arr= new int[3]; public void keyPressed(KeyEvent key) { arr[i]=key.getKeyCode(); i++; if((arr[0]==VK_ALT||arr[1]==VK_ALT||arr[2]==VK_ALT)&& (arr[0]==VK_C||arr[1]==VK_C||arr[2]==VK_C)&&(arr[0]==VK_E||arr[1]==VK_E||arr[2]==VK_E)) { //Code you want } } pubic void keyReleased(KeyEvent evt) { arr[i]=null; } public void keyTyped(KeyEvent kvt) { } } } 

这些答案中的许多似乎非常复杂,只是想我会添加我的解决方案。

我写了一个KeyBinder类:

 import java.awt.event.KeyEvent; import java.awt.event.Keylistner; import java.util.Hashtable; public abstract class KeyBinder implements Keylistner { private Hashtable<Integer, Boolean> keyMap; private int[] keyCodes; public KeyBinder(final int... keyCodes) { this.keyMap = new Hashtable<>(); this.keyCodes = keyCodes; } @Override public void keyTyped(final KeyEvent e) { } @Override public void keyPressed(final KeyEvent e) { getKeyMap().put(e.getKeyCode(), true); if (getKeysDown()) { onKeysDown(); } } @Override public void keyReleased(final KeyEvent e) { getKeyMap().put(e.getKeyCode(), false); } private Hashtable<Integer, Boolean> getKeyMap() { return this.keyMap; } public boolean getKeysDown() { for (final int key : this.keyCodes) { if (getKeyMap().containsKey(key)) { if (!getKeyMap().get(key)) { return false; } } else { return false; } } return true; } public abstract void onKeysDown(); } 

然后在我的控制下:

 final KeyBinder binder = new KeyBinder(KeyEvent.VK_ALT, KeyEvent.VK_A) { @Override public void onKeysDown() { System.out.println("Alt+A"); } }; startButton.addKeylistner(binder); 

简单 :)

 @Override public void keyPressed(KeyEvent evt) { if (evt.getKeyCode()==KeyEvent.VK_CONTROL) { ctrl = true; } else if (evt.getKeyCode()==KeyEvent.VK_SHIFT) { shift = true; } else if (evt.getKeyCode()==KeyEvent.VK_ALT) { alt = true; } else { keyHit = KeyEvent.getKeyText( evt.getKeyCode() ); System.out.println("Key Hit is "+keyHit); } processLocalKeyEvent(evt); } @Override public void keyReleased(KeyEvent evt) { if (evt.isControlDown() && keyHit != "") ctrl = true; if (evt.isAltDown() && keyHit != "") alt = true; if (evt.isShiftDown() && keyHit != "") shift = true; if (ctrl) sb.append("Ctrl"); if (shift) sb.append("Shift"); if (alt) sb.append("Alt"); if (!ctrl && !shift && !alt) { sb.append(keyHit); } else { sb.append("_"+keyHit); } if (ctrl || shift || alt) { Thread thread = new Thread(); try { thread.sleep(300); rfbProto.capture(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else if ((ctrl || shift || alt) && keyHit=="") { rfbProto.capture(); } else if ((!ctrl || !shift || !alt) && keyHit!="") { rfbProto.capture(); } ctrl = false; shift = false; alt = false; keyHit = ""; sb = new StringBuffer(); processLocalKeyEvent(evt); } 
  private void jTable1KeyReleased(java.awt.event.KeyEvent evt) { System.out.println(evt.getKeyCode()); //showing code of released button if(evt.isControlDown() && evt.getKeyCode()==40) // 40 is code for arrow down { //if ctrl is pressed and arrow down is released System.out.println("Released " + evt.getKeyCode()); } 

简单的版本