2010-03-10 35 views
6

在下面的程序,爲什麼擊中一個鍵打印「你好,世界」同時擊中CTRL +一個不?的Java Swing快捷鍵:如何讓CTRL-修改工作

import java.awt.event.*; 
import javax.swing.*; 

public class KeyStrokeTest { 
    public static void main(String[] args) { 
     JPanel panel = new JPanel(); 

     /* add a new action named "foo" to the panel's action map */ 
     panel.getActionMap().put("foo", new AbstractAction() { 
       public void actionPerformed(ActionEvent e) { 
        System.out.println("hello, world"); 
       } 
      }); 

     /* connect two keystrokes with the newly created "foo" action: 
      - a 
      - CTRL-a 
     */ 
     InputMap inputMap = panel.getInputMap(); 
     inputMap.put(KeyStroke.getKeyStroke(Character.valueOf('a'), 0), "foo"); 
     inputMap.put(KeyStroke.getKeyStroke(Character.valueOf('a'), InputEvent.CTRL_DOWN_MASK), "foo"); 

     /* display the panel in a frame */ 
     JFrame frame = new JFrame(); 
     frame.getContentPane().add(panel); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(400, 400); 
     frame.setVisible(true); 
    } 
} 

我怎麼能解決這個問題是CTRL +一個作品也?

回答

15

我覺得它更容易使用:

KeyStroke a = KeyStroke.getKeyStroke("A"); 
KeyStroke controlA = KeyStroke.getKeyStroke("control A"); 

或:

KeyStroke controlA = KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK); 
6

哥們,使用此

inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK), "foo"); 
+0

老兄,謝謝!您的解決方案的工作原理,但我仍然想知道爲什麼我的不... – Thomas

+0

有趣的我在本文之前提出了我的建議,再加上我給了你其他的替代品,你可能能夠在不同的情況下使用。我想我下次不會遇到麻煩。 – camickr

+1

@Thomas:我不知道我是否正確,但是你的代碼可能不起作用的原因是因爲在第一種情況下,你指的是一個簡單的字符'a'。在第二種情況下,您指的是ASCII碼和掃描值(Ctrl鍵)的鍵組合。我覺得它應該正確地與事件聯繫在一起。 – bragboy

-1

是的,上面的代碼將工作。

大畫面 - CTRL +一個一個被讀取爲不同的鍵擊一樣一個b會有所不同。

+5

OP知道「Ctrl-A」和「A」是不同的擊鍵。 – camickr

相關問題