4.2 JToolTip类
Swing组件支持当光标停留在其上时显示简短的弹出信息的功能。用来显示弹出信息的类就是JToolTip。
4.2.1 创建JToolTip
调用JComponent的public void setToolTipText(String text)方法可以使得当鼠标停留在一个安装了弹出信息的组件上时自动创建JToolTip实例。我们通常并不直接调用JToolTip构造函数。只有一个构造器,而他是无参数的变体。
工具提示的文本通常只是一行的长度。然而,如果文本字符串以开头(在许多情况下如此),那么文本的内容可以任意的HTML 3.2格式化文本。例如,下面的代码使得弹出信息如图4-3所示:
component.setToolTipText("Tooltip
Message");
4.2.2 创建自定义的JToolTip对象
正如在本章稍后的“自定义JToolTip观感”一节中所讨论的,我们可以通过为JToolTip设置UIResource元素很容易的自定义所有的弹出信息的显示特点。
JComponent类定义了一种简单的方法可以使得我们自定义当光标停留在某一个特定的组件上时工具提示的显示特点。我们只需要简单的继承我们要自定义的组件类并重写继承的public JToolTip createToolTip()方法。当ToolTipManager决定需要显示弹出信息的时候会调用createToolTip()方法。
要自定义弹出工具提示的外观,只需要重写这个方法并自定义由继承的方法所返回的JToolTip。例如,下面的代码显示了JButton工具提示的颜色的自定义,如图4-4所示。
JButton b = new JButton("Hello, World") {
public JToolTip createToolTip() {
JToolTip tip = super.createToolTip();
tip.setBackground(Color.YELLOW);
tip.setForeground(Color.RED);
return tip;
}
};
在创建了JToolTip之后,我们可以配置继承的JComponent属性或是任何特定的JToolTip属性,如表4-5所示。
JToolTip属性
属性名
|
数据类型
|
访问性
|
accessibleContext
|
AccessibleContext
|
只读
|
component
|
JComponent
|
读写
|
tipText
|
String
|
读写
|
UI
|
ToolTipUI
|
只读
|
UIClassID
|
String
|
只读
|
4.2.3 显示位置工具提示文本
Swing组件甚至支持基于鼠标位置的不同工具提示文本的显示。这需要重写public boolean contains(int x, int y)方法,这是由Component类继承的。
例如,在实现了前一节自定义的JButton的创建之后,工具提示文本可以依据鼠标点是否位距离组件左边50像素之内而显示不同的文本。
JButton button = new JButton("Hello, World") {
public JToolTip createToolTip() {
JToolTip tip = super.createToolTip();
tip.setBackground(Color.YELLOW);
tip.setForeground(Color.RED);
return tip;
}
public boolean contains(int x, int y) {
if (x < 50) {
setToolTipText("Got Green Eggs?");
} else {
setToolTipText("Got Ham?");
}
return super.contains(x, y);
}
};
4.2.4 自定义义JToolTip观感
每一个已安装的Swing观感都会提供一个不同的JToolTip外观以及一个默认的UIResource值设置集合。图4-5显示了预安装的观感类型的JToolTip组件:Motif, Widnows与Ocean。
用于JToolTip的UIResource相关的属性显示在表4-6中。对于JToolTip组件,有9个不同的属性。
JToolTip UIResource元素
属性字符串
|
对象类型
|
ToolTip.background
|
Color
|
ToolTip.backgroundInactive
|
Color
|
ToolTip.border
|
Border
|
ToolTip.borderInactive
|
Color
|
ToolTip.font
|
Font
|
ToolTip.foreground
|
Color
|
ToolTip.foregroundInactive
|
Color
|
ToolTip.hideAccelerator
|
Boolean
|
ToolTipUI
|
String
|
正如在本章的前面所注意到的,JToolTip类支持HTML内容的显示。这可以实现多列与多行输入的显示。
4.2.5 ToolTipManager类
尽管由于JComponent创建并创建并显示其自己的JToolTip,JToolTip在某种程度上是一个被动对象,其使用也有许多可以配置的方面。然而,这些配置是由管理工具提示的类来负责的,而不是由JToolTip本身负责。管理工具提示使用的类被称之为ToolTipManager类。由于使用了单例设计模式,ToolTipManager类并不存在构造函数。相反,我们可以通过ToolTipManager的静态sharedInstance()方法获得当前的管理器。
4.2.6 ToolTipManager属性
一旦我们获得了ToolTipManager的共享实例,我们就可以定制工具提示文本何时以及是否显示。如表4-7所示,有五个可配置的属性。
ToolTipManager属性
属性名
|
数据类型
|
访问性
|
dimissDelay
|
int
|
读写
|
enabled
|
boolean
|
读写
|
initialDelay
|
int
|
读写
|
lightWeightPopupEnabled
|
boolean
|
读写
|
reshowDelay
|
int
|
只读
|
初始时,工具提示是允许的,我们可通过ToolTipManager.shareInstance().setEnabled(false)方法来禁止。这使得我们可以将工具提示与组件相关联,并允许终端在需要允许或禁止工具提示。
有三个面向时间的属性:initialDelay, dimissDelay与reshowDelay。他们均以毫秒计数。initialDelay属性是合适的工具提示出现之前用户必须将鼠标停留在组件内部的毫秒数。dismissDelay指定当鼠标停止运动时文本显示的时间长度;如果用户移动鼠标,也会使得文本消失。reshowDelay决定用户重新进入组件并且使得弹出文本显示时在组件外部必须停留的时间。
lightWeightPopupEnabled属性用来决定存储工具提示文本的弹出窗口类型。如果这个属性为true,则弹出文本适应顶级窗口的边界之内,文本出现在一个Swing JPanel内部。如果这个属性为false,则弹出文本适应顶级窗口的边界之内,文本出现在一个AWT Panel之内。如果文本的部分内容不能出现在顶级窗口之内,无论属性设置为何值,弹出文本将会出现在Window内。
尽管不是ToolTipManager的属性,ToolTipManager的两个方法值得一提:
public void registerComponent(JComponent component)
public void unregisterComponent(JComponent component)
当我们调用JComponent的setToolTipText()方法时,这会使得组件将其自身注册到ToolTipManager。然而,有时我们需要直接注册一个组件。当组件部分的显示是由其他渲染器完成时必须如此。例如,对于JTree而言,TreeCellRenderer显示树的所有节点。当渲染器显示工具提示时,我们注册JTree并通知渲染器显示什么文本。
JTree tree = new JTree(...);
ToolTipManager.sharedInstance().registerComponent(tree);
TreeCellRenderer renderer = new ATreeCellRenderer(...);
tree.setCellRenderer(renderer);
...
public class ATreeCellRenderer implements TreeCellRenderer {
...
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
...
renderer.setToolTipText("Some Tip");
return renderer;
}
}
分享到:
相关推荐
Swing 是 Java GUI 开发的重要库,它提供了一组组件和工具来创建桌面应用程序。"最全面的Swing文本编辑器"是一个利用Java Swing构建的高级文本编辑器,旨在提供比标准记事本更丰富的功能,如插入图片、鼠标绘图等。...
### Swing组件与容器 Swing提供了多种预定义的组件,如按钮(JButton)、文本框(JTextField)、复选框(JCheckBox)、单选按钮(JRadioButton)、滑动条(JSlider)、菜单(JMenu)等,以及容器如面板(JPanel)、...
1. **JavaSwing组件**:JavaSwing提供了一系列组件,如JButton(按钮)、JLabel(标签)、JTextField(文本框)、JTextArea(文本区域)、JTable(表格)等,用于构建用户交互界面。这些组件允许用户进行数据输入、...
Swing是完全由Java编写的,它提供了一个轻量级的组件模型,与Java AWT(Abstract Window Toolkit)相比,Swing组件具有更好的外观和更多的定制选项。Swing组件通常比AWT组件更现代,且在不同的操作系统上有一致的...
标题中的“Swing界面的屏幕取词”是指在Java Swing环境下实现的一种屏幕选取单词并进行翻译或查询的功能。Swing是Java的一个图形用户界面(GUI)工具包,它提供了丰富的组件和API,允许开发者创建桌面应用程序。屏幕...
在这个翻译系统中,Swing被用来设计和实现用户界面,包括文本输入框、按钮、标签等组件,用户可以通过这些组件与程序进行交互。 3. **用户界面设计**:良好的用户界面设计对于任何应用都是至关重要的。在这个系统中...
总的来说,学习Java Swing需要理解GUI组件、事件处理、布局管理和线程安全等核心概念。通过实际编写代码,结合本文档提供的例子,你将能够逐步掌握Swing,并能创建出美观且功能丰富的桌面应用程序。记得在实践中不断...
- **字节流与字符流**:理解二进制和文本数据的处理方式,包括FileInputStream、FileOutputStream、FileReader、FileWriter等。 - **缓冲区**:BufferedInputStream、BufferedOutputStream、BufferedReader、...
这个程序的核心在于它能够加载用户自定义的词汇库,并利用这些词汇库进行日常用语的翻译。下面我们将深入探讨Java语言特性、翻译算法、词汇库管理和用户接口等方面的知识。 首先,Java是一种跨平台的面向对象的编程...
此方法实现了核心的翻译逻辑: - 首先根据选择的语言方向确定源语言和目标语言。 - 使用`Translate.translate`方法进行翻译,并将结果展示在`toTextArea`文本框中。 - 如果发生异常,则通过日志记录器记录错误信息。...
`HomeDatabase.jar`可能是一个示例应用或者一个包含核心数据库操作的库,它展示了如何在Swing应用中使用这些数据库组件。这可以帮助开发者快速上手,并理解如何在实际项目中整合这些组件。 `lgpl.txt`和`MultiShow_...
5. **ant-swing-1.6.5.jar**:Ant Swing库提供了与Java Swing组件交互的任务,如创建和操作GUI应用程序。例如,它可以用于打开或操作Swing应用程序的窗口、组件等。 这些JAR文件共同构成了Ant 1.6.5的完整环境,...
第9章swing用户界面组件 9.1模型一视图一控制器设计模式 9.2布局管理器慨述 9.2.1边界布局 9.2.2面板 9.2.3网格布局 9.3文本输入 9.3.1文本域 9.3. 2标签与标签组件 9.3 3文本域变化跟踪 ...
在图形用户界面编程方面,作者会详细介绍Swing组件和布局管理器,以及如何创建复杂的用户界面和响应用户交互。最后,在数据库连接方面,书中会讲解JDBC的基本使用方法和高级特性,包括预处理语句、事务处理以及连接...
虽然代码示例基于较旧的JDK1.4.2,但其核心原理和编程思想对于现代Java游戏开发仍然具有指导价值。 首先,Java作为游戏开发语言的优势在于其跨平台性、强大的类库支持以及成熟的开发环境。Java的垃圾回收机制和自动...