我在我的项目中使用 MVC 模式。btnAdd
创建新客户并添加MyJPanel1
为侦听器。当客户更改其状态时,它会触发事件并被customerChanged
调用。当
MyJPanel1
'scustomerChanged
被调用时,它会执行一些操作并且
- 它必须停止倾听该客户
- 其他视图必须开始听取该客户的意见
其他一些视图将具有相同的行为。MyJPanel1
我在'scustomerChanged
方法本身中实现的那两个要求。
已更新
我的问题和问题是:
- 从 MVC 的角度来看这是正确的,还是我应该有一些其他实体(控制器?)应该以某种方式处理它?
- 当客户触发
fireEvent
方法时,它会从侦听器c.removeListener(this);
中MyJPanel1
删除自己,并因此导致fireEvent' because
侦听in
器 for` 循环中的错误被更改。
我会很感激一些帮助。
class Customer {
// ...
private void fireEvent(CustomerEvent event) {
for (IListener listener : listeners) {
listener.customerChanged(event);
}
}
}
class MyJPanel1 extends JPanel implements IListener {
MyJPanel2 otherPanel;
MyJPanel1(MyJPanel2 panel) {
this.otherPanel = panel;
createGui();
}
private void createGui() {
JButton btnAdd = new JButton("Add");
btnAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
Customer c = new Customer();
c.addListener(this);
}
});
// ...
}
@Override
public void customerChanged(CustomerEvent event) {
if (event instanceof AddedCustomerEvent) {
Customer c = event.getCustomer();
// do something
c.removeListener(this);
c.addListener(otherPanel);
}
}
}