Java JTabbedPane只允许在为true时切换选项卡。

6

当用户点击一个选项卡时,我会进行一些验证。如果验证通过,则允许显示该选项卡(或切换到该选项卡)。目前,我使用StateChanged事件进行验证。问题是,当您点击一个选项卡时,它会显示选项卡的内容,如果验证不通过,它会切换回之前的选项卡。除非验证通过,否则我不希望它切换到任何选项卡。如何做到这一点?我是否在检查错误事件?谢谢大家


4
最理想的UI/UX做法是使用pane.setEnabledAt(index,false);调用“禁用”相关选项卡,而不是在stateChanged事件中使用复杂的逻辑。 - ring bearer
3
您可以考虑使用 CardLayout 来代替 JTabbedPane,以完全控制视图更改的时机。对我而言,使用“锁定选项卡”的 JTabbedPane 不是很直观。 - Andrew Thompson
2个回答

3
您可以使用方法tab.setEnabledAt(index, false)来禁用标签页,如果validation = false,tab.setEnabledAt(index, true)来重新启用它,当validation = true时。
编辑:禁用一个选项卡将使其变灰,因此用户无法首先单击它,这意味着您需要在用户单击选项卡之前执行验证检查。

1

尝试覆盖 JTabbedPane.setSelectedIndex(int index)。


更为简洁的解决方案可能是覆盖 DefaultSingleSelectionModel.setSelectedIndex(index) 并使用 JTabbedPane 的模型。然而,更为简洁的解决方案是覆盖 DefaultSingleSelectionModel 以支持 VetoableChangeListener - xmedeko
完全同意:xmedeki 的解决方案更安全。 - Zecas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接