简化问题:
使位于另一个节点“B”之上的一个节点“A”对 MouseEvents 是半透明的,因此事件将到达底层节点“B”。两个节点大小相同,但节点“A”有一个半透明的背景图像,因此节点“B”的一半是可见的。
真正的问题:
我有一个标签菜单。每个选项卡都可以拖动展开相应的菜单层。因此,每个选项卡层都是一个具有部分透明背景(基本上是多边形)的窗格,其中透明部分对 MouseEvents 也应该是透明的。
插图(我还不能发布,请参见链接:选项卡插图,深绿色线是绿色窗格的边框)显示了基本原理:想象一下只有选项卡是可见的,并且可以将图层本身拉到查看其内容的权利。
所以问题是,如何在不使整个节点透明的情况下使节点的一个区域对 MouseEvents 透明?
感谢您的帮助!
更新:
为了澄清这个简单的问题,这里是相应的代码:
//Create parent group
Group root = new Group();
//Create linear gradient, so one side is transparent
Stop[] stops = new Stop[] { new Stop(0, Color.rgb(0, 255, 0, 0.0)), new Stop(1, Color.rgb(0, 255, 0, 1.0))};
LinearGradient lg1 = new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stops);
//Create the rectangles
Rectangle A = new Rectangle(100, 50, lg1);
Rectangle B = new Rectangle(100,50, Color.RED);
//Add eventHandlers
A.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
System.out.println("Clicked A");
}
});
B.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
System.out.println("Clicked B");
}
});
root.getChildren().addAll(B, A);
//Add to Scene..
希望这可以帮助。