gpt4 book ai didi

java - 在 Model-View-Controller 中,为什么模型的改变不会触发 View 的改变?

转载 作者:行者123 更新时间:2023-11-29 08:10:28 24 4
gpt4 key购买 nike

我目前正在开发自己的扫雷器。 Swing 遵循模型- View - Controller 设计模式。在 MVC 中,我了解到每当模型发生变化时, Controller 也会触发 View 的变化。但在此示例中,我无法跟踪如何使 setTitlesetInfo 中的更改反射(reflect)在 View 中。

在这里,当我设置对话框的标题时,实际内容(模型)正在改变,但输出( View )没有相应的变化。

//InfoDisplayer is inner class of class MenuActionListener
class InfoDisplayer extends JDialog {
JLabel info;
BorderLayout infoBorderLayout = new BorderLayout();

public InfoDisplayer(JFrame ownerFrame) {
super(ownerFrame,true);
info = new JLabel();
setFocusable(false);
setSize(300,400);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLayout(infoBorderLayout);
add(info,BorderLayout.SOUTH);
setVisible(true);
}

void setInfo(JLabel info) {
this.info = info;
}

public void setTitle(String title) {
super.setTitle(title);
}
}

if ((event.getActionCommand()).equals("HowToPlay")) {
InfoDisplayer instructionsDisplay = new InfoDisplayer(gUIManagerFrame);
//gUIManagerFrame is an object of its outer class,MenuActionListener
instructionsDisplay.setTitle("INSTRUCTIONS");
instructionsDisplay.setInfo(new JLabel("<html><h1><B>INSTRUCTIONS</B></h1></html>"));
} else {// if about is clicked!!
InfoDisplayer aboutDisplay = new InfoDisplayer(gUIManagerFrame);
aboutDisplay.setTitle("MineSweeper v0.1");
aboutDisplay.setInfo(new JLabel("<html><h1><B>MineSweeperv1.0</B></h1> </html>"));
}

最佳答案

Whenever there is a change in model, the controller will trigger that change in view.

Model–View–Controller pattern ,当 Controller 更新模型时,模型会通知 View ,通常使用observer pattern ,然后 view 会自行更新。 View 可能会询问模型 并处理任何由此产生的更新。有更详细的答案和示例 here .

关于java - 在 Model-View-Controller 中,为什么模型的改变不会触发 View 的改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8395621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com