如何将标签后面的按钮堆叠起来?
按钮
Button btn = new Button();
//TODO: button's main function, like onPressed, onReleased etc. here...
自定义标签
CustomLabel sp = new CustomLabel("Some texts here"));
//TODO: custom label's main function, like a translucent background etc here...
//main purpose of this is to overlay the button
主要窗格
StackPane mainPane = new StackPane();
mainPane.getChildren.addAll(btn, sp);
这样,自定义标签叠加的区域变得不可点击。
是否仍然可以使按钮仍然可以点击,例如叠加? 或者还有另一种方法吗?有点像设置标签在点击时不可见?
编辑:回答Itamar Green的问题..
通过使用此链接中显示的示例:Mouse Events get Ignored on the Underlying Layer,它似乎仍然不起作用。堆叠在图层下的按钮仍然无法点击。
sp.setPickOnBounds(false);
答案 0 :(得分:3)
您可以将在顶部绘制的元素的mouseTransparent
属性设置为true
。请注意,对于鼠标事件,忽略节点的所有后代:
@Override
public void start(Stage primaryStage) {
Button btn = new Button("Say 'Hello World'");
btn.setOnAction((ActionEvent event) -> {
System.out.println("Hello World!");
});
Region region = new Region();
region.setStyle("-fx-background-color: #0000ff88;");
region.setMouseTransparent(true);
StackPane root = new StackPane(btn, region);
Scene scene = new Scene(root, 100, 100);
primaryStage.setScene(scene);
primaryStage.show();
}
评论
region.setMouseTransparent(true);
按钮将不再以任何方式对鼠标事件作出反应......
答案 1 :(得分:0)
感谢您的帮助。我想我已经解决了我自己的问题。
我所做的只是为我的标签设置了一个可点击的活动。
Label sp = new Label("some texts here")
sp.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
//copy over the button's event.
}
});
不确定是否有更好的方法...
答案 2 :(得分:0)