为什么不能将焦点转移到JPanel
中未显示的CardLayout
卡?
我正在实现一个基于CardLayout
的界面,该界面需要键盘导航友好。当用户完成一张卡上所有字段的制表符时,该用户需要能够制表到下一张卡。
我已经实现了一个FocusTraversalPolicy
,可以在过程的每个点上生成正确的Component
,还可以使用FocusAdapter
弹出新标签的卡,但是有些东西在吞噬消息并阻止了焦点的改变。
我可以不干净地将CardLayout
传递给FocusTraversalPolicy
来更改卡,尽管它的任何功能在Swing的许多线程中都会多次调用,并导致奇怪的行为。此外,那只是肮脏的。
我不想使用需要重新实现Java已经为我完成的所有焦点工作的键绑定b / c,而且这确实是不干净的。
基本上:Java不喜欢将焦点转移到CardLayout
中未显示的卡片上,我该如何覆盖呢?
最佳答案
我想让程序分隔开来,因为它以不同的步骤运行。
这不会阻止您创建长滚动表单吗?
您仍然可以按照现在的方式创建单个面板。然后,无需将这些面板添加到需要交换面板的CardLayout中,而是可以使用BoxLayout(或GridBagLayout)将面板添加到面板中。
这甚至将提供更大的灵活性,因为每个面板的大小可以不同,而不会影响每个单独面板的大小。
但是,表单当前无法在JScrollPane中自动滚动,因此您可能需要检出Scrolling a Form的类,这将为您完成此操作。
关于java - 无法将焦点转移到未显示的CardLayout JPanel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23700115/