java 在空JTextField中按Backspace时禁用蜂鸣音

bq3bfh9z  于 2023-02-20  发布在  Java
关注(0)|答案(4)|浏览(128)

初学者。有人知道一种快速简单的方法,可以使JTextField在按下退格键且字段为空时不发出蜂鸣声吗?我在网上看到过一些关于更改DefaultEditorKit的事情,但我无法理解。如果能提供任何帮助,我将不胜感激。

6psbrbz9

6psbrbz91#

这个代码对我很有效。

Action beep = textArea.getActionMap().get(DefaultEditorKit.deletePrevCharAction);
beep.setEnabled(false);
wn9m85ua

wn9m85ua2#

我还没有机会尝试这个,但你也许可以禁用哔声动作。

JTextField field = new JTextField();
Action action;
a = field.getActionMap().get(DefaultEditorKit.beepAction);
a.setEnabled(false);
mrwjdhj3

mrwjdhj33#

**编辑:**我稍后会放另一个答案,可能更容易做到。我会先读那个。

您可以尝试重写JTextField的processKeyEvent方法,并检查1.)按下的键是否为退格键,以及2.)JTextField是否为空。如果这两个键中有一个为false,则它的行为应正常。否则,您可以直接从该方法返回。

eh57zj3b

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);
        
    }
    
}

相关问题