2

我有多个文本字段,我需要使用 Java Swing 一次启用或禁用它们。那可能吗?

4

3 回答 3

6

如果所有这些JTextFields都在一个容器上,你可以这样做:

for (Component c : container.getComponents()) {
   if (c instanceof JTextField) {
      c.setEnabled(false);
   }
}
于 2012-10-13T23:51:03.007 回答
2

很难维护所有组件的全局列表并遍历所有引用。假设您需要在不破坏系统松散耦合特性的情况下通知所有文本字段启用或禁用(我假设您有兴趣保持应用程序可维护)。

我的建议是:

  1. 子类 JTextField
  2. 开始使用 EventBus 减少耦合(你可以从任何实现开始,这个很简单)
  3. 在您的 JTextField 子类中订阅以接收change_state事件
  4. 当您想要启用/禁用支持时使用您自己的 JTextField
  5. 从应用程序的任何部分生成change_state事件

请注意,将(应该)只有两个与请求的功能相关的地方:

  • 事件触发(可以是按钮动作监听器)
  • 事件处理(JTextField 子类)

不要在您的应用程序上传播事件处理逻辑。快乐编码。

于 2012-10-14T00:03:59.393 回答
2

如果你把它们都放在一个链表/数组列表中,你可以有一个方法来循环它并启用/禁用。这可能是最简单的方法

于 2012-10-13T23:35:07.457 回答