(翻译)第二十四回 JavaFX2.0 提示条ToolTip

简介: 原文地址http://download.oracle.com/javafx/2.0/ui_controls/tooltip.htm#BABBIJBJ     Tooltip类产生一个常见的UI控件,一般用来为UI控件添加信息。

原文地址http://download.oracle.com/javafx/2.0/ui_controls/tooltip.htm#BABBIJBJ

 

 

Tooltip类产生一个常见的UI控件,一般用来为UI控件添加信息。把鼠标放在控件上提示条就显示出来。任何控件使用 setTooltip方法都能添加提示条。

提示条有2个状态:激活的和显示的。当鼠标放置在控件上时提示条激活,当它显示出来就是“显示的”状态,显示的提示条也是激活的。在提示条激活和显示之间有一些延迟。

带有提示条的密码框见Figure 18-1 .

Figure 18-1 Tooltip Added to a Password Field

A password with a tooltip.
Description of "Figure 18-1 Tooltip Added to a Password Field"

创建Tooltip

研究 Example 18-1 中的代码,它创建的是上面的应用。

 

Example 18-1 Adding a Tooltip to the Password Field

final PasswordField pf = new PasswordField();
final Tooltip tooltip = new Tooltip();
tooltip.setText(
    "\nYour password must be\n" +
    "at least 8 characters in length\n"  +
);
pf.setTooltip(tooltip);

 

javafx.scene.control包中的每个控件都具有添加提示条的 setTooltip 方法。可以定义文本,使用Tooltip的构造方法或 setText 方法 。

由于 Tooltip 类继承了Labeled 类,所以不仅可以添加文本,也可以添加图形。 Example 18-2 中的代码块为密码框的提示条添加了图标。

 

Example 18-2 Adding an Icon to a Tooltip

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

 

运行效果见 Figure 18-2

Figure 18-2 Tooltip with an Icon

The tooltip has both a text caption and an icon
Description of "Figure 18-2 Tooltip with an Icon"

提示条不仅能提供辅助信息,也能呈现数据。

在提示条中呈现数据

 Figure 18-3 中的应用使用显示在提示条中的信息来计算酒店住宿的总费用。

 

Figure 18-3 Calculating Hotel Rates

A sample of the booking application
Description of "Figure 18-3 Calculating Hotel Rates"

 

Each checkbox is accompanied by a tooltip.每个复选框有一个提示条,每个提示条显示一个特定预定项目的费用。如果用户选择了复选框,相应的值就加到总数中。当然取消选中后也会从总数中减去。

看下该应用的代码Example 18-3 .

Example 18-3 Using Tooltips to Calculate Hotel Rates

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
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 Main extends Application {
 
    final static String[] rooms = new String[]{
        "Accommodation (BB)",
        "Half Board",
        "Late Check-out",
        "Extra Bed"
    };
    final static Integer[] rates = new Integer[]{
        100, 20, 10, 30
    };
    final CheckBox[] cbs = new CheckBox[rooms.length];
    final Label total = new Label("Total: $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("Tooltip Sample");
        stage.setWidth(300);
        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(new ChangeListener<Boolean>() {
                public void changed(ObservableValue<? extends Boolean> ov,
                    Boolean old_val, Boolean new_val) {
                    if (cb.isSelected()) {
                        sum = sum + rate;
                    } else {
                        sum = sum - rate;
                    }
                    total.setText("Total: $" + 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();
    }
}

 Example 18-4 中的代码加入到 Example 18-3 中来创建一个提示条并分配了一个文本。项目价格的Integer 值被转化成了String 值。

Example 18-4 Setting the Value for a Tooltip

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

可以通过使用CSS来改变其外观。

目录
相关文章
|
11月前
|
Java 开发者
Java中的异常处理:从基础到高级
在Java编程的世界里,异常处理是一块基石,它确保了程序的健壮性和稳定性。本文将带你从异常的基础概念出发,逐步深入到高级处理技巧,通过实例展示如何在Java中有效管理和处理异常。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
11月前
|
NoSQL Redis
单线程传奇Redis,为何引入多线程?
Redis 4.0 引入多线程支持,主要用于后台对象删除、处理阻塞命令和网络 I/O 等操作,以提高并发性和性能。尽管如此,Redis 仍保留单线程执行模型处理客户端请求,确保高效性和简单性。多线程仅用于优化后台任务,如异步删除过期对象和分担读写操作,从而提升整体性能。
208 1
|
11月前
|
监控 负载均衡 安全
什么是DDoS攻击及如何防护DDOS攻击
通过上述防护措施,企业和组织可以构建全面的DDoS防护体系,有效抵御各类DDoS攻击,确保网络和服务的稳定运行。
8245 10
Dreamweaver是怎么把图片转换成代码 简单五步骤即可解决
Dreamweaver是怎么把图片转换成代码的呢?其实利用Dreamweaver是可以将图片装换成代码的
643 5
CORS 跨域资源共享的实现原理是什么?
CORS 跨域资源共享的实现原理是什么?
|
存储 JSON 关系型数据库
mysql中find_in_set()函数用法详解及增强函数
总结而言,`FIND_IN_SET()`是MySQL中处理由逗号分隔的字符串列表的一种便捷方法,尤其适用于列表相对较短且不经常更改的场景。然而,对于更为复杂的需要高性能和可扩展性的数据库设计,它可能不是最优选择,应考虑使用更加正规化的数据库结构。
1943 2
mysql中find_in_set()函数用法详解及增强函数
|
监控 NoSQL 算法
深入剖析Redis哨兵模式的原理和应用
Redis的哨兵模式是实现高可用性和自动故障转移的机制,当主服务器故障时,哨兵能自动检测并进行故障转移,确保服务连续和稳定性。哨兵模式通过监控主从服务器状态、自动故障转移、防止数据不一致,提高容错能力和负载均衡,降低运维成本,实现高可用性。哨兵通过检测主观下线和客观下线状态,以及选举Leader Sentinel来协调故障转移。Raft算法在其中用于领导者选举和状态一致性。哨兵模式通过综合考虑多种因素选举新主服务器并执行故障转移,保障集群稳定运行。
1453 0
深入剖析Redis哨兵模式的原理和应用
|
SQL 开发框架 安全
SQL 日期处理和视图创建:常见数据类型、示例查询和防范 SQL 注入方法
在数据库操作中,处理日期是一个关键的方面。确保插入的日期格式与数据库中日期列的格式匹配至关重要。以下是一些常见的SQL日期数据类型和处理方法。
396 8
|
Dart 前端开发 开发工具
【Flutter前端技术开发专栏】探索Flutter的世界
【4月更文挑战第30天】Flutter是谷歌的UI框架,用于构建高性能、跨平台的iOS和Android应用。它使用Dart语言,提供丰富的预置组件,支持热重载,确保跨平台一致性。Flutter的亮点包括高性能渲染、丰富的组件库、国际化的支持。开发者可通过安装SDK和IDE插件开始开发,熟悉Widget、StatefulWidget、StatelessWidget等核心概念。其潜力和前景在移动应用开发领域备受关注,丰富的生态系统包含第三方库和工具,如网络请求和状态管理。学习Flutter对前端开发者极具价值。
231 0
【Flutter前端技术开发专栏】探索Flutter的世界
|
分布式计算 Hadoop
【细节拉满】Hadoop课程设计项目,使用idea编写基于MapReduce的学生成绩分析系统(附带源码、项目文件下载地址)(二)
【细节拉满】Hadoop课程设计项目,使用idea编写基于MapReduce的学生成绩分析系统(附带源码、项目文件下载地址)(二)
794 0