当按Tab键时,Swing如何确定要关注哪个组件?

时间:2011-03-27 20:47:04

标签: java swing

当按下 Tab 时,Swing如何确定要将焦点更改为哪个组件?是否与声明组件的顺序有关?创建?添加?他们在屏幕上的绝对位置?或者根本没有可靠的模式?

2 个答案:

答案 0 :(得分:3)

AWT(或Swing)FocusManager使用FocusTraversalPolicy来确定哪个组件接下来成为焦点。

我认为默认的FocusTraversalPolicy依赖于外观,但是在我观察它的地方,它是一个ContainerOrderFocusTraversalPolicy(它只是按父节点中的索引对组件进行排序)或者是LayoutFocusTraversalPolicy。

这个最后提到的类通过它们的位置对容器的组件进行一些排序,大致将它们排成行并逐行遍历它们,并在从左到右的行中(或在RTL-locales上从右到左)进行排序。当使用GridLayout,GridBagLayout,GroupLayout等基于网格的布局管理器时,这种方法效果最佳。

答案 1 :(得分:2)

啊,我撤回了我的评论。从Hovercraft的链接(强调我的):

  

焦点遍历策略确定导航一组组件的顺序。 Swing提供LayoutFocusTraversalPolicy类,它根据布局管理器相关因子决定导航顺序,例如组件的大小,位置和方向。 在焦点循环中,可以向前或向后导航组件。

我昨晚在读书时肯定错过了。

气垫船,如果你发布这样的答案,我会删除它并接受你的。