【问题标题】:Can Views Control other views?视图可以控制其他视图吗?
【发布时间】:2014-03-14 13:56:56
【问题描述】:

我正在实现自己的基本 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());
         }
    }
}

我想知道这是否是逻辑在图表视图上随机化点的正确位置。似乎我混合了视图和控制器的职责,并且这个逻辑应该驻留在控制器中。但是,如果我将逻辑移到控制器中并且只拥有一个按钮侦听器,则控制器可以使用该按钮来执行它不适合做的事情,尽管它上面有一个“随机化”标签。

那么简而言之,GraphControlsView 应该直接控制它的 GraphView 子视图吗?还是应该有一个控制器来监听 GraphControlsView 并在 GraphView 上设置点?

【问题讨论】:

标签: java model-view-controller


【解决方案1】:

在应用 MVC 模型时,您应该将所有用户输入处理保留在模型中。视图只关注输出显示和用户界面,而模型处理程序的“物理”。控制器在两者之​​间中继数据并保持它们的区别。这样您就可以更好地分离关注点。 记住这一点,您的点随机化逻辑应该在 Model 类中实现。然后将结果转发到显示它的图形视图。

至于按钮执行超出预期,这在技术上不应该发生。假设每个按钮都分配给一个特定的任务,它应该有自己的动作命令。在实现动作监听器时,您需要确保编写一个条件来执行所需的代码如果事件的设置动作命令是分配给相应按钮的命令。您可以通过调用 JButton 的 setActionCommand() 方法来设置动作命令。您可以通过调用 actionPerformed() 方法的 Event 参数的 getActionCommand() 方法由动作侦听器检查它。

如果您需要更多说明,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    相关资源
    最近更新 更多