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

Posted

技术标签:

【中文标题】如何删除焦点转移到不可编辑的 JTextComponent 时播放的声音【英文标题】:How to remove the sound played when focus is transferred to an uneditable JTextComponent 【发布时间】:2014-10-06 19:28:58 【问题描述】:

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

每当我将焦点转移到不可编辑的 JTextPane 并按 Enter 键时,就会播放相当于 Toolkit 类的“哔”声的声音:

Toolkit.getDefaultToolkit.beet();

如何让它没有声音播放?

【问题讨论】:

请添加一些演示问题的简短代码示例。 【参考方案1】:

您也许可以从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();
            
  
);

【讨论】:

它不起作用这是我在我的代码中输入的内容:Action action; action = getActionMap().get(DefaultEditorKit.beepAction); action.setEnabled(false); 感谢您的更新,我添加了另一个建议,您可以尝试停止蜂鸣声。 谢谢!很高兴我能帮上忙。【参考方案2】:

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

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

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

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

但考虑到它会禁用所有哔声,这可能不是最佳选择。

【讨论】:

如果我这样做......我必须实现所有方法并且每个方法都会抛出新的 UnsupportedOperationException,所以在这个方法中“public Image createImage(ImageProducer producer)”我不能离开空白 你也可以扩展Toolkit的基本实现,同样是getDefaultToolkit方法返回的。 我不能因为这些方法受到保护... protected abstract DesktopPeer createDesktopPeer(Desktop target) throws HeadlessException;所以 DefaultToolkit 没有这些

以上是关于如何删除焦点转移到不可编辑的 JTextComponent 时播放的声音的主要内容,如果未能解决你的问题,请参考以下文章

如何让 div 可编辑

在将焦点转移到某个元素之前,如何等待公告完成?

如何在颤动中将焦点转移到下一个文本字段?

如何在颤动中将焦点转移到另一个文本表单字段

iCarousel - 如何将焦点转移到左侧

关于 iOS 辅助功能。如何将焦点转移到pickerView