2010-03-21 50 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和有限的字符)