22 工具提示
在本章中,您将学习有关工具提示的知识,工具提示是一种可以设置在鼠标悬停在任何UI控件上时显示的控件。
Tooltip
类表示一个常见的UI组件,通常用于显示有关UI控件的附加信息。可以通过调用setTooltip
方法在任何控件上设置工具提示。
工具提示有两种不同的状态:激活和显示。当鼠标移动到控件上时,工具提示处于激活状态。当工具提示处于显示状态时,它实际上会出现。显示的工具提示也是激活的。通常在工具提示被激活和实际显示之间会有一些延迟。
图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-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
值。
您可以通过应用CSS来改变工具提示的视觉外观。
相关API文档