【问题标题】:Java JTabbedPane allow Tab to switch to only if trueJava JTabbedPane 允许 Tab 仅在 true 时切换到
【发布时间】:2012-04-09 14:03:26
【问题描述】:

当用户单击选项卡时,我会执行一些验证。如果验证 == true 则允许选项卡显示(或切换到)。现在我正在使用 StateChanged 事件进行验证。问题是,当您单击选项卡时,它会显示选项卡内容,如果验证 == false 它会切换回上一个选项卡。除非验证 == true,否则我根本不希望它切换到。我该怎么做,我是否在检查错误的事件?谢谢大家

【问题讨论】:

  • 理想的 UI/UX 方法是使用 pane.setEnabledAt(index, false); 调用而不是 stateChanged 事件中的复杂逻辑来“禁用”相关选项卡。
  • 您可以使用CardLayout 而不是JTabbedPane 来解决此问题 - 以便完全控制视图何时更改。使用“锁定标签”JTabbedPane 对我来说是违反直觉的。

标签: java swing events jtabbedpane


【解决方案1】:

如果validation = false,您可以使用方法tab.setEnabledAt(index, false) 禁用选项卡,并在validation = true 时使用tab.setEnabledAt(index, true) 重新打开它。

编辑:禁用选项卡会将其变灰,因此用户无法首先单击它,这意味着您必须在用户单击选项卡之前执行验证检查。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 更简洁的解决方案可能是覆盖 DefaultSingleSelectionModel.setSelectedIndex(index) 并使用 JTabbedPane 的模型。然而,更清洁的解决方案是覆盖 DefaultSingleSelectionModel 以支持 VetoableChangeListener
    • 绝对同意:xmedeki 解决方案更安全。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多