2010-03-21 53 views
0

我下面这个MVC模式: http://java.sun.com/developer/technicalArticles/javase/mvc/的Java Swing的MVC问题

在我的模型我有一个“ArrayList的形状”字段和我需要的形状,在我看来。

是通过在modelPropertyChange方法中获取形状来获取形状的唯一方法?

public void modelPropertyChange(PropertyChangeEvent evt) { 

    if (evt.getPropertyName().equals(MyController.PROPERTY_TEXT)) { 
     ArrayList<Shape> shapes = (ArrayList<Shape>) evt.getNewValue(); 
    } 

} 

还是应该在我的控制器中创建一个通用的getter方法?像这样的通用setter方法:

protected void setModelProperty(String propertyName, Object newValue) { 

    for (AbstractModel model: registeredModels) { 
     try { 

      Method method = model.getClass(). 
       getMethod("set"+propertyName, new Class[] { 
                newValue.getClass() 
               } 


         ); 
      method.invoke(model, newValue); 

     } catch (Exception ex) { 
      // Handle exception. 
     } 
    } 
} 

如果我需要这样一个通用的getter方法,我不知道如何把上面这个通用二传手到一个通用的getter方法。 如果我不需要这样的通用getter方法从模型中检索我的数据,如果我只需要我的View中的modelPropertyChange方法。应用程序第一次启动时,我将如何从模型中获取数据? :○

Pfft我需要让我的形状ArrayList的从我的模型,我认为:((后来我需要一些其他数据也)这么混乱:(

回答

2

通常与MVC视图将调用控制类中的getters。如果正在检索的数据已准备好被View使用,那么Control类中的getter通常只是一个调用模型中相应getter的委托方法;然而,如果从模型中获取的数据需要在准备好显示之前对其执行一些计算,那么View将从Control类中调用一个getter,该类将调用模型中的getter,执行所需的计算,最后返回到视图。通过你的问题的声音,这是你想要澄清的部分。

希望这有助于:-)

1

我必须完全误解你我试着去做,因为我不明白为什么你不只是在模型中有一个简单的getter,然后从你的view中调用这个方法,假设你的视图有一个对模型的引用。 。具有这样getter/setter方法模型

即:

public ArrayList<Shape> getShapes() 
{ 
    // Return my private field. 
    return shapes; 
} 
0

如果你有我给你的链接一看,那么你会知道,我现在用的是“改良的MVC”

唯一的车型我在视图中看到的是这些:

opacitySpinner.setModel(new SpinnerNumberModel(100, 0, 100, 1)); 
     opacitySlider.setModel(new DefaultBoundedRangeModel(100, 0, 0, 100)); 

唯一的干将我在视图中查看正在此视图方法内访问:

public void modelPropertyChange(final PropertyChangeEvent evt) { 
... 
} 

像:字符串newStringValue = evt.getNewValue()的toString();

所以我没有看到如何从我的视图中访问我的模型上的getter。 :s 如果您查看该链接中的图形,您会发现模型与视图之间没有任何关联,它们都是通过控制器发生的。 :■

还是我错了:■

(对不起张贴的答案,而不是评论的,​​但没有codeformatting和有限的字符)