Sebastian

main\java\gui\CommandBarController.java
public class CommandBarController extends TextField {

    private static final String COMMAND_BAR_LAYOUT_FXML = "/main/resources/layouts/CommandBar.fxml";
    private Logic logic;

    public CommandBarController(Logic logic) {
        FXMLLoader loader = new FXMLLoader(getClass().getResource(COMMAND_BAR_LAYOUT_FXML));
        loader.setController(this);
        loader.setRoot(this);
        try {
            loader.load();
        } catch (IOException e) {
            e.printStackTrace();
        }
        this.logic = logic;
    }

    public CommandBarController(String text, Logic logic) {
        this(logic);
        this.setText(text);
        this.selectAll();
    }

    @FXML
    public void onKeyPress(KeyEvent event) {
        logic.handleKeyPress(this, event.getCode(), this.getText());
    }
}
main\java\gui\MainApp.java
public class MainApp extends Application {

    private static final String ROOT_LAYOUT_FXML = "/main/resources/layouts/RootLayout.fxml";

    private static final String WINDOW_TITLE = "Collate";
    private static final String COMMAND_BAR_DEFAULT_TEXT = "Enter command here";

    private Stage primaryStage;
    private BorderPane rootLayout;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        initRootLayout();
        initPrimaryStage(primaryStage);
        
        Logic logic = initLogic();

        // Add components to RootLayout
        addCommandBar(logic);
        addOverview();
    }

    /**
     * Initialises the RootLayout that will contain all other JavaFX components.
     */
    private void initRootLayout() {
        FXMLLoader loader = new FXMLLoader(getClass().getResource(ROOT_LAYOUT_FXML));
        try {
            rootLayout = loader.load();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * Initialises the main JavaFX Stage with RootLayout being the main Scene.
     * 
     * @param primaryStage
     */
    private void initPrimaryStage(Stage primaryStage) {
        this.primaryStage = primaryStage;
        this.primaryStage.setTitle(WINDOW_TITLE);
        this.primaryStage.setScene(new Scene(rootLayout));
        this.primaryStage.show();
    }
    
    private Logic initLogic() {
        return new Logic();       
    }

    private void addOverview() {
        rootLayout.setCenter(new OverviewLayoutController());
    }

    private void addCommandBar(Logic logic) {
        rootLayout.setBottom(new CommandBarController(COMMAND_BAR_DEFAULT_TEXT, logic));
    }
}
main\java\gui\OverviewLayoutController.java
public class OverviewLayoutController extends StackPane {
    @FXML
    private ListView<String> overviewList;

    private static final String OVERVIEW_LAYOUT_FXML = "/main/resources/layouts/Overview.fxml";
    
    private static ObservableList<String> obsList = FXCollections.observableArrayList();

    public OverviewLayoutController() {
        FXMLLoader loader = new FXMLLoader(getClass().getResource(OVERVIEW_LAYOUT_FXML));
        loader.setController(this);
        loader.setRoot(this);

        try {
            loader.load();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        overviewList.setItems(obsList);
    }
    
    public static void updateOverviewDisplay(ArrayList<String> stats, boolean clearAll) {
        if (clearAll) {
            obsList.clear();
        }
        obsList.addAll(stats);
    }
    
    public static void updateOverviewDisplay(String stat, boolean clearAll) {
        if (clearAll) {
            obsList.clear();
        }
        obsList.add(stat);
    }
}
main\resources\layouts\CommandBar.fxml
<fx:root onKeyPressed="#onKeyPress" stylesheets="@../styles/stylesheet.css"
	type="TextField" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" />
main\resources\layouts\Overview.fxml
<fx:root type="StackPane" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
	<children>
		<ListView fx:id="overviewList">
			<!-- TODO Add Nodes -->
		</ListView>
	</children>
</fx:root>
main\resources\layouts\RootLayout.fxml
<BorderPane id="root" prefHeight="500.0" prefWidth="500.0"
	stylesheets="@../styles/stylesheet.css" xmlns="http://javafx.com/javafx/8.0.40"
	xmlns:fx="http://javafx.com/fxml/1" />
main\resources\styles\stylesheet.css

#root {
	-fx-padding: 10px;
}