簡體   English   中英

Java中鍵盤事件的怪異行為

[英]Weird behavior of keyboard events in Java

當我按下鍵盤上的"Delete"按鈕時,程序將獲得三個事件KEY_PRESSEDKEY_TYPEDKEY_RELEASED 問題是,在KEY_PRESSEDKEY_RELEASED ,設置了參數"keyCode" ,但在KEY_TYPED中未設置(實際上,在該事件中沒有有意義的信息)。 使用F5鍵,它甚至更有趣-已注冊KEY_PRESSEDKEY_RELEASED ,但從不發生KEY_TYPED

偵聽器是通過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,border=javax.swing.plaf.synth.SynthBorder@50f38cf0,flags=288,maximumSize=,minimumSize=,preferredSize=,defaultIcon=javax.swing.ImageIcon@6ae2d0b2,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,border=javax.swing.plaf.synth.SynthBorder@50f38cf0,flags=288,maximumSize=,minimumSize=,preferredSize=,defaultIcon=javax.swing.ImageIcon@6ae2d0b2,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,border=javax.swing.plaf.synth.SynthBorder@50f38cf0,flags=288,maximumSize=,minimumSize=,preferredSize=,defaultIcon=javax.swing.ImageIcon@6ae2d0b2,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]
  • 更好的是實現KeyBindings

  • 鍵盤的一部分保留為內置JComponent功能的鍵,有關更多信息,請參見@camickrs UIManager默認值

  • 取決於您需要為什么使用KeyListener的原因,因為對於各種JComponent,還有許多其他的Listener,它們應該在內部過濾或注冊文本更改

  • 一些JComponent模型通過鼠標和鍵盤輸入生成事件

按鍵類型的事件始終會生成“ 0”作為按鍵代碼。 查找方法getKeyChar()代替,或者(如建議的那樣)監聽keyReleased()。 getKeyChar(): http//goo.gl/ajH03

來自JavaDoc The "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. The "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.

您正在嘗試獲取可能未注冊為輸入字符的F5鍵。 通過使用KEY_RELEASED,您將始終獲得所需的結果,並且API的行為符合預期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM