JAVAFX如何使按钮堆叠在Label后面

时间:2016-12-28 06:16:25

标签: java button javafx stack label

如何将标签后面的按钮堆叠起来?

按钮

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);

3 个答案:

答案 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)

以及正确答案。您可以使用SceneBuilder mouse transparency in scenebuilder

通过fxml启用或禁用“鼠标透明”属性