stop mouse当鼠标退出元素JFrame时进入执行



我的应用程序在进入不同按钮的区域时会播放不同的声音。当鼠标离开按钮区域时,我希望所有声音都停止。我在mouseEntered方法中启动声音,在mouseExited方法中停止声音:

@Override
public void mouseEntered(MouseEvent mouse) { 
allForms.playSounds(mouse);
}
@Override
public void mouseExited(MouseEvent mouse) {
allForms.stopSounds(mouse);
}

问题是CCD_ 3方法不会在中间停止其执行以开始执行CCD_。

有办法解决这个问题吗?

您似乎在Swing事件线程上调用了一段长时间运行的代码,从而占用了线程。一个解决方案是在后台线程中调用playSounds,这将释放Swing线程,以便它响应您,并有望允许您调用stopSounds。SwingWorker可以帮助您创建后台线程,并允许其代码以线程安全的方式与swing交互。

顺便说一句,触发代码的另一种方法是监听JButton的ButtonModel中的滚动事件。


编辑
您在评论中声明:

是否可以在不扩展类的情况下使用SwingWorker?我的类已经扩展了JFrame。

  • 你的SwingWorker可以在它自己的类中,如果它足够小,也可以是一个匿名的内部类。如果是单独的,它将是"控制"代码的一部分,假设您已经将代码分解为M-V-C模式(或模型视图控制)
  • 值得一提的是,我很少创建扩展顶级窗口(如JFrame)的GUI代码,避免这种情况使我免于遇到问题和沮丧

最新更新