作者superlubu (叔叔你人真好)
看板java
标题Re: [问题] 请教 JEditorPane 及 Listener的问题
时间Wed Jun 11 15:02:28 2008
※ 引述《seruze (seruze)》之铭言:
: 而,为什麽放在 keyPressed() 中,会往下跳一行呢?
: 希望大大们赐教~谢谢了~
关於这一部份的答案,在於要先了解 keyPressed, keyRelease 和 keyTyped 是什麽回事
其实当你使用键盘输入一个按键时,会在 component 中先後产生好几个 event:
1. keyPressed: 按键被按下了
2. keyTyped: 一个字母 (只有 printable 的按键会产生这个 event,
Ctrl, Alt, Shift 等特别按键不会产生 keyTyped event)
3. keyRelease: 被按着的键放开了
就如你一直长按着 'a' 时,在 editor 中会一直出现 'a' 一样;当你在
component 中一直长按 'a',它会一直产生以下的 event:
keyPressed: KeyEvent.getChar() == 'a';
keyTyped: KeyEvent.getChar() == 'a';
keyPressed: KeyEvent.getChar() == 'a';
keyTyped: KeyEvent.getChar() == 'a';
keyPressed: KeyEvent.getChar() == 'a';
keyTyped: KeyEvent.getChar() == 'a';
直至你放开手,就会产生最後一个 keyReleased: KeyEvent.getChar() == 'a'
所以当你按 Enter 键时,其实会有两个不同的 event 产生:
keyPressed: KeyEvent.getCode() == KeyEvent.VK_ENTER;
keyTyped: KeyEvent.getChar() == '\n'
然而真正处理输入的程序往往都在处理 keyTyped event 时进行
所以当你只有抓取 keyPressed event 而忽略 keyTyped 的话,
跳行还是会由 component 自己去处理,也就是自己换行去了.
--
劲过吕布的劲过相簿...
http://www.pixnet.net/superlubu
乱七八糟的,不好意思 m(_ _)m
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 147.8.127.102
1F:推 seruze:我真的是非常感谢你的用心说明,让我了解他的原理,谢谢! 06/11 15:16