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