【问题标题】:How does Swing determine which component to give focus to when Tab is pressed?当 Tab 被按下时,Swing 如何确定将焦点放在哪个组件上?
【发布时间】:2011-07-24 01:33:04
【问题描述】:

Tab 被按下时,Swing 如何确定将焦点切换到哪个组件?它与声明组件的顺序有关吗?创建?添加?他们在屏幕上的绝对位置?还是根本没有可靠的模式?

【问题讨论】:

  • 查看焦点子系统上的这个链接:How to Use the Focus Subsystem
  • @Hovercraft:作为答案发布?我会投票。
  • 谢谢,但我并不真正关心赞成票。把你的答案留在里面。

标签: java swing


【解决方案1】:

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

我认为默认的 FocusTraversalPolicy 依赖于外观,但在我观察到它时,它要么是 ContainerOrderFocusTraversalPolicy(它只是按组件在父级中的索引对组件进行排序)要么是 LayoutFocusTraversalPolicy。

最后提到的这个类根据容器组件的位置对它们进行排序,粗略地将它们排列成行并逐行遍历它们,并且从左到右(或在 RTL 语言环境中从右到左) .这在使用一些基于网格的布局管理器(如 GridLayout、GridBagLayout、GroupLayout 等)时效果最佳。

【讨论】:

    【解决方案2】:

    啊,我收回我的评论。从气垫船的链接(强调我的):

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

    我昨晚看书的时候肯定错过了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 2021-05-20
      • 1970-01-01
      相关资源
      最近更新 更多