Java 更改视图';s实例变量通过模型

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; } 在我

编辑:看看我真正的问题的答案

这是我第一次尝试应用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;
}
在我的主要代码中,我调用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.