如何检测 keyTypedEvent 中的退格键
How to detect backspace in a keyTypedEvent
我正在使用 Netbeans 的 bean 形式来创建我的 GUI。
我已经将 keyTyped 事件添加到 JTextArea 并且我想检测键入的键是否是 Backspace .
由于其他原因我正在使用 keyTyped 事件,所以我不能只使用 keyPressed 事件。
这是生成的代码(以及我的 if 检查):
private void langArea1KeyTyped(java.awt.event.KeyEvent evt) {
if(evt.getChar()== backspace) //how can I make this check?
}
evt.getKeyCode()
始终 returns 0 与键入的键无关。
evt.getKeyChar()
只是删除打印时打印的最后一个字符,所以我不能使用 System.out.print(evt.getKeyChar())
检测它的值并检查它。
如何检测键入的键是否为 Backspace(或 Delete)?
backspace
和 delete
具有以下常量:
VK_BACK_SPACE
VK_DELETE
此处列出常量:
Class KeyEvent
WARNING: Aside from those keys that are defined by the Java language (VK_ENTER
, VK_BACK_SPACE
, and VK_TAB
), do not rely on the values of the VK_
constants. Sun reserves the right to change these values as needed to accomodate a wider range of keyboards in the future.
除此之外,我建议您使用 keyPressed()
或 keyReleased()
,因为 keyTyped()
仅用于生成字符的键。键 backspace
和 delete
不产生字符。
补充:
getKeyChar()
与 KEY_TYPED
配合使用效果很好,如前所述 here:
The getKeyChar
method always returns a valid Unicode character or CHAR_UNDEFINED
. Character input is reported by KEY_TYPED
events: KEY_PRESSED
and KEY_RELEASED
events are not necessarily associated with character input.
Therefore, the result of the getKeyChar
method is guaranteed to be meaningful only for KEY_TYPED
events.
你可以看看这些链接:
The keyTyped() event is only used for keys that produce character input.
"Key typed" events are higher-level and generally do not depend on the platform or keyboard layout.
您不能使用keyTyped
,您需要使用keyPressed
或keyReleased
来确定是否已键入退格字符。 keyTyped
事件只拾取非转义字符(只能显示的字符)。
退格字符可以用KeyEvent.VK_BACK_SPACE
检查。
尝试将此侦听器添加到 keyPressed
事件:
import java.awt.event.KeyEvent;
private void langArea1KeyPressed(KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
// Do something...
}
}
补充阅读
您可以在 How to Write a Key Listener 上查看官方 Java 教程。
我认为可以在“KeyTyped”事件中检查 BACKSPACE。您可以将 char 的十六进制值与常量 KeyEvent.VK_BACK_SPACE.
的十六进制值进行比较
示例(如果键入的键是退格键,则仅 return 为真,否则 return 为假并消耗事件):
public static boolean CheckBackspace(KeyEvent e) {
if (!((Integer.toHexString(e.getKeyChar()).equals(Integer.toHexString(KeyEvent.VK_BACK_SPACE))))) {
e.consume();
return false;
}
return true;
}
我正在使用 Netbeans 的 bean 形式来创建我的 GUI。
我已经将 keyTyped 事件添加到 JTextArea 并且我想检测键入的键是否是 Backspace .
由于其他原因我正在使用 keyTyped 事件,所以我不能只使用 keyPressed 事件。
这是生成的代码(以及我的 if 检查):
private void langArea1KeyTyped(java.awt.event.KeyEvent evt) {
if(evt.getChar()== backspace) //how can I make this check?
}
evt.getKeyCode()
始终 returns 0 与键入的键无关。
evt.getKeyChar()
只是删除打印时打印的最后一个字符,所以我不能使用 System.out.print(evt.getKeyChar())
检测它的值并检查它。
如何检测键入的键是否为 Backspace(或 Delete)?
backspace
和 delete
具有以下常量:
VK_BACK_SPACE
VK_DELETE
此处列出常量: Class KeyEvent
WARNING: Aside from those keys that are defined by the Java language (
VK_ENTER
,VK_BACK_SPACE
, andVK_TAB
), do not rely on the values of theVK_
constants. Sun reserves the right to change these values as needed to accomodate a wider range of keyboards in the future.
除此之外,我建议您使用 keyPressed()
或 keyReleased()
,因为 keyTyped()
仅用于生成字符的键。键 backspace
和 delete
不产生字符。
补充:
getKeyChar()
与 KEY_TYPED
配合使用效果很好,如前所述 here:
The
getKeyChar
method always returns a valid Unicode character orCHAR_UNDEFINED
. Character input is reported byKEY_TYPED
events:KEY_PRESSED
andKEY_RELEASED
events are not necessarily associated with character input.Therefore, the result of the
getKeyChar
method is guaranteed to be meaningful only forKEY_TYPED
events.
你可以看看这些链接:
The keyTyped() event is only used for keys that produce character input.
"Key typed" events are higher-level and generally do not depend on the platform or keyboard layout.
您不能使用keyTyped
,您需要使用keyPressed
或keyReleased
来确定是否已键入退格字符。 keyTyped
事件只拾取非转义字符(只能显示的字符)。
退格字符可以用KeyEvent.VK_BACK_SPACE
检查。
尝试将此侦听器添加到 keyPressed
事件:
import java.awt.event.KeyEvent;
private void langArea1KeyPressed(KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
// Do something...
}
}
补充阅读
您可以在 How to Write a Key Listener 上查看官方 Java 教程。
我认为可以在“KeyTyped”事件中检查 BACKSPACE。您可以将 char 的十六进制值与常量 KeyEvent.VK_BACK_SPACE.
的十六进制值进行比较示例(如果键入的键是退格键,则仅 return 为真,否则 return 为假并消耗事件):
public static boolean CheckBackspace(KeyEvent e) {
if (!((Integer.toHexString(e.getKeyChar()).equals(Integer.toHexString(KeyEvent.VK_BACK_SPACE))))) {
e.consume();
return false;
}
return true;
}