javafx - 如何向未使用 FXML 实现 Control 的节点添加工具提示?

标签 javafx tooltip fxml

Control 的 JavaFX 子类中有一个工具提示属性,这意味着可以声明性地添加 Tooltip因此使用 FXML:

<CheckBox fx:id="someCheckBox" mnemonicParsing="false" text="Do It?">
    <tooltip>
        <Tooltip text="Whether or not to do it."/>
    </tooltip>
</CheckBox>

这是可能的,因为 CheckBox是 Control 的子类。

但是,我希望能够使用 FXML 向任何场景图节点添加工具提示(即无需使用 Java 以编程方式添加工具提示)。

最佳答案

有一个archived discussion在 Oracle 社区论坛上建议包装 Node内部 ScrollPane并在 ScrollPane 上设置工具提示。这不太理想,因为它向场景图中添加了一个不必要的节点,但更重要的是,它在所有场景中都无法正常工作。考虑尝试向 TitledPane 的图形添加工具提示:

<TitledPane text="My TitledPane" fx:id="someTitledPane" expanded="true" contentDisplay="RIGHT">
    <graphic>
        <ScrollPane fitToWidth="true" fitToHeight="true" style="-fx-background-color: rgba(255, 255, 255, 0);">
            <ImageView fitWidth="24.0" fitHeight="24.0" preserveRatio="true" pickOnBounds="true">
            <image>
                <Image url="/images/questionMark.jpg" />
            </image>
            </ImageView>
        <tooltip>
            <Tooltip text="My tooltip."/>
        </tooltip>
        </ScrollPane>
    </graphic>
    <Label text="Hello!"/>
</TitledPane>

尽管 ScrollPane 具有透明背景,但在问号图形后面仍然有一个可见的白框:

ScrollPane leaves white background - not ideal!

有一种方法可以解决这个问题,那就是利用 <fx:script> 的力量。 :
<?language javascript?>

<TitledPane text="My TitledPane" fx:id="someTitledPane" expanded="true" contentDisplay="RIGHT">
    <graphic>
        <ImageView fx:id="questionMarkImageView" fitWidth="24.0" fitHeight="24.0" preserveRatio="true" pickOnBounds="true">
        <image>
            <Image url="/images/questionMark.jpg" />
        </image>
        </ImageView>
        <fx:script>
            var tooltip = new javafx.scene.control.Tooltip('My tooltip');
            javafx.scene.control.Tooltip.install(questionMarkImageView, tooltip);
        </fx:script>
    </graphic>
    <Label text="Hello!"/>
</TitledPane>

请注意 fx:id的 ImageView 是在脚本内部引用的(我没有在任何地方看到此功能的文档,只能通过实验找到它 - 这实际上促使我发布此问答,希望其他人会发现它有用)。结果如下:

No white background and one less node in scene-graph - ideal!

关于javafx - 如何向未使用 FXML 实现 Control 的节点添加工具提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36950542/

相关文章:

java - JavaFX是否支持像Piccolo2D这样的嵌套对象的层次转换

javascript - 工具提示 Javascript 旋转不起作用

javascript - jquery 工具提示显示 div 的内容

javascript - 检测窗口宽度并更改 jQuery UI 工具提示位置

java - 应用程序启动方法中出现异常 java.lang.reflect.InitationTargetException JavaFX 图像转换

css - 悬停时Imageview图像发生变化,Javafx

Java - Spring Autowired 分配 null

JavaFX - 在 Controller 类之间传递 int 值会产生不正确的结果

javafx - 如何确定JavaFX应用程序所需的FXML文件,CSS文件,图像和其他资源的正确路径?

JavaFx CheckBoxTreeItem<Path> 选择根项错误