【IT168 技术文章】Java 2 标准版,1.4(也称 Merlin)引入许多人们期待已久并为之雀跃的对 Java 平台的更改。其中一个就是对 AWT 焦点管理子系统的更改。这个 AWT 焦点子系统的新实现与旧的完全不同。实际上,许多代码都被完全重新编写过了,这样做在某些情况下是以牺牲向下兼容为代价的。我们认为这些措施是必需的,原因在于旧的 AWT 焦点子系统不完善。
改进了的焦点模型的中心是新的 KeyboardFocusManager 类,它由几个增加的 Swing 类和 AWT 类支持。本文的绝大部分用于让我们学习这些更改,并讨论它们会如何影响您的 Java 编程工作。
KeyboardFocusManager 简介
KeyboardFocusManager 类用于管理与新的 AWT 焦点子系统的焦点相关的任务。它负责活动的和已定焦的窗口以及当前的焦点所有者。它的任务是让客户机代码可以启动焦点的更改并调度与焦点相关的所有事件。
KeyboardFocusManager 给 AWT 焦点子系统带来许多新功能。其中的一些功能如下:
用 Shift-Tab 将焦点转到 tab 组的前一个组件。
跟踪由鼠标引起的焦点遍历行为。
确定当前的焦点所有者。
KeyboardFocusManager 有四个字段:
FORWARD_TRAVERSAL_KEYS :通常是 Tab(或 Ctrl-Tab)键
BACKWARD_TRAVERSAL_KEYS :通常是 Shift+Tab(或 Ctrl-Shift-Tab)
UP_CYCLE_TRAVERSAL_KEYS :无缺省值
DOWN_CYCLE_TRAVERSAL_KEYS :无缺省值
我们将在下面几节中讨论其中的一些字段。
KeyboardFocusManager 是个抽象类,我们能够用它全局的请求焦点信息。例如, KeyboardFocusManager.getFocusOwner() 返回当前的焦点所有者。 DefaultKeyboardFocusManager 类对 AWT 应用程序是作为缺省提供的。您当然可以选用自己的 KeyboardFocusManager 类来替代该焦点模型。但是,倘若本机的焦点策略复杂的话,建议您还是建立 KeyboardFocusManager 或 DefaultKeyboardFocusManager 的子类吧。