为什么不能将焦点转移到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/

10-09 06:53