如何在窗口上临时防止鼠标监听器?

Dan*_*vas 2 java swing mouselistener

我正在用Java编写一个游戏,这是我第一个尝试"漂亮"的游戏.这款游戏被称为Bantumi - 它是一款棋盘游戏,现在我正在为动作编写动画.问题在于,当运动动画运行时,棋盘仍然会获得鼠标事件,如果用户选择了新的动作,则将丢弃正在运行的动作.

对于董事会,我正在使用扩展JLayeredPane的类.这是我如何拥有我的图层:

第0层:带有种子的洞,因此用户选择一个用于移动,每个孔是带有MouseListener的JPanel.

第1层:标记当前所选孔的突出显示

第2层:运动的动画.

第10层:我写的一个自定义通知系统类,它说的是"你的转弯","重复转弯","你赢了"等等.

我想在动画运行时阻止任何这些图层中的每个可能的鼠标事件,我该怎么做?我认为在顶级播放器中添加一个覆盖整个区域的面板就足够了,但它没有用.任何解决方法?

mKo*_*bel 5

对于(临时)禁用来自MouseListener(KeyListener ....)的事件,您可以使用

public void consume()
Consumes this event so that it will not be processed in the 
default manner by the source which originated it.
Run Code Online (Sandbox Code Playgroud)

例如

whatever.addMouseListener(new MouseListener() {

    public void mouseClicked(MouseEvent e) {
         if (somethingIsTrue) {
            //do some stuff from mouse listener         
         } else {
            e.consume();
         }
     } 
     .
     .
     .
}
Run Code Online (Sandbox Code Playgroud)