如何删除焦点转移到不可编辑的 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 时播放的声音的主要内容,如果未能解决你的问题,请参考以下文章