java – 使用重叠组件拦截或委派事件
作者:互联网
我有两个大小相等的JPanel,一个在另一个上面.顶层用作拖动选择面板,另一个用于添加其他组件.我的问题是这些添加组件的鼠标事件处理程序不会被触发,因为它们由覆盖面板处理.我怎样才能拖动这些添加组件的顶部,但仍然为底层组件启用了mouseEntered和mouseExited?
这是一个截图:
正如您所看到的,选择矩形被绘制在覆盖的JPanel上,但就好像我的鼠标无法通过此面板查看下面的内容(寻找更好的解释方法).
解决方法:
不要使用覆盖面板.我在你上一篇文章中提出了一个关于如何做到这一点的建议.
或者,如果您使用覆盖面板,则只需使用它进行绘制,让底层面板监听鼠标事件,然后在覆盖面板上调用重新绘制.
编辑:
也许更好的方法是在单个组件上使用MouseListener,然后处理矩形的绘制,您可以使用Global Event Listener来监听mousePressed,mouseDragged,mouseReleased事件.您需要检查每个事件的来源,以查看源是否是面板本身或面板上的组件.您可以使用SwingUtilities.isDescendingFrom(…)来帮助进行第二次测试.
标签:miglayout,paintcomponent,java,events,swing 来源: https://codeday.me/bug/20190726/1540450.html