title: MVC javafx Application, when to inject model
body: <p>I've got an application which i try to keep the mvc rule. I've got a model</p>
  
  <pre><code>public class CarTableView {
  SimpleIntegerProperty id = new SimpleIntegerProperty();
  SimpleStringProperty brand = new SimpleStringProperty();
  SimpleStringProperty engine = new SimpleStringProperty();
  SimpleBooleanProperty navi = new SimpleBooleanProperty();
  SimpleBooleanProperty available = new SimpleBooleanProperty();
  SimpleDoubleProperty liters = new SimpleDoubleProperty();
  SimpleIntegerProperty power = new SimpleIntegerProperty();
  
  ObservableList&lt;CarTableView&gt; observableList = FXCollections.observableArrayList();
  public CarTableView()
  {
  
  }
  public CarTableView(int id,String brand,String engine,Boolean navi,Boolean available,double liters,int power)
  {
      this.id.set(id);
      this.brand.set(brand);
      this.engine.set(engine);
      this.navi.set(navi);
      this.available.set(available);
      this.liters.set(liters);
      this.power.set(power);
  }
  </code></pre>
  
  <p>Which I need to use in my two controllers in order to get referance to ObservableList. And here is where lie my problem. Where to create the Model? I need him to be created before the initialize() method will invoked</p>
  
  <pre><code>public class MainController {
  
  private CarTableView model = new CarTableView();
  @FXML
  private Button addVehicleButton;
  
  @FXML
  private Button showClientDatabaseButton;
  
  @FXML
  public void initialize()
  {
  
  (...)
      model.getObservableList().add(new CarTableView(213,"FIAT","1.9 JTD",true,true,32.4,132)); // HERE I use model (it's fine here because its created in this class)
      tableView.setItems(model.getObservableList());
  
  @FXML
  public void addNewVehicleButtonClicked() throws IOException
  {
      FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/AddNewCar.fxml"));
      Stage stage = new Stage();
      Scene scene = new Scene((Pane)loader.load());
      stage.setScene(scene);
      stage.show();
      AddNewCarController addNewCarController = loader.getController();
      addNewCarController.initData(model); // HERE i try to initialize model in second controller
  
  }
  </code></pre>
  
  <p>But I need him also in initialize() method from another controller</p>
  
  <pre><code>public class AddNewCarController {
  
  private ObservableList&lt;String&gt; choiceBoxList = FXCollections.observableArrayList("YES","NO");
  @FXML
  public void initialize()
  {
      autoIncrementChekBox.setSelected(true);
      if(autoIncrementChekBox.isSelected())
      {
          idTextField.setText(Integer.toString((model.getObservableList().size()+1))); // HERE I NEED HIM TOO!! But it is null... he havent been load yet!
          idTextField.setDisable(true);
      }
      comboBox.setItems(choiceBoxList);
      comboBox.setValue("YES");
  }
  </code></pre>
  
  <p>In this situation even if I will pass the data throw function initModel() in second controller. Where I should have create model, and pass to both controller?
  I will also add my Main() file to clear situation</p>
  
  <pre><code>public class Main extends Application {
  
  public static void main(String[] args) {
      launch(args);
  
  }
  
  @Override
  public void start(Stage stage) throws Exception {
      stage.setTitle("Managment System");
      FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/Main.fxml"));
      Scene scene = new Scene((Pane)loader.load(),1800,900);
      MainController mainController = loader.getController();
      stage.setScene(scene);
      stage.show();
  
  }
  </code></pre>
  
  <p>}</p>