Java获取焦点

标签 java swing jpanel keylistener

所以我正在用 Java 开发一个类似钢琴的程序。我使用如下所示的方法来触发每个键的正确声音

public void Sound(String file){

    try{
        AudioInputStream ais = AudioSystem.getAudioInputStream(getClass().getResource(file));
        Clip clip = AudioSystem.getClip();
        clip.open(AudioSystem.getAudioInputStream(getClass().getResource(file)));
        clip.start();
    }catch(Exception e){
        e.printStackTrace();
    }

    game.setFocusable(true);//my desperate try to regain focus on click...
    game.requestFocus();

}

然而,在一段时间后,KeyListener 完全失去焦点KeyEvent 将不再被触发。如果有人知道我如何获得对框架中的 KeyListener 的关注,我很可能会听到您所说的内容。

我尝试过的:

  1. 触发后将面板再次设置为可聚焦

  2. 确保程序仍然在后台运行,并且确实是面板失去焦点。

  3. 其他小调整

最佳答案

之前已经多次询问过这个问题,在这种情况下,最好的解决方案是不使用 KeyListener。而是使用 Key Bindings (点击链接),它在组件焦点方面表现得更好。

侧面建议:请确保在 Swing 事件线程关闭时播放音乐,以免占用此线程并卡住 GUI,并且所有 Swing 调用都开启 Swing 事件线程。

关于Java获取焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42888142/

相关文章:

java - 使用 Java 在 REST Web 服务中启用恢复中断下载

java - 如何识别什么类型的自定义数组列表包含一个对象?

java - JPanel 中的 JTabbedPane?

Java:在同一个 JPanel 上添加 2 个动画对象(paintComponent)

java - 如何每帧多次重绘 JFrame 及其组件?

java - 按预定时间更改对象颜色

java - 如何进行 Java (Android) 字符串替换?

java - 解析 HTML 时如何在 Java 中跟踪 ChangedCharSetException?

java - 将 System.in 重定向到 swing 组件

java - 从单独类中的监听器禁用 JButton