文档



JavaFX:使用JavaFX UI组件

22 工具提示

在本章中,您将学习有关工具提示的知识,工具提示是一种可以设置在鼠标悬停在任何UI控件上时显示的控件。

Tooltip类表示一个常见的UI组件,通常用于显示有关UI控件的附加信息。可以通过调用setTooltip方法在任何控件上设置工具提示。

工具提示有两种不同的状态:激活和显示。当鼠标移动到控件上时,工具提示处于激活状态。当工具提示处于显示状态时,它实际上会出现。显示的工具提示也是激活的。通常在工具提示被激活和实际显示之间会有一些延迟。

22-1显示了一个带有工具提示的密码字段。

图22-1 添加到密码字段的工具提示

带有工具提示的密码。
"图22-1 添加到密码字段的工具提示"的描述

创建提示框

学习在前面的图中显示的JavaFX应用程序中使用代码片段示例22-1创建带有提示框的密码字段。

示例22-1 向密码字段添加提示框

final PasswordField pf = new PasswordField();
final Tooltip tooltip = new Tooltip();
tooltip.setText(
    "\n您的密码必须\n" +
    "至少包含8个字符\n"  +
);
pf.setTooltip(tooltip);

javafx.scene.control包中的每个UI控件都有setTooltip方法来添加提示框。您可以在Tooltip构造函数中定义文本标题,也可以使用setText方法。

因为Tooltip类是Labeled类的扩展,所以您不仅可以添加文本标题,还可以添加图标。在示例22-2中的代码片段为密码字段的提示框添加了一个图标。

示例22-2 向提示框添加图标

Image image = new Image(
    getClass().getResourceAsStream("warn.png")
);
tooltip.setGraphic(new ImageView(image));

将此代码片段添加到应用程序中后,编译并运行代码,将显示图22-2中的提示框。

图22-2 带有图标的提示框

提示框既有文本标题又有图标
图22-2 带有图标的提示框的说明

提示框不仅可以包含附加或辅助信息,还可以呈现数据。

在工具提示中呈现应用程序数据

图22-3中的应用程序使用工具提示中呈现的信息来计算酒店住宿的总费用

图22-3 计算酒店费用

预订应用程序的示例
"图22-3 计算酒店费用"的描述

每个复选框都有一个工具提示。每个工具提示显示特定预订选项的费率。如果用户选择了复选框,则将相应的值添加到总费用中。如果取消选择已选中的复选框,则从总费用中扣除相应的值。

请查看示例22-3中显示的应用程序的源代码。

示例22-3 使用工具提示计算酒店费用

import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
 
 
public class TooltipSample extends Application {
 
    final static String[] rooms = new String[]{
        "住宿(含早餐)",
        "半餐",
        "延迟退房",
        "加床"
    };
    final static Integer[] rates = new Integer[]{
        100, 20, 10, 30
    };
    final CheckBox[] cbs = new CheckBox[rooms.length];
    final Label total = new Label("总计:$0");
    Integer sum = 0;
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group());
        stage.setTitle("工具提示示例");
        stage.setWidth(330);
        stage.setHeight(150);
 
        total.setFont(new Font("Arial", 20));
        
        for (int i = 0; i < rooms.length; i++) {
            final CheckBox cb = cbs[i] = new CheckBox(rooms[i]);
            final Integer rate = rates[i];
            final Tooltip tooltip = new Tooltip("$" + rates[i].toString());
            tooltip.setFont(new Font("Arial", 16));
            cb.setTooltip(tooltip);

        cb.selectedProperty().addListener(
                (ObservableValue<? extends Boolean> ov, Boolean old_val, 
                Boolean new_val) -> {
                    if (cb.isSelected()) {
                        sum = sum + rate;
                    } else {
                        sum = sum - rate;
                    }
                    total.setText("总计:$" + sum.toString());
                }
            );
        }
 
        VBox vbox = new VBox();
        vbox.getChildren().addAll(cbs);
        vbox.setSpacing(5);
        HBox root = new HBox();
        root.getChildren().add(vbox);
        root.getChildren().add(total);
        root.setSpacing(40);
        root.setPadding(new Insets(20, 10, 10, 20));
 
        ((Group) scene.getRoot()).getChildren().add(root);
 
        stage.setScene(scene);
        stage.show();
    }
}

示例22-4中的代码行被用于示例22-3中创建一个工具提示并为其分配一个文本标题。选项价格的Integer值被转换为String值。

示例22-4 设置工具提示的值

final Tooltip tooltip = new Tooltip("$" + rates[i].toString())

您可以通过应用CSS来改变工具提示的视觉外观。

相关API文档 

关闭窗口

目录

JavaFX:使用JavaFX UI组件

展开 折叠