如何删除焦点转移到不可编辑的JTextComponent时播放的声音

时间:2014-10-06 19:28:59

标签: java jtextfield jtextpane toolkit

当我将焦点放在不可编辑的JTextField或JTextPane上时,如何消除声音?

每当我将焦点转移到不可编辑的JTextPane并按Enter键时,会播放一个等于" beep" Toolkit类:

Toolkit.getDefaultToolkit.beet();

如何让它播放声音?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用此question引用的想法:

这个想法是为文本字段发出哔声动作并禁用它。

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

如果这不起作用,您可以尝试添加KeyListener,这将消耗导致蜂鸣声的KeyEvent

JTextField textField = new JTextField();
textField.addKeyListener(new KeyAdapter() {
  @Override
  public void keyTyped(KeyEvent e) {
    if(e.getKeyCode() == KeyEvent.VK_ENTER){
      // will consume the event and stop it from processing normally
      e.consume();
    }        
  }
});

答案 1 :(得分:1)

您可以覆盖beep类中的Toolkit方法:

public class MuteToolkit extends Toolkit {
    public void beep() {
        //do nothing
    }
    // [...] other methods
}

然后,将此类设置为默认工具包:

System.setProperty("awt.toolkit", "package.MuteToolkit");

但可能不是最佳选择,因为它会禁用所有哔哔声。