当前位置:主页   - 电脑 - 程序设计 - JAVA
Merlin的魔力: 焦点,焦点,还是焦点
来源:网络   作者:   更新时间:2012-08-10
收藏此页】    【字号    】    【打印】    【关闭

  基于Swing的GUI还有一些遗留问题,包括如何管理焦点(哪个组件有接收键盘输入的优先权),如何判断哪个组件拥有焦点,以及如何将焦点从一个组件遍历到下一个组件。由于Swing建立在抽象窗口工具包(AWT)之上,对组件焦点的管理便依赖于AWT中的底层焦点管理。Java平台过去的版本依赖于本地的窗口管理器来协助进行焦点管理,所以尽管有些开发者会认为焦点控制是在他们的应用程序内部进行的,而实际情况并非如此。由于对底层的本地焦点系统的依赖性,因而出现了许多平台不相容的现象。

  至于Merlin,它为您提供了一个全新的、AWT级的焦点子系统。这个子系统有其优点,也有其缺点。这种新模型的出发点是创建一种能够跨平台工作的系统,它带有一个集中式的 KeyboardFocusManager ,用以管理活动的并且拥有焦点的窗口,以及当前焦点的属主。 缺点是,它与前面的版本之间存在一些不兼容性,从而导致有些程序在较新的版本中不能正常运行。作为一个开发者,当您创建任何新程序时,您需要清楚新的焦点遍历方式。

  新的焦点子系统相当大,在本期话题中,我们只关注其中的一项新特性―― FocusTraversalPolicy ――并向您展示如何管理单个容器中的焦点遍历。要获得关于其他特性的信息,参见 参考资料以链接到Sun的文档以及其他一些重要的指南。

  什么,没有接口?

  我们首先来看一下 FocusTraversalPolicy 类。是的,它 是一个类,而不是一个接口。不过,它是一个抽象类,因而需要被细分类。 FocusTraversalPolicy 类可以控制在一个特定的焦点循环根中的焦点遍历顺序。焦点循环根是一种容器,它的 focusCycleRoot 属性被设置为 true 。在默认情况下,窗口和框架被设置为 true ,其他的容器则被设置为 false ,不过它们也可以被设置为 true 。将属性设置为 true 意味着当焦点来回转移时,这个焦点将一直呆在焦点循环根内的一个循环组件之中。

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明