Java 更改视图';s实例变量通过模型
编辑:看看我真正的问题的答案 这是我第一次尝试应用MVC模式。 在View.java中,我在地图上显示航路点。我想更改航路点的值。因此,我想在Model.java中执行此操作 我尝试了一个简单的测试来改变一个整数变量 View.java:`Java 更改视图';s实例变量通过模型,java,model-view-controller,Java,Model View Controller,编辑:看看我真正的问题的答案 这是我第一次尝试应用MVC模式。 在View.java中,我在地图上显示航路点。我想更改航路点的值。因此,我想在Model.java中执行此操作 我尝试了一个简单的测试来改变一个整数变量 View.java:` int x = 12; public int getx(){ return this.x; }` Model.java: int a = View.getx(); public void setx(int n){ n=n+2; } 在我
int x = 12;
public int getx(){
return this.x;
}`
Model.java:
int a = View.getx();
public void setx(int n){
n=n+2;
}
在我的主要代码中,我调用view.java然后调用model.java:如果我在视图中打印(x),那么x会被更新吗
无论如何,inta=View.getx(x)不起作用(静态引用,非静态方法)
感谢您的帮助,我希望这是可以理解的。无法评论您是如何应用MVC模式的,但您的错误很简单
public int getX()
是类视图的实例方法。通过调用View.getX()
,可以像类方法(或静态方法)一样访问它。您需要实例化一个视图
类
View v = new View();
v.getX();
行得通
编辑:
Idk为什么,我从来没有做过MVC模式。我暂时不需要控制器
在我看来,学习MVC模式的最好方法是选择一个应用程序开发框架,比如Android、iOS或JavaSwing。这些框架植根于MVC,在正确使用时,可以非常清楚地区分模型、视图和控制器。在PHP MVC中,视图监听模型更改。不是互惠的。
请参阅以下伪代码。我对Java语法不再那么确定了。但我只是想告诉你一个原则
在构造函数中定义一个带有可选参数(航路点
)的模型、一个属性航路点
、一个用于处理属性航路点的getter和setter:
class myModel {
int waypoints = 12;
public MyModel(int waypoints = 0){
waypoints = waypoints;
}
public int getWaypoints(){
return this.waypoints;
}
public void setWaypoints(int n){
this.waypoints = this.waypoints + n;
}
}
然后定义一个视图,该视图作为构造函数参数成为模型实例,并具有显示模型中的航路点的功能(!)
现在,testen:
// TEST 1:
// Init the model with a waypoints value.
MyModel model = new MyModel(182);
MyView view = new MyView(model);
view.printWaypoints(); // Displays 182.
// TEST 2:
// Init the model with no value.
MyModel model = new MyModel();
// Change waypoints value.
model.setWaypoints(43);
MyView view = new MyView(model);
view.printWaypoints(); // Displays 43.
请注意,在实例化视图之前必须更改模型
我认为,当您“通过引用”将模型传递给视图时,当您在模型中进行更改时,这并不重要
模型类保持不变。但是视图类的构造函数发生了变化:
class myView {
MyModel model;
// Notice the & (ampersand). You pass a reference to a model instance.
public MyView(MyModel &model){
model = model;
}
public void printWaypoints(){
print(model.getWaypoints);
}
}
现在再次测试:
// TEST 3: NOT PERSONALLY TESTED
MyModel model = new MyModel();
MyView view = new MyView(model);
// Change waypoints value after view creation.
model.setWaypoints(193);
view.printWaypoints(); // Displays 193.
我希望这会有所帮助。为什么视图不保存模型实例?还有,控制器在哪里?Idk为什么,我从来没有做过MVC模式。我暂时不需要控制器。控制器是通过setter方法更新模型的,而setter方法反过来应该更新视图。
// TEST 3: NOT PERSONALLY TESTED
MyModel model = new MyModel();
MyView view = new MyView(model);
// Change waypoints value after view creation.
model.setWaypoints(193);
view.printWaypoints(); // Displays 193.