2012-10-13 23 views
2

我有多个文本字段,我需要使用Java Swing一次启用或禁用。 这可能吗?是否可以在Java Swing中同时启用所有文本字段?

+3

是的,这是可能的。您需要编写一个方法来迭代对这些字段的引用(如果它们未明确存储在集合中,则可以筛选其父组件的子表的列表),并调用'setEnabled(false)' – toniedzwiedz

+1

,我只需使用[JLayer](http://docs.oracle.com/javase/tutorial/uiswing/misc/jlayer.html)(对于Java 7)或[JXLayer](http:// java。 net/projects/jxlayer /)用于早期版本的Java。这将允许您基本上绘制一个基于组件的玻璃窗格,您可以用它来“禁用”内容 – MadProgrammer

回答

2

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

6

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

for (Component c : container.getComponents()) { 
    if (c instanceof JTextField) { 
     c.setEnabled(false); 
    } 
} 
2

这将是难以维持的所有组件的全局列表,并遍历所有引用。假设您需要通知所有文本字段变为启用或禁用,而不会破坏系统的松散耦合性质(我假设您有兴趣保持应用程序的可维护性)。

我的建议是:

  1. 子类的JTextField
  2. 开始使用EventBus降低耦合(你可以用任何实现启动,this one是很简单的)
  3. 在你的JTextField的子类订阅以接收change_state事件
  4. 使用您自己的JTextField当您希望启用/禁用支持时
  5. 生成change_state事件从应用程序的任何部分

请注意,会出现(应该是)只有两个相关的请求的功能地方:

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

你不要因为APPLICAT传播事件处理逻辑离子。快乐的编码。

相关问题