java - 无法将焦点转移到未显示的 CardLayout JPanel

标签 java swing focus

为什么我无法将焦点转移到 CardLayout 中未显示的 JPanel 卡?

我正在实现一个基于 CardLayout 的界面,该界面需要键盘导航友好。当用户用 Tab 键浏览完一张卡上的所有字段后,用户需要能够用 Tab 键切换到下一张卡。

我已经实现了一个 FocusTraversalPolicy ,它在流程中的每个点生成正确的 Component ,以及一个 FocusAdapter 来弹出任何新标签页的卡片,但有些东西正在吞噬消息并阻止焦点改变。

可以不干净地将CardLayout传递给FocusTraversalPolicy来更改卡片——尽管它的任何函数在Swing的许多函数中都会被多次调用线程并导致奇怪的行为。而且,那条路很脏。

不想使用键绑定(bind)b/c,这需要重新实现Java已经为我完成的所有焦点工作,而且也确实不干净。

基本上:Java 不喜欢将焦点转移到 CardLayout 中未显示的卡片 - 如何覆盖它?

最佳答案

I want to keep the program compartmentalized, as it runs in distinct steps.

这不会阻止您创建长滚动表单吗?

您仍然可以按照现在的方式创建单独的面板。然后,您可以将这些面板添加到使用 BoxLayout(或 GridBagLayout)的面板,而不是将这些面板添加到需要交换面板的 CardLayout。

这甚至会提供更大的灵 active ,因为每个面板可以具有不同的尺寸,而不会影响每个单独面板的尺寸。

但是,表单当前不会在 JScrollPane 中自动滚动,因此您可能需要查看 Scrolling a Form对于一个类,这将为您做到这一点。

关于java - 无法将焦点转移到未显示的 CardLayout JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23700115/

相关文章:

java - 为什么主要方法被标记为公开的?

java - 在java中@符号是什么意思?

Java Jar 控制台应用程序打开 Mac 系统菜单栏

javascript - 突出显示快捷键上的文本输入

java - 当 EditText 在 ListView 中时,selectAllOnFocus 的奇怪行为

c# - WPF MVVM 加载时的焦点字段

javascript - HTML+javascript还是javascript+jsp?

java - 用java编写一个程序,返回一个新数组,该数组包含大于数组中第一个值的所有值

java - JTextPane 文本在 Mac 操作系统中滚动时折叠

swing - 与 Swing 相关的 Scala NoClassDefFoundError