如何在窗格内移动鼠标时修复actionPerformed方法冻结?

时间:2017-04-26 17:15:49

标签: java swing awt

在Swing应用程序中,当鼠标在框架内移动时,actionPerformed方法会停止循环。我该如何解决这个问题?

这是我的程序的基本布局:

ActionListener taskPerformer = new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            // main game loop
        }
}

public void paintComponent(Graphics g) {
    // render loop
}

我找到了a similar question here。用户发现通过降低鼠标的轮询率,他们解决了问题;但我不能改变我的苹果触控板上的轮询率,也没有提供其他解决方案。此外,它是一个不优雅的解决方案,需要用户更改设置,老实说,必须有一个更好的方法来解决问题。

基本上问题归结为:

  • 我有办法从我的程序中更改轮询率吗?我做了一些研究,但无法找到解决方案。
  • 如何禁用鼠标移动事件,以免减慢游戏循环速度? (也许可以将它移到一个单独的过程中,并使用该过程为游戏循环中的逻辑提供的鼠标x和y位置。)
  • 我可以实施哪些替代解决方案来解决此问题?

1 个答案:

答案 0 :(得分:0)

我认为您需要实现“ActionListener”,您可以在其中使用它,因为当您移动时将使用ActionListener,当您单击时,它将是ActionEvent。 您还可以从以下方面获得更多: https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.htmlHow can I get the location of the mouse pointer in a JPanel (Without any operation of the Mouse)?