Java Swing MVC вопрос - PullRequest
       6

Java Swing MVC вопрос

0 голосов
/ 22 марта 2010

Я слежу за этой моделью MVC: http://java.sun.com/developer/technicalArticles/javase/mvc/

В моей модели у меня есть поле "ArrayList shape", и мне нужны формы в моем представлении.

Это единственный способ получить мои фигуры, используя их в методе modelPropertyChange?

public void modelPropertyChange(PropertyChangeEvent evt) {

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

}

или я должен также создать общий метод получения в моем контроллере? как этот общий метод установки:

   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.
        }
    }
}

Если мне нужен такой универсальный метод получения, я понятия не имею, как преобразовать этот общий метод установки выше в универсальный метод получения. Если мне не нужен такой универсальный метод получения, чтобы получить мои данные из модели, если мне нужен только метод modelPropertyChange из моего представления. Как я получу данные из модели при первом запуске приложения? : О

Пфф, мне нужно получить мой массив форм из моей модели в моем представлении :( (а позже мне нужно получить и другие данные)

Ответы [ 3 ]

2 голосов
/ 07 апреля 2010

Обычно в MVC View вызывает методы получения в классе Control. Если данные, которые вы извлекаете, готовы к использованию представлением, то метод получения в классе Control обычно является просто методом делегата, который вызывает соответствующий метод получения в модели; однако, если данные, извлекаемые из модели, нуждаются в некоторых вычислениях, выполненных на ней, прежде чем они будут готовы к отображению, представление вызовет получатель из класса Control, который вызовет получатель из модели, выполнит необходимые вычисления и, наконец вернитесь в просмотр. Судя по твоему вопросу, это та часть, по которой ты хотел получить разъяснения.

Надеюсь, это поможет: -)

1 голос
/ 22 марта 2010

Я, должно быть, совершенно не понимаю, что вы пытаетесь сделать, потому что я не понимаю, почему у вас нет простого геттера в модели.Затем вызовите этот метод с вашей точки зрения.Это предполагает, что ваш вид имеет ссылку на модель.Документ, который вы указали, показывает модель, имеющую геттеры / сеттеры, подобные этой.

т.е.:

public ArrayList<Shape> getShapes()
{
   // Return my private field.
   return shapes;
}
0 голосов
/ 22 марта 2010

Если бы вы посмотрели ссылку, которую я вам дал, вы бы знали, что я использую "Modified MVC"

Единственные модели, которые я вижу на виде:

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

Доступны только те методы получения, которые я вижу в этом представлении:

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

как: String newStringValue = evt.getNewValue (). ToString ();

Так что я не вижу, как получить доступ к этому геттеру на моей модели из моего поля зрения. : s Если вы посмотрите на рисунок в этой ссылке, вы увидите, что нет связи между моделью и представлением, что все это происходит через контроллер. : S

Или я так не прав: s

(извините за публикацию ответа вместо комментария, но кодирования не было и число символов ограничено)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...