所以我有一个基本的 swing 应用程序,它包含一个 JTextfield
,我向其中添加以下 KeyListener
:
public class PromptKeyListener implements KeyListener {
private boolean SHIFT_PRESSED;
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
//Do Thing A
} else if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
this.SHIFT_PRESSED = true;
}
if (SHIFT_PRESSED
&& e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
//Do Thing B
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
this.SHIFT_PRESSED = false;
}
System.out.println(SHIFT_PRESSED);
}
@Override
public void keyTyped(KeyEvent e) {
}
}
问题是,当我按住 SHIFT 和 Backspace 时,确实会发生事情 B,但 Backspace 键也会像平常一样从文本框中删除单个字符。
是否有办法防止按住 SHIFT 时退格键从文本框中删除字符?
最佳答案
虽然该解决方案有效,但您采取了错误的方法(恕我直言)。
您应该利用KeyBindings API
InputMap im = field.getInputMap(JComponent.WHEN_FOCUSED);
ActionMap am = field.getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.SHIFT_DOWN_MASK), "DoThingB");
am.put("DoThingB", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Do Think B");
}
});
此外,您不应该使用 KeyListener
来捕获 enter
键,您应该使用 ActionListener
关于java - 如何在 JTextfield 内正确实现 SHIFT + BACKSPACE 按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12044328/