JAVAFX 如何使堆叠在标签后面的按钮可点击

Posted

技术标签:

【中文标题】JAVAFX 如何使堆叠在标签后面的按钮可点击【英文标题】:JAVAFX How to make a button stacked behind a Label clickable 【发布时间】:2017-05-12 09:40:17 【问题描述】:

如何使堆叠在标签后面的按钮可点击?

按钮

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

【问题讨论】:

Mouse Events get Ignored on the Underlying Layer的可能重复 你为什么不改用btn.setGraphic(sp) btn 已经设置了特定的图形。 如果您的自定义标签是只读的(仅在视觉上显示某些内容),那么您始终可以将禁用设置为 true。这样它就不会处理任何鼠标事件。如果将 disable 设置为 true 使其看起来不同,那么您需要使用 disabled 伪类设置一些 css。 【参考方案1】:

您可以将绘制在顶部的元素的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);

并且按钮将不再以任何方式对鼠标事件做出反应......

【讨论】:

【参考方案2】:

感谢您的帮助。我想我已经解决了自己的问题。

我所做的只是为我的标签设置一个可点击事件。

Label sp = new Label("some texts here")
sp.setOnMouseClicked(new EventHandler<MouseEvent>() 
                  @Override
                  public void handle(MouseEvent e) 
                      //copy over the button's event.
                  
                );

不确定是否有更好的方法...

【讨论】:

【参考方案3】:

加上正确答案。您可以通过 fxml 使用 scenebuilder 启用或禁用“鼠标透明”属性

【讨论】:

以上是关于JAVAFX 如何使堆叠在标签后面的按钮可点击的主要内容,如果未能解决你的问题,请参考以下文章

使 NavBar 后面的按钮可点击

在 viewCell,UIViewCollection 中使按钮可点击

使用清晰的背景颜色使 UIButton 内容完全可点击

如何使按钮的可点击区域成为按钮框架

如何使 NSWindow 中的按钮在工作表上时可点击

你如何使单选按钮文本也可点击?