初学者。有人知道一种快速简单的方法,可以使JTextField在按下退格键且字段为空时不发出蜂鸣声吗?我在网上看到过一些关于更改DefaultEditorKit的事情,但我无法理解。如果能提供任何帮助,我将不胜感激。
6psbrbz91#
这个代码对我很有效。
Action beep = textArea.getActionMap().get(DefaultEditorKit.deletePrevCharAction); beep.setEnabled(false);
wn9m85ua2#
我还没有机会尝试这个,但你也许可以禁用哔声动作。
JTextField field = new JTextField(); Action action; a = field.getActionMap().get(DefaultEditorKit.beepAction); a.setEnabled(false);
mrwjdhj33#
**编辑:**我稍后会放另一个答案,可能更容易做到。我会先读那个。
您可以尝试重写JTextField的processKeyEvent方法,并检查1.)按下的键是否为退格键,以及2.)JTextField是否为空。如果这两个键中有一个为false,则它的行为应正常。否则,您可以直接从该方法返回。
eh57zj3b4#
这将消除蜂鸣声:
JTextField textField = new JTextField(); Action deleteAction = textField.getActionMap().get(DefaultEditorKit.deletePrevCharAction); textField.getActionMap().put( DefaultEditorKit.deletePrevCharAction, new DeleteActionWrapper(textField, deleteAction) );
public class DeleteActionWrapper extends AbstractAction{ private JTextField textField; private Action action; public DeleteActionWrapper(JTextField textField, Action action){ this.textField = textField; this.action = action; } @Override public void actionPerformed(ActionEvent e){ if(textField.getCaretPosition() > 0) action.actionPerformed(e); } }
4条答案
按热度按时间6psbrbz91#
这个代码对我很有效。
wn9m85ua2#
我还没有机会尝试这个,但你也许可以禁用哔声动作。
mrwjdhj33#
**编辑:**我稍后会放另一个答案,可能更容易做到。我会先读那个。
您可以尝试重写JTextField的processKeyEvent方法,并检查1.)按下的键是否为退格键,以及2.)JTextField是否为空。如果这两个键中有一个为false,则它的行为应正常。否则,您可以直接从该方法返回。
eh57zj3b4#
这将消除蜂鸣声: