检测表单控件中的所有更改(由用户进行)

时间:2011-05-27 14:11:42

标签: java swing controls event-handling

我有一个带Save()方法的程序,它保存表单上的微调器和文本字段中的所有数据。每次用户对文本字段或微调器进行更改时,有没有办法调用“Save()”?类似于通用事件处理程序的东西。

由于

2 个答案:

答案 0 :(得分:3)

您可以将ChangeListener的单个实例连接到所有控件,这看起来像(当内部类时):

private class ListenerImpl implements ChangeListener {
   public void stateChanged(ChangeEvent e) { save(); }
}

要一次性添加此侦听器,您可以像这样循环遍历Container的子级:

final ListenerImpl l = new ListenerImpl();
for (Component c : getComponents()) {
   if (c instanceof JSpinner) {
      ((JSpinner)c).addChangeListener(l);
   } else if (c instanceof JTextPane ) { } // ... other types of components
}

你必须寻找不同类型的组件,因为没有定义addChangeListener(..)方法的接口(我知道)。

答案 1 :(得分:2)

我建议您为表单中的每个控件添加ChangeListenerFocusListener,并在其中一个回调方法中调用Save()。 (实际上,我可能会选择FocusListener并从Save()方法调用focusLost。)