当按下 Tab 时,Swing如何确定要将焦点更改为哪个组件?是否与声明组件的顺序有关?创建?添加?他们在屏幕上的绝对位置?或者根本没有可靠的模式?
答案 0 :(得分:3)
AWT(或Swing)FocusManager使用FocusTraversalPolicy来确定哪个组件接下来成为焦点。
我认为默认的FocusTraversalPolicy依赖于外观,但是在我观察它的地方,它是一个ContainerOrderFocusTraversalPolicy(它只是按父节点中的索引对组件进行排序)或者是LayoutFocusTraversalPolicy。
这个最后提到的类通过它们的位置对容器的组件进行一些排序,大致将它们排成行并逐行遍历它们,并在从左到右的行中(或在RTL-locales上从右到左)进行排序。当使用GridLayout,GridBagLayout,GroupLayout等基于网格的布局管理器时,这种方法效果最佳。
答案 1 :(得分:2)
啊,我撤回了我的评论。从Hovercraft的链接(强调我的):
焦点遍历策略确定导航一组组件的顺序。 Swing提供LayoutFocusTraversalPolicy类,它根据布局管理器相关因子决定导航顺序,例如组件的大小,位置和方向。 在焦点循环中,可以向前或向后导航组件。
我昨晚在读书时肯定错过了。
气垫船,如果你发布这样的答案,我会删除它并接受你的。