您的主窗口应该实现自定义侦听器,例如:
public interface PreferencesListener {
public void updatePreference(PreferencesEvent e)
}
然后创建一个控制更新的管理器:
public class PreferencesController {
private static PreferencesController instance = new PreferencesController();
private List preferencesListeners;
private PreferencesController() {
preferencesListeners = new ArrayList();
}
public static PreferencesController getInstance() {
return instance;
}
public void addPreferenceListener(PreferencesListener listener) {
preferencesListeners.add(listener);
}
public void notify(int x, int y, int w, int h) {
PreferencesEvent e = new PreferencesEvent(x, y, w, h);
for(final PreferencesListener listener: preferencesListeners) {
listener.updatePreference(e);
}
}
}
在创建时,主窗口将其注册到控制器中:
PreferencesController.getInstance().addPreferenceListener(this);
当您在对话框触发器中更改值时,通知:
PreferencesController.getInstance().notify(x,y,w,h);
然后最终从PreferencesListener实现updatePreference(PreferencesEvent e) . 从这一刻起,每当更改值x y w h时,您的窗口都会收到通知 . 从我的角度来看,这是一个很好的解决方案,因为您的窗口和对话框甚至不知道彼此存在,并且您可以轻松添加另一个对优先级更改做出反应的组件 .