javafx 8 重叠层事件处理
javafx 8 overlapping layers eventhandling
我的程序有两层,每一层都有不同的元素。这两层是重叠的,但层中的元素不是。我想在鼠标悬停在每一层的节点上时显示工具提示,但现在顶层只获得事件。
下面附上一个最小的例子:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
StackPane root = new StackPane();
Pane p1 = new Pane();
Pane p2 = new Pane();
Arc arc = new Arc(150,150,100,100,0,360);
arc.setType(ArcType.CHORD);
arc.setFill(null);
arc.setStroke(Color.BLUE);
arc.setStrokeWidth(20);
Rectangle rectangle = new Rectangle(100,100);
rectangle.setX(100);
rectangle.setY(100);
Tooltip.install(arc, new Tooltip("Semiring"));
Tooltip .install(rectangle,new Tooltip("Rectangle"));
p1.getChildren().add(arc);
p2.getChildren().add(rectangle);
root.getChildren().addAll(p2,p1);
primaryStage.setScene(new Scene(root, 300, 300));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
使用
p1.setPickOnBounds(false);
这实际上意味着如果鼠标位于 p1
中的非透明像素上,则鼠标事件仅传递给 p1
。因此,当鼠标不在圆弧上时,根据需要将鼠标处理委托给 p2
。
我的程序有两层,每一层都有不同的元素。这两层是重叠的,但层中的元素不是。我想在鼠标悬停在每一层的节点上时显示工具提示,但现在顶层只获得事件。
下面附上一个最小的例子:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
StackPane root = new StackPane();
Pane p1 = new Pane();
Pane p2 = new Pane();
Arc arc = new Arc(150,150,100,100,0,360);
arc.setType(ArcType.CHORD);
arc.setFill(null);
arc.setStroke(Color.BLUE);
arc.setStrokeWidth(20);
Rectangle rectangle = new Rectangle(100,100);
rectangle.setX(100);
rectangle.setY(100);
Tooltip.install(arc, new Tooltip("Semiring"));
Tooltip .install(rectangle,new Tooltip("Rectangle"));
p1.getChildren().add(arc);
p2.getChildren().add(rectangle);
root.getChildren().addAll(p2,p1);
primaryStage.setScene(new Scene(root, 300, 300));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
使用
p1.setPickOnBounds(false);
这实际上意味着如果鼠标位于 p1
中的非透明像素上,则鼠标事件仅传递给 p1
。因此,当鼠标不在圆弧上时,根据需要将鼠标处理委托给 p2
。