【问题标题】:JavaFX: How to implement a Custom TooltipJavaFX:如何实现自定义工具提示
【发布时间】:2018-01-09 17:46:10
【问题描述】:

我正在尝试创建自己的 Tooltip 类。基本上,工具提示将是 标签,底部带有指针图形(FontAwesomeView),全部包裹在vbox内。

我遇到的问题是,如何在屏幕上显示我的自定义工具提示而不将其添加到父节点?

【问题讨论】:

  • 您必须将其添加到父节点才能使其完全显示在您的场景中。但是,该父节点可以是完全透明的。例如,您可以将当前场景的根放在 StackPane 的一层,然后将 VBox 添加到上面的层,根据鼠标的位置定位它。
  • @MMAdams 我的问题是,我必须将自定义工具提示添加到每个具有使用工具提示的控件的 fxml/nested-fxml 中。
  • 如果你只有一个带有图形的标签,为什么不直接使用 JavaFX 工具提示呢?您可以设置文本和图形,甚至可以使用 CSS 设置样式。
  • 我明白了。也许尝试让您的自定义工具提示类扩展 PopupControl (docs.oracle.com/javase/8/javafx/api/javafx/scene/control/…),这就是内置工具提示和 ContextMenus 的工作方式。 PopupControl 是一种未装饰的窗口,因此您可以在不将其添加到当前场景的情况下显示它。
  • 我不确定弹出窗口(工具提示)的根目录是什么。现在没时间测试,但尝试使用 CSS 设置工具提示的样式并指定形状。

标签: java javafx javafx-8 javafx-2


【解决方案1】:

你不需要实现自己的工具提示,你可以自定义内置的。

默认工具提示:

自定义工具提示:

它也适用于在没有 setTooltip 方法的节点(如形状)上安装工具提示:

自定义工具提示的示例代码:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.PopupWindow;
import javafx.stage.Stage;

public class BubbleTip extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    private static final String SQUARE_BUBBLE =
            "M24 1h-24v16.981h4v5.019l7-5.019h13z";

    @Override
    public void start(Stage stage) {
        Label label = new Label("hello,");
        label.setStyle("-fx-font-size: 16px;");

        label.setTooltip(makeBubble(new Tooltip(" world")));

        Circle circle = new Circle(20, Color.AQUA);
        Tooltip.install(circle, makeBubble(new Tooltip("circle")));

        VBox layout = new VBox(10, label, circle);
        layout.setPadding(new Insets(20));

        stage.setScene(new Scene(layout));
        stage.show();
    }

    private Tooltip makeBubble(Tooltip tooltip) {
        tooltip.setStyle("-fx-font-size: 16px; -fx-shape: \"" + SQUARE_BUBBLE + "\";");
        tooltip.setAnchorLocation(PopupWindow.AnchorLocation.WINDOW_BOTTOM_LEFT);

        return tooltip;
    }
}

此答案基于以下问题的答案:

【讨论】:

  • 昨天我整晚都在玩 CSS,试图让它工作。谢谢!
  • 我希望有办法将指针与气泡分开。由于现在文本没有正确垂直居中,所以我必须使用边距才能使其正确,如果气泡文本对于所有弹出窗口只有一行,这将起作用,但情况并非如此。
猜你喜欢
  • 2013-06-23
  • 2016-02-27
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多