【问题标题】:Show Tooltip on disabled Control in JavaFX在 JavaFX 中显示禁用控件的工具提示
【发布时间】:2014-07-31 05:45:33
【问题描述】:

是否可以在禁用的控件上显示工具提示?

我有以下代码,但这不起作用:

txt_searchText.setDisable(true);
txt.searchText.setTooltip(new Tooltip("Message"));

有没有人解决这个问题?

谢谢

【问题讨论】:

  • 没有解决方案,只是一个观察:看起来 mouseEvents 没有传递给禁用的控件(可能也没有节点)
  • 仅供参考,问了我自己关于(我认为是)行为stackoverflow.com/q/24182802/203657的根本原因的问题

标签: java javafx javafx-8


【解决方案1】:

另一种解决方案是过滤父项上的鼠标事件并在禁用项上显示工具提示。一个典型的例子是工具栏:

toolBar.addEventFilter(MouseEvent.MOUSE_MOVED, e -> {
    
    var node = toolBar.getItems().stream()
            .filter(Node::isDisabled)
            .filter(n -> n.contains(n.parentToLocal(e.getX(), e.getY()))).findFirst();
    
    if (node.isPresent() && node.get() instanceof Control control) {
        toolBar.setTooltip(control.getTooltip());
    } else {
        toolBar.setTooltip(null);
    }
});

【讨论】:

    【解决方案2】:

    不是直接的,但您可以将您的按钮变形到另一个控件中,虽然您的按钮可以禁用或不禁用,但该控件将响应鼠标移动。

    Button button = new Button("Click me");     //create a button
    button.setDisable(true);        //disable button in some way
    SplitPane splitPane = new SplitPane(button);   //warp it into a splitPane
    splitPane.setTooltip(new Tooltip("I'm the Tooltip Massage")); //Crete a tooltip
    

    SplitPane 扩展的节点 "Controls" 不是 Region 也不是窗格。

    所以它是一个控件,最适合我们的情况(变形按钮)。

    您必须始终使用一个控件来扭曲另一个控件。其他方式你将无法访问 setTooltip() 方法。

    【讨论】:

      【解决方案3】:

      这是使用CustomMenuItem 类的解决方法:

          customMenuItem.getContent().setOnMouseEntered(e -> {
              if (customMenuItem.isDisable()) {
                  Tooltip.install(customMenuItem.getContent(), tooltip);
              } else {
                  Tooltip.uninstall(customMenuItem.getContent(), tooltip);
              }
          });
      

      【讨论】:

        【解决方案4】:

        答案是否定的。目前您无法在禁用节点上显示工具提示,原因很简单,禁用节点不会收到任何 MouseEvents。

        您可以在此处查看官方问题跟踪器中提出的问题(需要登录):https://javafx-jira.kenai.com/browse/RT-28850

        您的问题的一个解决方案可能是将您的 Control 包装到其他东西中。

        例如,将您的控件放入另一个控件中,例如 SplitPane 或 Label。然后您可以将您的工具提示应用到该包装器并禁用您的第一个控件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多