我有一个带Save()方法的程序,它保存表单上的微调器和文本字段中的所有数据。每次用户对文本字段或微调器进行更改时,有没有办法调用“Save()”?类似于通用事件处理程序的东西。
由于
答案 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)
我建议您为表单中的每个控件添加ChangeListener
或FocusListener
,并在其中一个回调方法中调用Save()
。 (实际上,我可能会选择FocusListener
并从Save()
方法调用focusLost
。)