【问题标题】:How can I fix the actionPerformed method freezing when the mouse is moved within the pane?当鼠标在窗格内移动时,如何修复 actionPerformed 方法冻结?
【发布时间】:2017-09-24 05:42:28
【问题描述】:

在 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 位置作为游戏循环中的逻辑。)
  • 我可以实施哪些替代解决方案来解决此问题?

【问题讨论】:

标签: java swing awt


【解决方案1】:

我认为你需要在你可以接受的地方实现“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)?

【讨论】:

  • 我已经尝试过那个实现,这不是关于如何获取鼠标位置的问题,我是在问如何避免延迟问题。我发现的一个解决方案表明降低鼠标轮询率可以解决问题,但由于这是一个不雅的解决方案,不一定可行(即在 mac 上),我想寻求另一种解决方案。我看过了,我发现没有办法用 java 改变鼠标或触控板上的轮询率。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 2015-04-23
  • 1970-01-01
相关资源
最近更新 更多