2010-03-10 5 views
6

를 만들기 위해, 왜 키 인쇄를 타격 않는다 "안녕, 세계"CTRL + 을하지 않습니다 타격 동안?자바 스윙 키 스트로크 (keystroke) : 방법 다음 프로그램에서 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

@ 토마스 : 내가 맞는지는 잘 모르겠지만 첫 번째 경우에는 간단한 문자 'a'를 언급했기 때문에 코드가 작동하지 않았을 수 있습니다. 두 번째 경우에서는 ASCII 및 스캔 값 (Ctrl 키) 인 키 조합을 참조합니다. 나는 그것이 사건과 적절하게 연관되어 있어야한다고 생각한다. – bragboy

-1

네를 사용하여, 위의 코드가 작동합니다.

는 큰 그림 - Ctrl 키는이 다를 것B와 같은 서로 다른 키 입력을 읽기를 +.

+5

OP는 "Ctrl-A"와 "A"가 다른 키 입력임을 알고 있습니다. – camickr