2012-06-03 2 views
14

Я новичок в JavaFX и изо всех сил пытаюсь создать надлежащую архитектуру MVC с учетом моей текущей настройки. Я щелкнул вместе пользовательский интерфейс с помощью Scene Builder и назначил класс Controller.MVC Pattern в JavaFX с помощью Scene Builder

запуска:

public class Portal extends Application { 
    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("PortalUI.fxml")); 

     stage.setTitle("Portal"); 
     stage.setScene(new Scene(root)); 
     stage.show(); 
    } 
} 

А класс контроллера содержит остальную часть кода.

public class AccommodationPortalView implements Initializable { 
    @Override 
    public void initialize(URL url, ResourceBundle resources) { 
    // Work here. 
    } 
} 

Мой профессор попросил меня разделить проблемы и обязанности этого приложения. Контроллер не только управляет состоянием и разговаривает с бэкэнд, но также обновляет представление.

Мой первый ответ состоял в том, чтобы позволить классу Controller стать View и создать еще два класса для контроллера и модели.

Однако я не могу понять, как подключить эти штуки. Мне никогда не нужно создавать экземпляр представления, поэтому нет экземпляра представления, который я могу передать, например, моему контроллеру. Затем я попробовал сделать все синглеты и просто дать контроллеру их во время выполнения, но это дает мне ошибку.

public class Portal extends Application { 
    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("PortalUI.fxml")); 

     stage.setTitle("Portal"); 
     stage.setScene(new Scene(root)); 
     stage.show(); 

     // Controller gets a View and Model instance in initialize(); 
     // Error: Instantiation and Runtime Exception... 
     PortalController.INSTANCE.initialize(); 
    } 
} 

Как правильно настроить шаблон MVC с использованием моей текущей конфигурации? Требуется ли другая архитектура?

ответ

23

Ваш,
- View является основным Stage обеспечивается платформой JavaFX при запуске. Этот этап имеет только Scene (вы создали и установили), который, в свою очередь, имеет содержимое родительского узла root (ваша переменная). Этот узел root установлен FXMLLoader и представляет структуру макета/узла, определенную в файле «PortalUI.fxml».
Иными словами, Stage -> Scene -> PortalUI.fxml(root) определит часть обзора.

- контроллер класс, который реализует Initializable и что вы указали в файле PortalUI.fxml с Fx: контроллер =»" атрибута. Класс, который вы указали там (PortalController, я полагаю), будет создан и вызывается его методом initialize() с помощью FXMLLoader. А именно, контроллер будет создан при загрузке файла PortalUI.fxml, поэтому вам не нужно создавать и инициализировать его самостоятельно. Чтобы получить созданный/инициализированный экземпляр контроллера из FXMLLoader, посмотрите Accessing FXML controller class.

- Модель - это базовая структура данных, хранящаяся и управляемая контроллером. Это может быть что угодно, представляющее «данные». Например, Person, PortalInfo и т. Д. Классы.

+0

Здравствуйте! Спасибо за ответ, ссылка была также отличным ресурсом! У меня есть доступ к контроллеру и ...! Кажется, я понимаю это сейчас. Это совсем другая архитектура, из которой я привык. Большое вам спасибо за помощь мне :) – IAE