- Added documentation to controllers

tags : #story[1245]
This commit is contained in:
Alistair McIntyre
2017-09-12 16:54:40 +12:00
parent 9dad88e56a
commit 7e9e96c091
13 changed files with 82 additions and 120 deletions
@@ -109,6 +109,9 @@ public class LobbyController implements Initializable {
initMapPreview(); initMapPreview();
} }
/**
*
*/
private void refreshMapView(){ private void refreshMapView(){
RaceXMLData raceData = ViewManager.getInstance().getGameClient().getCourseData(); RaceXMLData raceData = ViewManager.getInstance().getGameClient().getCourseData();
List<Limit> border = raceData.getCourseLimit(); List<Limit> border = raceData.getCourseLimit();
@@ -122,12 +125,8 @@ public class LobbyController implements Initializable {
gameView.updateCourse(marks, corners); gameView.updateCourse(marks, corners);
} }
private void getPlayerColors() {
}
/** /**
* * Initializes a top down preview of the race course map.
*/ */
private void initMapPreview() { private void initMapPreview() {
gameView = new GameView(); gameView = new GameView();
@@ -163,7 +162,7 @@ public class LobbyController implements Initializable {
} }
/** /**
* * Refreshes the list of players and their boats, as a series of VBox PlayerCell objects.
*/ */
private void refreshPlayerList() { private void refreshPlayerList() {
playerListVBox.getChildren().clear(); playerListVBox.getChildren().clear();
@@ -192,17 +191,11 @@ public class LobbyController implements Initializable {
} }
} }
/**
*
*/
private void leaveLobby() { private void leaveLobby() {
ViewManager.getInstance().getGameClient().stopGame(); ViewManager.getInstance().getGameClient().stopGame();
ViewManager.getInstance().goToStartView(); ViewManager.getInstance().goToStartView();
} }
/**
*
*/
public void disableReadyButton() { public void disableReadyButton() {
this.beginRaceButton.setDisable(true); this.beginRaceButton.setDisable(true);
this.beginRaceButton.setText("Waiting for host..."); this.beginRaceButton.setText("Waiting for host...");
@@ -18,7 +18,6 @@ import javafx.geometry.Pos;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane; import javafx.scene.control.ScrollPane;
import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCode;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -57,10 +56,14 @@ public class ServerListController implements Initializable, ServerListenerDelega
private Label noServersFound; private Label noServersFound;
private Logger logger = LoggerFactory.getLogger(ServerListController.class); private Logger logger = LoggerFactory.getLogger(ServerListController.class);
// TODO: 12/09/17 ajm412: break this method down, its way too long.
@Override
public void initialize(URL location, ResourceBundle resources) { public void initialize(URL location, ResourceBundle resources) {
serverListVBox.minWidthProperty().bind(serverListScrollPane.widthProperty()); serverListVBox.minWidthProperty().bind(serverListScrollPane.widthProperty());
// Set Event Bindings // Set Event Bindings
connectButton.setOnMouseEntered(event -> Sounds.playHoverSound());
serverListHostButton.setOnMouseEntered(event -> Sounds.playHoverSound());
connectButton.setOnMouseReleased(event -> { connectButton.setOnMouseReleased(event -> {
attemptToDirectConnect(); attemptToDirectConnect();
Sounds.playButtonClick(); Sounds.playButtonClick();
@@ -126,7 +129,7 @@ public class ServerListController implements Initializable, ServerListenerDelega
} }
/** /**
* * Validates the connection and attempts to connect to a given hostname and port number.
*/ */
private void attemptToDirectConnect() { private void attemptToDirectConnect() {
if (validateDirectConnection(serverHostName.getText(), serverPortNumber.getText())) { if (validateDirectConnection(serverHostName.getText(), serverPortNumber.getText())) {
@@ -135,10 +138,10 @@ public class ServerListController implements Initializable, ServerListenerDelega
} }
/** /**
* * Checks if the hostName and portNumber are valid values to connect to.
* @param hostName * @param hostName host name to check.
* @param portNumber * @param portNumber port number to check
* @return * @return boolean value if host and port number are valid values
*/ */
private Boolean validateDirectConnection(String hostName, String portNumber) { private Boolean validateDirectConnection(String hostName, String portNumber) {
Boolean hostNameValid = ValidationTools.validateTextField(serverHostName); Boolean hostNameValid = ValidationTools.validateTextField(serverHostName);
@@ -148,7 +151,7 @@ public class ServerListController implements Initializable, ServerListenerDelega
} }
/** /**
* * Connects the user to a lobby via the Direct Connect form.
*/ */
private void DirectConnect() { private void DirectConnect() {
Sounds.playButtonClick(); Sounds.playButtonClick();
@@ -156,8 +159,8 @@ public class ServerListController implements Initializable, ServerListenerDelega
} }
/** /**
* * Refreshes the list of available servers.
* @param servers * @param servers A list of ServerDescription objects showing available servers.
*/ */
private void refreshServers(List<ServerDescription> servers) { private void refreshServers(List<ServerDescription> servers) {
serverListVBox.getChildren().clear(); serverListVBox.getChildren().clear();
@@ -184,11 +187,6 @@ public class ServerListController implements Initializable, ServerListenerDelega
} }
} }
public void playButtonHoverSound(MouseEvent mouseEvent) {
Sounds.playHoverSound();
}
@Override @Override
public void serverRemoved(List<ServerDescription> servers) { public void serverRemoved(List<ServerDescription> servers) {
Platform.runLater(() -> refreshServers(servers)); Platform.runLater(() -> refreshServers(servers));
@@ -5,15 +5,11 @@ import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.List; import java.util.List;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.effect.DropShadow;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import seng302.gameServer.ServerDescription; import seng302.gameServer.ServerDescription;
@@ -34,20 +30,21 @@ public class StartScreenController implements Initializable{
private List<ServerDescription> servers; private List<ServerDescription> servers;
private GameClient gameClient; private GameClient gameClient;
/** public void initialize(URL location, ResourceBundle resources) {
* startBtn.setOnMousePressed(event -> {
*/ startBtn.setText("LOADING...");
private void setInitialDropShadow() { Sounds.playButtonClick();
DropShadow dropShadow = new DropShadow(); });
dropShadow.setRadius(10.0);
dropShadow.setOffsetX(3.0); startBtn.setOnMouseReleased(event -> goToServerBrowser());
dropShadow.setOffsetY(4.0); startBtn.setOnMouseEntered(event -> Sounds.playHoverSound());
dropShadow.setColor(Color.color(0, 0, 0, 0.5));
headText.setEffect(dropShadow); preloadServerListView();
} }
/** /**
* * Preloads the server list view to reduce load time between start screen and server list screen.
*/ */
private void preloadServerListView(){ private void preloadServerListView(){
try { try {
@@ -60,7 +57,7 @@ public class StartScreenController implements Initializable{
} }
/** /**
* * Changes the view to the Server Browser.
*/ */
private void goToServerBrowser() { private void goToServerBrowser() {
try { try {
@@ -70,40 +67,4 @@ public class StartScreenController implements Initializable{
} }
} }
public void initialize(URL location, ResourceBundle resources) {
startBtn.setOnMousePressed(event -> {
startBtn.setText("LOADING...");
Sounds.playButtonClick();
});
startBtn.setOnMouseReleased(event -> goToServerBrowser());
setInitialDropShadow();
preloadServerListView();
}
public void toggleMusic(ActionEvent actionEvent) {
Sounds.toggleMuteMusic();
Sounds.playButtonClick();
if (Sounds.isMusicMuted()) {
// muteMusicButton.setText("UnMute Music");
} else {
// muteMusicButton.setText("Mute Music");
}
}
public void toggleSounds(ActionEvent actionEvent) {
Sounds.toggleMuteEffects();
Sounds.playButtonClick();
if (Sounds.isSoundEffectsMuted()) {
// muteSoundsButton.setText("UnMute Sounds");
} else {
// muteSoundsButton.setText("Mute Sounds");
}
}
public void playButtonHoverSound(MouseEvent mouseEvent) {
Sounds.playHoverSound();
}
} }
@@ -105,6 +105,12 @@ public class ViewManager {
}); });
} }
/**
* Sets the decorator when a new one is created (and ideally the old one destroyed)
* Also allows injection of buttons into the decorator for custom functions.
*
* @param newDecorator The new JFXDecorator to handle the game window.
*/
private void setDecorator(JFXDecorator newDecorator) { private void setDecorator(JFXDecorator newDecorator) {
decorator = newDecorator; decorator = newDecorator;
@@ -152,6 +158,9 @@ public class ViewManager {
} }
/**
* Determines if a PC has compatibility with the bonjour protocol for server detection.
*/
private void checkCompatibility() { private void checkCompatibility() {
if (BonjourInstallChecker.isBonjourSupported()) { if (BonjourInstallChecker.isBonjourSupported()) {
BonjourInstallChecker.openInstallUrl(); BonjourInstallChecker.openInstallUrl();
@@ -209,6 +218,11 @@ public class ViewManager {
return playerList; return playerList;
} }
/**
* Change the view to the Lobby Screen
* @param disableReadyButton Boolean value so that clients can't try start a game.
* @return A LobbyController object for the Lobby Screen.
*/
public LobbyController goToLobby(Boolean disableReadyButton) { public LobbyController goToLobby(Boolean disableReadyButton) {
FXMLLoader loader = loadFxml("/views/LobbyView.fxml"); FXMLLoader loader = loadFxml("/views/LobbyView.fxml");
@@ -226,6 +240,11 @@ public class ViewManager {
return loader.getController(); return loader.getController();
} }
/**
* Sets up the view for the race. Creating a new decorator and destroying the old one.
* @return A RaceViewController for the race view screen.
*/
public RaceViewController loadRaceView() { public RaceViewController loadRaceView() {
FXMLLoader loader = loadFxml("/views/RaceView.fxml"); FXMLLoader loader = loadFxml("/views/RaceView.fxml");
@@ -277,6 +296,7 @@ public class ViewManager {
return loader.getController(); return loader.getController();
} }
// TODO: 12/09/17 ajm412: Why is this here? is there no better way we can do this? Ideally inside the LobbyController.
public JFXDialog loadCustomizationDialog(StackPane parent, LobbyController lobbyController, public JFXDialog loadCustomizationDialog(StackPane parent, LobbyController lobbyController,
Color playerColor, String name) { Color playerColor, String name) {
FXMLLoader dialog = loadFxml("/views/dialogs/BoatCustomizeDialog.fxml"); FXMLLoader dialog = loadFxml("/views/dialogs/BoatCustomizeDialog.fxml");
@@ -3,11 +3,9 @@ package seng302.visualiser.controllers.cells;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.Group; import javafx.scene.Group;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane; import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import seng302.utilities.Sounds;
import seng302.visualiser.fxObjects.assets_3D.BoatMeshType; import seng302.visualiser.fxObjects.assets_3D.BoatMeshType;
import seng302.visualiser.fxObjects.assets_3D.BoatModel; import seng302.visualiser.fxObjects.assets_3D.BoatModel;
import seng302.visualiser.fxObjects.assets_3D.ModelFactory; import seng302.visualiser.fxObjects.assets_3D.ModelFactory;
@@ -34,12 +32,13 @@ public class PlayerCell {
} }
public void initialize() { public void initialize() {
// Set Player Name
playerName.setText(name); playerName.setText(name);
// Add Rotating Boat to Player Cell with players color on it.
Group group = new Group(); Group group = new Group();
boatPane.getChildren().add(group); boatPane.getChildren().add(group);
BoatModel bo = ModelFactory.boatIconView(BoatMeshType.DINGHY, this.boatColor); BoatModel bo = ModelFactory.boatIconView(BoatMeshType.DINGHY, this.boatColor);
group.getChildren().add(bo.getAssets()); group.getChildren().add(bo.getAssets());
} }
public Integer getPlayerId() { public Integer getPlayerId() {
@@ -53,8 +52,4 @@ public class PlayerCell {
public Color getBoatColor() { public Color getBoatColor() {
return boatColor; return boatColor;
} }
public void playButtonHoverSound(MouseEvent mouseEvent) {
Sounds.playHoverSound();
}
} }
@@ -1,27 +1,15 @@
package seng302.visualiser.controllers.cells; package seng302.visualiser.controllers.cells;
import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXDecorator;
import com.sun.org.apache.bcel.internal.classfile.Unknown;
import java.io.IOException;
import java.net.InetAddress;
import java.net.URL; import java.net.URL;
import java.net.UnknownHostException;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import com.jfoenix.controls.JFXTextField;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.effect.DropShadow;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane; import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color; import javafx.scene.layout.VBox;
import seng302.gameServer.ServerDescription; import seng302.gameServer.ServerDescription;
import seng302.utilities.Sounds; import seng302.utilities.Sounds;
import seng302.visualiser.GameClient;
import seng302.visualiser.controllers.ViewManager; import seng302.visualiser.controllers.ViewManager;
public class ServerCell implements Initializable { public class ServerCell implements Initializable {
@@ -29,6 +17,8 @@ public class ServerCell implements Initializable {
//--------FXML BEGIN--------// //--------FXML BEGIN--------//
//Layout //Layout
@FXML @FXML
private VBox serverCellVBox;
@FXML
private GridPane serverListCell; private GridPane serverListCell;
//Server Information //Server Information
@FXML @FXML
@@ -66,21 +56,21 @@ public class ServerCell implements Initializable {
serverPlayerCount.setText(currPlayerCount); serverPlayerCount.setText(currPlayerCount);
mapName.setText(mapNameString); mapName.setText(mapNameString);
serverCellVBox.setOnMouseEntered(event -> Sounds.playHoverSound());
serverConnButton.setOnMouseReleased(event -> { serverConnButton.setOnMouseReleased(event -> {
Sounds.playButtonClick(); Sounds.playButtonClick();
joinServer(); joinServer();
}); });
} }
/** /**
* * Attempts to connect to the chosen server using the button on the serverCell.
*/ */
private void joinServer() { private void joinServer() {
System.out.println("Connecting to " + serverName.getText()); System.out.println("Connecting to " + serverName.getText());
ViewManager.getInstance().getGameClient().runAsClient(hostName, portNumber); ViewManager.getInstance().getGameClient().runAsClient(hostName, portNumber);
} }
public void playButtonHoverSound(MouseEvent mouseEvent) {
Sounds.playHoverSound();
}
} }
@@ -4,17 +4,15 @@ import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXColorPicker; import com.jfoenix.controls.JFXColorPicker;
import com.jfoenix.controls.JFXTextField; import com.jfoenix.controls.JFXTextField;
import com.jfoenix.validation.RequiredFieldValidator; import com.jfoenix.validation.RequiredFieldValidator;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.stage.Stage;
import seng302.gameServer.messages.CustomizeRequestType; import seng302.gameServer.messages.CustomizeRequestType;
import seng302.utilities.Sounds; import seng302.utilities.Sounds;
import seng302.visualiser.ClientToServerThread; import seng302.visualiser.ClientToServerThread;
import java.net.URL;
import java.util.ResourceBundle;
import seng302.visualiser.controllers.LobbyController; import seng302.visualiser.controllers.LobbyController;
import seng302.visualiser.validators.FieldLengthValidator; import seng302.visualiser.validators.FieldLengthValidator;
import seng302.visualiser.validators.ValidationTools; import seng302.visualiser.validators.ValidationTools;
@@ -56,7 +54,7 @@ public class BoatCustomizeController implements Initializable{
} }
/** /**
* * Attempts to submit a valid customization packet for boat name and boat color.
*/ */
private void submitCustomization() { private void submitCustomization() {
@@ -4,6 +4,8 @@ import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXSlider; import com.jfoenix.controls.JFXSlider;
import com.jfoenix.controls.JFXTextField; import com.jfoenix.controls.JFXTextField;
import com.jfoenix.validation.RequiredFieldValidator; import com.jfoenix.validation.RequiredFieldValidator;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.control.Label; import javafx.scene.control.Label;
@@ -12,9 +14,6 @@ import seng302.gameServer.ServerDescription;
import seng302.utilities.Sounds; import seng302.utilities.Sounds;
import seng302.visualiser.controllers.ViewManager; import seng302.visualiser.controllers.ViewManager;
import seng302.visualiser.validators.FieldLengthValidator; import seng302.visualiser.validators.FieldLengthValidator;
import java.net.URL;
import java.util.ResourceBundle;
import seng302.visualiser.validators.ValidationTools; import seng302.visualiser.validators.ValidationTools;
public class ServerCreationController implements Initializable { public class ServerCreationController implements Initializable {
@@ -51,7 +50,7 @@ public class ServerCreationController implements Initializable {
} }
/** /**
* * Validates that a server has a valid name and creates the server.
*/ */
private void validateServerSettings() { private void validateServerSettings() {
submitBtn.setText("CREATING..."); submitBtn.setText("CREATING...");
@@ -63,7 +62,7 @@ public class ServerCreationController implements Initializable {
} }
/** /**
* * Creates a server with a given set of details.
*/ */
private void createServer() { private void createServer() {
ServerDescription serverDescription = ViewManager.getInstance().getGameClient() ServerDescription serverDescription = ViewManager.getInstance().getGameClient()
@@ -75,7 +74,7 @@ public class ServerCreationController implements Initializable {
} }
/** /**
* * Updates a label as the user slides along the max players slider.
*/ */
private void updateMaxPlayerLabel() { private void updateMaxPlayerLabel() {
maxPlayersSlider.setValue(Math.floor(maxPlayersSlider.getValue())); maxPlayersSlider.setValue(Math.floor(maxPlayersSlider.getValue()));
+1
View File
@@ -13,6 +13,7 @@
-fx-pp-dropshadow-light: dropshadow(gaussian, rgba(0, 0, 0, 0.1), 10.0, 0.2, 3, 4); -fx-pp-dropshadow-light: dropshadow(gaussian, rgba(0, 0, 0, 0.1), 10.0, 0.2, 3, 4);
-fx-pp-dropshadow-dark: dropshadow(gaussian, rgba(0, 0, 0, 0.3), 10.0, 0.2, 5, 6); -fx-pp-dropshadow-dark: dropshadow(gaussian, rgba(0, 0, 0, 0.3), 10.0, 0.2, 5, 6);
-fx-pp-dropshadow-headers: dropshadow(gaussian, rgba(0, 0, 0, 0.5), 10.0, 0.2, 3, 4);
} }
/*GridPane .jfx-button {*/ /*GridPane .jfx-button {*/
@@ -22,4 +22,5 @@
-fx-background-color: transparent; -fx-background-color: transparent;
-fx-font-size: 80px; -fx-font-size: 80px;
-fx-text-fill: -fx-pp-light-text-color; -fx-text-fill: -fx-pp-light-text-color;
-fx-effect: -fx-pp-dropshadow-headers;
} }
+5 -2
View File
@@ -18,7 +18,10 @@
<children> <children>
<GridPane fx:id="connectGridPane" GridPane.rowIndex="2"> <GridPane fx:id="connectGridPane" GridPane.rowIndex="2">
<children> <children>
<JFXButton fx:id="connectButton" buttonType="RAISED" onMouseEntered="#playButtonHoverSound" prefHeight="45.0" prefWidth="220.0" ripplerFill="#3493e3" text="CONNECT" textFill="WHITE" GridPane.columnIndex="5" GridPane.halignment="RIGHT" GridPane.valignment="CENTER"> <JFXButton fx:id="connectButton" buttonType="RAISED" prefHeight="45.0"
prefWidth="220.0" ripplerFill="#3493e3" text="CONNECT" textFill="WHITE"
GridPane.columnIndex="5" GridPane.halignment="RIGHT"
GridPane.valignment="CENTER">
<GridPane.margin> <GridPane.margin>
<Insets right="50.0" /> <Insets right="50.0" />
</GridPane.margin> </GridPane.margin>
@@ -74,7 +77,7 @@
</padding> </padding>
</Label> </Label>
<JFXButton id="hostButton" fx:id="serverListHostButton" buttonType="RAISED" <JFXButton id="hostButton" fx:id="serverListHostButton" buttonType="RAISED"
onMouseEntered="#playButtonHoverSound" prefHeight="45.0" prefWidth="220.0" prefHeight="45.0" prefWidth="220.0"
text="HOST" GridPane.columnIndex="1" GridPane.halignment="RIGHT" text="HOST" GridPane.columnIndex="1" GridPane.halignment="RIGHT"
GridPane.valignment="CENTER"> GridPane.valignment="CENTER">
<GridPane.margin> <GridPane.margin>
@@ -26,7 +26,8 @@
<Insets bottom="150.0" /> <Insets bottom="150.0" />
</StackPane.margin> </StackPane.margin>
</Label> </Label>
<JFXButton fx:id="startBtn" buttonType="RAISED" onMouseEntered="#playButtonHoverSound" prefHeight="80.0" prefWidth="337.0" text="START"> <JFXButton fx:id="startBtn" buttonType="RAISED" prefHeight="80.0" prefWidth="337.0"
text="START">
<font> <font>
<Font size="20.0" /> <Font size="20.0" />
</font> </font>
@@ -9,7 +9,9 @@
<?import javafx.scene.layout.RowConstraints?> <?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?> <?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?> <?import javafx.scene.text.Font?>
<VBox fx:id="serverCellVBox" maxHeight="-Infinity" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" onMouseEntered="#playButtonHoverSound" prefHeight="95.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> <VBox fx:id="serverCellVBox" maxHeight="-Infinity" maxWidth="1.7976931348623157E308"
minHeight="-Infinity" minWidth="-Infinity" prefHeight="95.0" prefWidth="900.0"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<stylesheets> <stylesheets>
<String fx:value="/css/Master.css"/> <String fx:value="/css/Master.css"/>
<String fx:value="/css/cells/ServerCell.css" /> <String fx:value="/css/cells/ServerCell.css" />