Merlin的魔力: 焦点,焦点,还是焦点 - 编程入门网
t() 和 getLastComponent() 方法时,您应该在脑海里有第一/最后组件这样一个概念,但是初始组件未必就是第一组件,这些方法允许您显式地设置哪个组件是第一组件,哪个组件又是最后组件。
Merlin的魔力: 焦点,焦点,还是焦点(2)时间:2011-02-02 IBM John Zukowski内建策略 该系统包括5种内建的焦点遍历策略,其中后3种策略是特定于Swing的: ContainerOrderFocusTraversalPolicy DefaultFocusTraversalPolicy InternalFrameFocusTraversalPolicy SortingFocusTraversalPolicy LayoutFocusTraversalPolicy ContainerOrderFocusTraversalPolicy 通过使用容器固有的组件排序方式(它的 getComponents() 数组)来工作,这个顺序通常就是将组件添加到容器中时的顺序――除非您是用 add() 方法将组件添加到特定的位置的。除了 FocusTraversalPolicy 的这6个方法, ContainerOrderFocusTraversalPolicy 还支持隐式地将焦点向下转移到一个容器中,并提供了一个 accept() 方法,您可以重载这个方法,以便定义对于一个要获得焦点的组件来说什么是可接受的选择。 DefaultFocusTraversalPolicy 的工作方式与 ContainerOrderFocusTraversalPolicy 非常相似,只有一点不同――它依赖于AWT的对等组件来检查一个组件是否能够获得焦点。对等组件的可聚焦性(focusability)是依赖于实现的,因此您又要回过头来面对现有焦点管理子系统所存在的问题。而当您使用Swing GUI组件时,就不必担心对等组件的可聚焦性。 InternalFrameFocusTraversalPolicy 是为 JInternalFrame 而提供的策略。假设 JInternalFrame 不是重量级的窗口,那么当它初次显示时需要处理一些特有的行为。 SortingFocusTraversalPolicy 允许您定义一个 Comparator 来控制焦点遍历策略。这里是创建一个 comparator 来处理排序方式,而不是使用大块的 if-else语句块或者 Map 查找 。 还有一个专门的 SortingFocusTraversalPolicy ,它提供了一个默认的Comparator: LayoutFocusTraversalPolicy 。这里,组件是按照大小、位置和方位来排序的,而不是按照 getComponents() 数组中的顺序排序的。 这里也提供了第六个策略: LegacyGlueFocusTraversalPolicy ,但它不是公共的。当旧式的代码使用像 JComponent.setNextFocusableComponent() 这样的方法时,就会使用这个策略。 一个可以运行的实例 接下来,我们将创建一个简单的实例,用这个实例来演示对我们自己的焦点遍历策略的使用。我们将创建一个 FocusTraversalPolicy 实现,该实现带有一个数组,并按照数组中组件的顺序来决定焦点遍历的顺序。示例窗口采用的是典型的 BorderLayout 样式,在这种样式下,组件按照North、South、East、West和Center来定位和显示。遍历顺序是先按顺时针方向访问外围的组件,然后再访问中间的组件。图 1 展示了这个程序: 图 1. 一个BorderLayout窗口 Merlin的魔力: 焦点,焦点,还是焦点(3)时间:2011-02-02 IBM John Zukowski清单 1 显示了完整的顺时针遍历清单: 清单 1. 顺时针遍历
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |