java - Java Swing:如何通过 JLayeredPane 传递鼠标事件
问题描述
可以JLayeredPane
将鼠标事件从顶层传递到较低层吗?
我在 a 中有两个组件JLayeredPane
:一个JFrame
显示地图,一个JEditorPane
在其顶部显示 HTML 文本。它JEditorPane
是部分透明的,用作叠加层,在地图顶部显示文本,但在其他方面不可见。
我的问题:当鼠标移动到 的透明部分时JEditorPane
,JFrame
地图的 没有得到鼠标事件。
在 JavaFX 中,如果鼠标位于透明像素上方,则StackPane
组件必须将鼠标事件传递给下方的框架。setPickOnBounds(false)
里面有类似的东西JLayeredPane
吗?
解决方案
要将鼠标事件e
传递给组件c
,请使用
c.dispatchEvent(SwingUtilities.convertMouseEvent(e.getComponent(), e, c));
例如,要将鼠标单击事件从 传递b
到c
,请使用
b.addMouseListener(
new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
c.dispatchEvent(SwingUtilities.convertMouseEvent(b, e, c));
}
});
推荐阅读
- sql - SQL又是个混蛋
- apache - 安装 perl 模块时遇到问题 :: Make 已返回错误状态,安装似乎不可能
- docker - docker compose 找不到我的文件
- c - 如何在 C 中存储自定义对象(结构)?
- django - Django Transactions:如何在回滚期间运行额外代码?
- matlab - Surf 和 Mesh 在 Matlab 中停止工作
- python - 在 python (scipy/numpy) 中组装矩阵
- c# - 字符串长度错误 - 保存到数据库
- apache-pig - 如何在 Pig 中查询与最小值/最大值相关的数据
- angular - 构建 Angular 6 库时为导出符号生成的元数据中遇到错误