我的视图中有一个演示者类和几个文本字段。
我希望我的主持人说“每个正在听我的文字,请现在就做点什么”。
但我不想使用Observabe / Observer,因为我已经使用它了,我不想感到困惑。
更具体一点,我希望文本字段更新演示者中的地图:
Presenter.java:
public class Presenter {
private HashMap<String,MyObject> map;
theMethod(){
//to all text fields, please update the map
然后是面板中的文本字段:
JTextField tf = new JTextField("tf 1");
tf.//add something to listen to the presenter
流程的开头是演示者中的方法:
答案 0 :(得分:1)
不确定您在问什么,但我在您的代码中看到以下评论
//所有文字字段,请更新地图
如果您只是希望文本字段使用每个文本字段中的文本更新地图,那么您只需要Presenter拥有所有文本字段的LIst,然后演示者就可以遍历列表并获取每个文本字段的文本,然后更新地图。
所以你的代码应该是这样的:
Presenter presenter = new Presenter();
JTextField tf1 = new JTextField();
presenter.addPresentee( tf1 );
所有addPresentee()方法都将文本字段添加到List。
答案 1 :(得分:1)
怎么样,而不是让JTextField
听取Presenter
,Presenter
会听取他们的意见?
public class Presenter {
private HashMap<String,MyObject> map;
private List<MyTextField> listeners = new ArrayList<MyTextField>();
private void theMethod() {
for (MyTextField mtf : listeners) {
mtf.updateMap();
}
}
private void addMyTextFieldListener(MyTextField listener) {
listeners.add(listener);
}
}
答案 2 :(得分:1)
我找到了它!
我在演示者中使用了Runnable回调。
在我看来,我有:
presenter.setCallback(new Runnable(){
public void run(){
System.out.println("the presenter want me to do something");
//stuff
}
});
在演讲者中:
private Runnable callback;
public void theMethod(){
System.out.println("I was triggered by another far away view");
SwingUtilities.invokeLater(this.callback);
}
当然,我将为每个文本字段实现一些List。
最后,我有预期的行为:
太棒了!