我正在用Java编写一个游戏,这是我第一个尝试“漂亮”的游戏 . 这款游戏被称为Bantumi - 它是一款棋盘游戏,现在我正在为动作编写动画 . 问题在于,当运动动画运行时,棋盘仍然会获得鼠标事件,如果用户选择了新的动作,则将丢弃正在运行的动作 .
对于董事会,我正在使用扩展JLayeredPane的类 . 这是我如何拥有我的图层:
第0层:带有种子的洞,因此用户选择一个用于移动,每个孔是带有MouseListener的JPanel .
第1层:标记当前所选孔的突出显示
第2层:运动的动画 .
第10层:我写的一个自定义通知系统类,它说的是“你的转弯”,“重复转弯”,“你赢了”等等 .
我想在动画运行时阻止任何这些图层中的每个可能的鼠标事件,我该怎么做?我认为在顶级播放器中添加一个覆盖整个区域的面板就足够了,但它没有用 . 任何解决方法?
2 回答
如果这是一个Swing GUI,你已经有了一个覆盖顶级窗口的JPanel,即glassPane,但实现这个功能的唯一方法是你必须添加一个MouseListener(或者同时添加MouseListener和MouseMotionListener),你有让它可见
您可以通过在顶级窗口或其根窗格上调用
getGlassPane()
来获取顶部窗口的glasspane,向其添加MouseListener和MouseMotionListener,然后每当您想要使GUI不响应鼠标事件时,将玻璃窗格设置为可见在它上面调用setVisble(true)
. 您可以通过调用setVisble(false)
进行相反的操作来关闭此效果 .对于(临时)禁用来自MouseListener(KeyListener ....)的事件,您可以使用
例如