所以我有一个基本的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 Thing B确实发生但Backspace键也会像往常一样从文本框中删除单个字符。
当按住SHIFT时,有没有办法阻止Backspace从文本框中删除字符?
答案 0 :(得分:3)
虽然解决方案有效,但你采取了错误的方法(恕我直言)。
您应该利用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
答案 1 :(得分:2)