我正在实现我自己的基本MVC框架,我有一个类似图形的视图,它显示了一堆点,如散点图。这是一个简化版本:
public class GraphView extends View
{
private List<Point2D> points;
//view code
public void setPoint(int index, float x, float y)
{
points.get(index).setLocation(x,y);
}
public int getNumPoints()
{
return points.size();
}
}
我还有一个视图,它使用这个视图作为子视图,带有一些额外的控件,其中一个是随机化图形视图上的点的按钮。
public class GraphControlsView extends View
{
private GraphView graph;
private JButton randomizeButton;
//view code
//called by the button
public void randomize()
{
for(int i = 0; i < graph.getNumPoints();i++)
{
graph.setPoint(i,Math.random(),Math.random());
}
}
}
我想知道这是逻辑在图表视图上随机化点的正确位置。看起来我正在混合视图和控制器的职责,并且这个逻辑应该驻留在控制器中。但是,如果我将逻辑移动到控制器中并且只是有一个按钮监听器,那么控制器可以使用该按钮来执行它不打算做的事情,尽管它有一个&#34; Randomize&#34;标签就可以了。
简而言之,GraphControlsView应该直接控制它的GraphView子视图吗?或者是否应该有一个控制器来监听GraphControlsView并在GraphView上设置点?
答案 0 :(得分:0)
应用MVC模型时,应该在模型中保留所有用户输入处理。视图仅涉及输出显示和用户界面,而模型处理程序的“物理”。控制器在两者之间中继数据并使它们保持不同。通过这种方式,您可以更好地分离关注点。 记住这一点,您的点随机化逻辑应该在Model类中实现。然后将结果中继到显示它的图形视图。
对于执行超出期望的按钮,技术上不应该发生这种情况。假设每个按钮都分配给一个特定的任务,它应该有自己的动作命令。在实现动作侦听器时,如果事件的set动作命令是分配给相应按钮的命令,则需要确保编写条件以执行所需的代码仅。您可以通过调用JButton的setActionCommand()方法来设置action命令。您可以通过调用actionPerformed()方法的Event参数的getActionCommand()方法由动作侦听器检查它。
如果您需要更多说明,请告诉我。