【问题标题】:How to manage the enable/disable of GUI components in one app如何在一个应用程序中管理 GUI 组件的启用/禁用
【发布时间】:2013-02-05 16:46:50
【问题描述】:

我正在做一个有很多按钮和菜单的应用程序,我想在可以或不能执行附加到它们的操作时启用和禁用按钮和菜单项。即保存按钮和保存菜单项只有在有未保存的更改时才会被激活。

问题:我怎样才能有效地做到这一点/哪种方法是正确的?

一个解决方案可以为每个按钮和菜单条目设置一个私有变量,并根据需要启用/禁用它。 其他解决方案可以将 JToolBar 和 JMenu 的所有组件放在一个数组中并遍历所有组件并根据需要启用/禁用。 但我认为有更好的解决方案。任何帮助或指南都将不胜感激。

编辑:问题不是如何启用/禁用单个按钮或菜单项,我会知道如何管理应用程序的所有按钮和菜单项的状态。实现这一目标的最佳方法是什么?我已经解释了一些我一直在思考的解决方案,但没有一个能说服我。

【问题讨论】:

  • "实现这一目标的最佳方法是什么?" - 这不是建设性的。在什么意义上最好?您要优化什么?
  • @Nikolay Kuznetsov 问题可能应该是“我怎样才能做到这一点?”我只是想知道在应用程序中通常这样做的方式。
  • 我认为用户体验比技术解决方案更重要。想象一下,您有一个按钮,用户单击但没有任何反应,这会使他感到困惑。在这种情况下,最好禁用它。
  • 是的!这就是我想做的。但问题是如何管理大量按钮和菜单项以根据需要启用/禁用它们。每个按钮/菜单项都有一个私有变量可以引用它们是要走的路吗?
  • 这取决于开/关模式。使用一些集合来保留按钮。

标签: java swing user-interface jbutton


【解决方案1】:

Action 类已经支持这一点。请参阅 Action#isEnabledAction#setEnabled 方法。调用 setter 将触发一个事件,设置此 Action 的 UI 将在该事件上启用/禁用自身。

Action 可以看作是 UI 按钮/菜单项/...的模型。所有状态都在模型中存储和更新,视图需要反映这一点(MVC 模式)。

【讨论】:

  • 从技术上讲,按钮的模型是ButtonModel,但是是的,这是一种管理状态的方式
【解决方案2】:

1) 禁用点击使用:

JButton#setEnabled(boolean)

JMenuItem#setEnabled(boolean)

2) 在一段时间内禁用ActionListener 在内部使用私有布尔变量

public void actionPerformed (ActionEvent ae) {
    if (!enabled) return;

    // rest of code
}

【讨论】:

    猜你喜欢
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2013-08-28
    • 2019-08-20
    相关资源
    最近更新 更多