2011-10-11 6 views
0

키보드의 "Delete" 버튼을 누르면 KEY_PRESSED, KEY_TYPEDKEY_RELEASED의 세 가지 이벤트가 발생합니다. 문제는 KEY_PRESSEDKEY_RELEASED에 매개 변수 "keyCode"이 설정되어 있지만 KEY_TYPED에는 실제로 해당 이벤트에 의미있는 정보가 없습니다. F5 키를 사용하면 KEY_PRESSEDKEY_RELEASED이 등록되지만 KEY_TYPED은 결코 발생하지 않습니다.Java 키보드 이벤트의 이상한 동작

청취자는 Toolkit.getDefaultToolkit().addAWTEventListener()을 통해 추가되었습니다. JDK 6.26 사용.

내 문제가 될 수있는 것은 무엇입니까? 편집

: 여기 는 Delete 키를 누를 때 발생하는 이벤트입니다 : 더 나은

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=127,keyText=Delete,keyChar=Delete,keyLocation=KEY_LOCATION_STANDARD,rawCode=119,primaryLevelUnicode=127,scancode=0] on javax.swing.JButton[,0,0,61x30,alignmentX=0.0,alignmentY=0.5,[email protected],flags=288,maximumSize=,minimumSize=,preferredSize=,[email protected],disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=SVG,defaultCapable=false] 
java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar=Delete,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=127,scancode=0] on javax.swing.JButton[,0,0,61x30,alignmentX=0.0,alignmentY=0.5,[email protected],flags=288,maximumSize=,minimumSize=,preferredSize=,[email protected],disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=SVG,defaultCapable=false] 
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=127,keyText=Delete,keyChar=Delete,keyLocation=KEY_LOCATION_STANDARD,rawCode=119,primaryLevelUnicode=127,scancode=0] on javax.swing.JButton[,0,0,61x30,alignmentX=0.0,alignmentY=0.5,[email protected],flags=288,maximumSize=,minimumSize=,preferredSize=,[email protected],disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=SVG,defaultCapable=false] 
+2

여기서 어떤 문제가 발생합니까? 이것이 정상적인 행동인지 확인 했습니까? 그렇다면 필요한 정보가없는 경우 KEY_TYPED와 같으면 이벤트를 무시하는 if 문 만 있으면 안됩니까? – Mike

+0

@ 마이크 - 내 문제는 사용자가 키보드에서 Del 또는 F5를 입력 할 때 정말로 알아야 할 문제입니다. – Rogach

+0

KEY_PRESSED keyCode에서 해당 정보를 가져올 수 없습니까? – Mike

답변

1

당신은 아마 문자가 입력 된 것으로 등록되지 않은 F5 키를 얻기 위해 노력하고 있습니다. KEY_RELEASED를 사용하면 찾고있는 결과를 일관되게 얻을 수 있으며 API가 예상대로 작동합니다.

5
  • 키보드의 KeyBindings

  • 부분에 대한 키를 예약되어 구현 될 것이다 내장 JComponent의 funcionality, @camickrs의 추가 정보 UIManager Defaults

  • 은 다양한 JComponent에 대한 Listener가 많이 있기 때문에 필터링 또는 텍스트 변경 내용을 내부에 등록해야하기 때문에 이유가 무엇인가에 따라 KeyListener가 필요합니다.

  • 일부 생성 된 JComponent 모델 마우스 및 키보드 입력 이벤트 JavaDocThe "key typed" event. This event is generated when a character is entered. In the simplest case, it is produced by a single key press. Often, however, characters are produced by series of key presses, and the mapping from key pressed events to key typed events may be many-to-one or many-to-many.

    에서

+1

+1 키 바인딩. 드물게이 같은 요구 사항에 대해 KeyListener를 사용해야합니다. – camickr

1

키 입력 이벤트는 항상 키 코드로 '0'을 생성합니다. 대신 getKeyChar() 메서드를 찾아 보거나 (제안 된 것처럼) keyReleased()를 대신 수신 대기합니다. getKeyChar() : http://goo.gl/ajH03

관련 문제