Tokens now display on the right and are clickable for further information

#story[1293]
This commit is contained in:
William Muir
2017-09-28 12:08:14 +13:00
parent 705669ad07
commit 5cbd729214
6 changed files with 314 additions and 130 deletions
@@ -6,11 +6,13 @@ import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.collections.ListChangeListener; import javafx.collections.ListChangeListener;
import javafx.event.EventHandler;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
@@ -18,6 +20,7 @@ import javafx.geometry.Point3D;
import javafx.scene.Group; import javafx.scene.Group;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane; import javafx.scene.control.ScrollPane;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane; import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
@@ -40,6 +43,8 @@ import seng302.utilities.Sounds;
import seng302.visualiser.MapPreview; import seng302.visualiser.MapPreview;
import seng302.visualiser.controllers.cells.PlayerCell; import seng302.visualiser.controllers.cells.PlayerCell;
import seng302.visualiser.controllers.dialogs.BoatCustomizeController; import seng302.visualiser.controllers.dialogs.BoatCustomizeController;
import seng302.visualiser.controllers.dialogs.PopupDialogController;
import seng302.visualiser.controllers.dialogs.TokenInfoDialogController;
import seng302.visualiser.fxObjects.assets_3D.ModelFactory; import seng302.visualiser.fxObjects.assets_3D.ModelFactory;
import seng302.visualiser.fxObjects.assets_3D.ModelType; import seng302.visualiser.fxObjects.assets_3D.ModelType;
@@ -71,6 +76,7 @@ public class LobbyController implements Initializable {
private RaceState raceState; private RaceState raceState;
private JFXDialog customizationDialog; private JFXDialog customizationDialog;
private JFXDialog tokenInfoDialog;
public Color playersColor; public Color playersColor;
private Map<Integer, ClientYacht> playerBoats; private Map<Integer, ClientYacht> playerBoats;
private Double mapWidth = INITIAL_MAP_WIDTH, mapHeight = INITIAL_MAP_HEIGHT; private Double mapWidth = INITIAL_MAP_WIDTH, mapHeight = INITIAL_MAP_HEIGHT;
@@ -141,19 +147,46 @@ public class LobbyController implements Initializable {
initTokenPreviews(); initTokenPreviews();
} }
/**
* Initialises the tokens in the side panel
*/
private void initTokenPreviews() { private void initTokenPreviews() {
Group speedToken = ModelFactory.importModel(ModelType.VELOCITY_PICKUP).getAssets(); Group speedToken = ModelFactory.importModel(ModelType.VELOCITY_PICKUP).getAssets();
Group handlingToken = ModelFactory.importModel(ModelType.HANDLING_PICKUP).getAssets(); Group handlingToken = ModelFactory.importModel(ModelType.HANDLING_PICKUP).getAssets();
Group windWalkerToken = ModelFactory.importModel(ModelType.WIND_WALKER_PICKUP).getAssets(); Group windWalkerToken = ModelFactory.importModel(ModelType.WIND_WALKER_PICKUP).getAssets();
Group bumperToken = ModelFactory.importModel(ModelType.BUMPER_PICKUP).getAssets(); Group bumperToken = ModelFactory.importModel(ModelType.BUMPER_PICKUP).getAssets();
Group randomToken = ModelFactory.importModel(ModelType.RANDOM_PICKUP).getAssets(); Group randomToken = ModelFactory.importModel(ModelType.RANDOM_PICKUP).getAssets();
List<Group> tokensPreviews = new ArrayList<>(
Arrays.asList(speedToken, handlingToken, windWalkerToken, bumperToken, randomToken));
tokensPreviews.forEach((tokenPreview) -> { HashMap<Pane, Group> tokenPanes = new HashMap<>();
tokenPreview.getTransforms().addAll( tokenPanes.put(speedTokenPane, speedToken);
tokenPanes.put(handlingTokenPane, handlingToken);
tokenPanes.put(windWalkerTokenPane, windWalkerToken);
tokenPanes.put(bumperTokenPane, bumperToken);
tokenPanes.put(randomTokenPane, randomToken);
Scale hoverScale = new Scale(1.2, 1.2, 1.2);
tokenPanes.entrySet().forEach((entry) -> {
Pane thisPane = entry.getKey();
Group thisToken = entry.getValue();
thisToken.getTransforms().addAll(
new Translate(40, 50, 0), new Translate(40, 50, 0),
new Scale(13, 13, 13)); new Scale(13, 13, 13));
thisPane.setOnMouseEntered(event -> {
thisToken.getTransforms().add(hoverScale);
});
thisPane.setOnMouseExited(event -> {
thisToken.getTransforms().remove(hoverScale);
});
thisPane.setOnMouseReleased(event -> {
tokenInfoDialog = makeTokenDialog(thisPane);
tokenInfoDialog.show();
});
thisPane.getChildren().add(thisToken);
}); });
//Hacky rotations for wind and random to level it in the plane //Hacky rotations for wind and random to level it in the plane
@@ -165,13 +198,53 @@ public class LobbyController implements Initializable {
new Rotate(-90, new Point3D(1, 0, 0)), new Rotate(-90, new Point3D(1, 0, 0)),
new Translate(0, 0,1) new Translate(0, 0,1)
); );
}
speedTokenPane.getChildren().add(speedToken); private JFXDialog makeTokenDialog(Pane inducingPane) {
handlingTokenPane.getChildren().add(handlingToken); String header = "...";
windWalkerTokenPane.getChildren().add(windWalkerToken); String body = "Nothing to see here";
bumperTokenPane.getChildren().add(bumperToken); Group token = new Group();
randomTokenPane.getChildren().add(randomToken);
if (inducingPane == speedTokenPane) {
header = "Speed Boost";
body = "Increases your max velocity";
token = ModelFactory.importModel(ModelType.VELOCITY_PICKUP).getAssets();
} else if (inducingPane == handlingTokenPane) {
header = "Handling Boost";
body = "Increases your turing rate";
token = ModelFactory.importModel(ModelType.HANDLING_PICKUP).getAssets();
} else if (inducingPane == windWalkerTokenPane) {
header = "Wind Walker";
body = "The wind now rotates with you, giving you your optimal speed in all directions";
token = ModelFactory.importModel(ModelType.WIND_WALKER_PICKUP).getAssets();
} else if (inducingPane == bumperTokenPane) {
header = "Bumper";
body = "While this is active, upon hitting another boat, you will power it down for a short time";
token = ModelFactory.importModel(ModelType.BUMPER_PICKUP).getAssets();
} else if (inducingPane == randomTokenPane) {
header = "Random";
body = "A 50% chance of becoming any other token and a 50% chance of slowing your boat for a time";
token = ModelFactory.importModel(ModelType.RANDOM_PICKUP).getAssets();
}
FXMLLoader dialog = new FXMLLoader(
getClass().getResource("/views/dialogs/TokenInfoDialog.fxml"));
JFXDialog tokenInfoDialog = null;
try {
tokenInfoDialog = new JFXDialog(serverListMainStackPane, dialog.load(),
JFXDialog.DialogTransition.CENTER);
} catch (IOException e) {
e.printStackTrace();
}
TokenInfoDialogController controller = dialog.getController();
controller.setParentController(this);
controller.setHeader(header);
controller.setContent(body);
controller.setToken(token);
return tokenInfoDialog;
} }
private JFXDialog createCustomizeDialog() { private JFXDialog createCustomizeDialog() {
@@ -296,6 +369,10 @@ public class LobbyController implements Initializable {
customizationDialog.close(); customizationDialog.close();
} }
public void closeTokenInfoDialog() {
tokenInfoDialog.close();
}
public void setRoomCode(String roomCode) { public void setRoomCode(String roomCode) {
roomLabel.setText("Room: " + roomCode); roomLabel.setText("Room: " + roomCode);
} }
@@ -0,0 +1,72 @@
package seng302.visualiser.controllers.dialogs;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXTextArea;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Group;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.transform.Scale;
import javafx.scene.transform.Translate;
import seng302.utilities.Sounds;
import seng302.visualiser.controllers.LobbyController;
/**
* Created by wmu16 on 28/09/17.
*/
public class TokenInfoDialogController implements Initializable {
@FXML
private Label headerLabel;
@FXML
private TextArea contentText;
@FXML
private Pane tokenPane;
@FXML
private Button optionButton;
private LobbyController lobbyController;
@Override
public void initialize(URL location, ResourceBundle resources) {
optionButton.setOnMouseReleased(event -> {
Sounds.playButtonClick();
lobbyController.closeTokenInfoDialog();
});
contentText.setEditable(false);
}
public void setContent(String content) {
contentText.setText(content);
}
public void setHeader(String header) {
this.headerLabel.setText(header);
}
public void setToken(Group token) {
tokenPane.getChildren().clear();
token.getTransforms().addAll(
new Translate(138 / 2, 138 / 2, 0),
new Scale(20, 20, 20));
tokenPane.getChildren().add(token);
}
public void setParentController(LobbyController lobbyController) {
this.lobbyController = lobbyController;
}
}
+4
View File
@@ -66,3 +66,7 @@
/*-fx-background-size: cover;*/ /*-fx-background-size: cover;*/
-fx-background-color: dodgerblue; -fx-background-color: dodgerblue;
} }
.tokenView {
-fx-cursor: hand;
}
@@ -0,0 +1,22 @@
.text-area {
-fx-background-insets: 0;
-fx-background-color: transparent, white, transparent, white;
}
.text-area .content {
-fx-background-color: transparent, white, transparent, white;
}
.text-area:focused .content {
-fx-background-color: transparent, white, transparent, white;
}
.text-area:focused {
-fx-highlight-fill: #7ecfff;
}
.text-area .content {
-fx-padding: 10px;
-fx-text-fill: gray;
-fx-highlight-fill: #7ecfff;
}
+123 -120
View File
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import java.net.*?>
<?import javafx.scene.*?> <?import javafx.scene.*?>
<?import com.jfoenix.controls.*?> <?import com.jfoenix.controls.*?>
<?import java.lang.*?> <?import java.lang.*?>
@@ -79,9 +80,12 @@
</GridPane> </GridPane>
<GridPane GridPane.rowIndex="1"> <GridPane GridPane.rowIndex="1">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="222.0" minWidth="222.0" prefWidth="222.0" /> <ColumnConstraints hgrow="NEVER" maxWidth="-Infinity" minWidth="-Infinity"
<ColumnConstraints hgrow="SOMETIMES" /> prefWidth="115.0"/>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="350.0" minWidth="350.0" prefWidth="350.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="1.7976931348623157E308"
minWidth="337.0" prefWidth="430.0"/>
<ColumnConstraints hgrow="NEVER" maxWidth="350.0" minWidth="350.0"
prefWidth="350.0"/>
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints vgrow="SOMETIMES" /> <RowConstraints vgrow="SOMETIMES" />
@@ -106,123 +110,122 @@
<Insets bottom="15.0" left="7.0" right="7.0" top="15.0" /> <Insets bottom="15.0" left="7.0" right="7.0" top="15.0" />
</GridPane.margin> </GridPane.margin>
</AnchorPane> </AnchorPane>
<AnchorPane maxWidth="200.0" minWidth="200.0" prefHeight="370.0" prefWidth="200.0"> <GridPane prefHeight="370.0" prefWidth="189.0" vgap="5.0">
<GridPane.margin>
<Insets />
</GridPane.margin>
<children> <children>
<GridPane prefHeight="370.0" prefWidth="189.0" style="-fx-border-color: black; -fx-grid-lines-visible: true;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="309.0" AnchorPane.topAnchor="0.0"> <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Tokens"
<columnConstraints> GridPane.halignment="CENTER">
<ColumnConstraints hgrow="SOMETIMES" maxWidth="80.0" minWidth="80.0" prefWidth="80.0" /> <font>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="110.0" minWidth="110.0" prefWidth="110.0" /> <Font name="System Bold" size="18.0"/>
</columnConstraints> </font>
<rowConstraints> </Text>
<RowConstraints maxHeight="116.0" minHeight="0.0" prefHeight="40.0" vgrow="NEVER" /> <StackPane prefHeight="150.0" prefWidth="200.0"
<RowConstraints maxHeight="285.0" minHeight="-Infinity" prefHeight="60.0" vgrow="SOMETIMES" /> GridPane.rowIndex="1">
<RowConstraints maxHeight="285.0" minHeight="-Infinity" prefHeight="60.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="141.0" minHeight="-Infinity" prefHeight="60.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="285.0" minHeight="-Infinity" prefHeight="60.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="285.0" minHeight="-Infinity" prefHeight="60.0" vgrow="SOMETIMES" />
</rowConstraints>
<children> <children>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Token" GridPane.halignment="CENTER"> <Label alignment="BOTTOM_CENTER" text="Speed"
<font> StackPane.alignment="BOTTOM_CENTER">
<Font name="System Bold" size="18.0" /> <font>
</font></Text> <Font size="12.0"/>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Ability" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.valignment="CENTER"> </font>
<font> <padding>
<Font name="System Bold" size="18.0" /> <Insets bottom="5.0"/>
</font> </padding>
</Text> </Label>
<StackPane prefHeight="150.0" prefWidth="200.0" GridPane.rowIndex="1"> <Pane fx:id="speedTokenPane" prefHeight="999.0"
<children> prefWidth="200.0" style="-fx-border-color: black;"
<Label alignment="BOTTOM_CENTER" text="Speed" StackPane.alignment="BOTTOM_CENTER"> styleClass="tokenView"/>
<font>
<Font size="12.0" />
</font>
<padding>
<Insets bottom="5.0" />
</padding>
</Label>
<Pane fx:id="speedTokenPane" prefHeight="999.0" prefWidth="200.0" />
</children>
</StackPane>
<StackPane prefHeight="150.0" prefWidth="200.0" GridPane.rowIndex="2">
<children>
<Label alignment="BOTTOM_CENTER" text="Handling" StackPane.alignment="BOTTOM_CENTER">
<font>
<Font size="12.0" />
</font>
<padding>
<Insets bottom="5.0" />
</padding>
</Label>
<Pane fx:id="handlingTokenPane" prefHeight="999.0" prefWidth="200.0" />
</children>
</StackPane>
<StackPane prefHeight="150.0" prefWidth="200.0" GridPane.rowIndex="3">
<children>
<Label alignment="BOTTOM_CENTER" text="Wind Walker" StackPane.alignment="BOTTOM_CENTER">
<font>
<Font size="12.0" />
</font>
<padding>
<Insets bottom="5.0" />
</padding>
</Label>
<Pane fx:id="windWalkerTokenPane" prefHeight="999.0" prefWidth="200.0" />
</children>
</StackPane>
<StackPane prefHeight="150.0" prefWidth="200.0" GridPane.rowIndex="4">
<children>
<Label alignment="BOTTOM_CENTER" text="Bumper" StackPane.alignment="BOTTOM_CENTER">
<font>
<Font size="12.0" />
</font>
<padding>
<Insets bottom="5.0" />
</padding>
</Label>
<Pane fx:id="bumperTokenPane" prefHeight="999.0" prefWidth="200.0" />
</children>
</StackPane>
<StackPane prefHeight="150.0" prefWidth="200.0" GridPane.rowIndex="5">
<children>
<Label alignment="BOTTOM_CENTER" text="Random" StackPane.alignment="BOTTOM_CENTER">
<font>
<Font size="12.0" />
</font>
<padding>
<Insets bottom="5.0" />
</padding>
</Label>
<Pane fx:id="randomTokenPane" prefHeight="999.0" prefWidth="60.0" />
</children>
</StackPane>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Increases your speed and acceleration" textAlignment="CENTER" wrappingWidth="100.0" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="CENTER">
<GridPane.margin>
<Insets />
</GridPane.margin>
</Text>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Decreases your turning circle" textAlignment="CENTER" wrappingWidth="100.0" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="2" GridPane.valignment="CENTER">
<GridPane.margin>
<Insets />
</GridPane.margin>
</Text>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="The wind follows you at the optimal angle" textAlignment="CENTER" wrappingWidth="100.0" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="3" GridPane.valignment="CENTER">
<GridPane.margin>
<Insets />
</GridPane.margin>
</Text>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Hitting another yacht will temporarily disable it" textAlignment="CENTER" wrappingWidth="100.0" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="4" GridPane.valignment="CENTER" />
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="50/50 chance for a random token or self slow" textAlignment="CENTER" wrappingWidth="100.0" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="5" GridPane.valignment="CENTER" />
</children> </children>
<padding> </StackPane>
<Insets bottom="15.0" left="15.0" right="7.0" top="15.0" /> <StackPane prefHeight="150.0" prefWidth="200.0"
</padding> GridPane.rowIndex="2">
</GridPane> <children>
<Label alignment="BOTTOM_CENTER" text="Handling"
StackPane.alignment="BOTTOM_CENTER">
<font>
<Font size="12.0"/>
</font>
<padding>
<Insets bottom="5.0"/>
</padding>
</Label>
<Pane fx:id="handlingTokenPane" prefHeight="999.0"
prefWidth="200.0" style="-fx-border-color: black;"
styleClass="tokenView"/>
</children>
</StackPane>
<StackPane prefHeight="150.0" prefWidth="200.0"
GridPane.rowIndex="3">
<children>
<Label alignment="BOTTOM_CENTER" text="Wind Walker"
StackPane.alignment="BOTTOM_CENTER">
<font>
<Font size="12.0"/>
</font>
<padding>
<Insets bottom="5.0"/>
</padding>
</Label>
<Pane fx:id="windWalkerTokenPane" prefHeight="999.0"
prefWidth="200.0" style="-fx-border-color: black;"
styleClass="tokenView"/>
</children>
</StackPane>
<StackPane prefHeight="150.0" prefWidth="200.0"
GridPane.rowIndex="4">
<children>
<Label alignment="BOTTOM_CENTER" text="Bumper"
StackPane.alignment="BOTTOM_CENTER">
<font>
<Font size="12.0"/>
</font>
<padding>
<Insets bottom="5.0"/>
</padding>
</Label>
<Pane fx:id="bumperTokenPane" prefHeight="999.0"
prefWidth="200.0" style="-fx-border-color: black;"
styleClass="tokenView"/>
</children>
</StackPane>
<StackPane prefHeight="150.0" prefWidth="200.0"
GridPane.rowIndex="5">
<children>
<Label alignment="BOTTOM_CENTER" text="Random"
StackPane.alignment="BOTTOM_CENTER">
<font>
<Font size="12.0"/>
</font>
<padding>
<Insets bottom="5.0"/>
</padding>
</Label>
<Pane fx:id="randomTokenPane" prefHeight="999.0"
prefWidth="60.0" style="-fx-border-color: black;"
styleClass="tokenView"/>
</children>
</StackPane>
</children> </children>
</AnchorPane> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="80.0" minWidth="80.0"
prefWidth="80.0"/>
</columnConstraints>
<padding>
<Insets bottom="15.0" left="15.0" right="7.0" top="15.0"/>
</padding>
<rowConstraints>
<RowConstraints maxHeight="116.0" minHeight="0.0" prefHeight="40.0"
vgrow="NEVER"/>
<RowConstraints maxHeight="285.0" minHeight="-Infinity"
prefHeight="60.0" vgrow="SOMETIMES"/>
<RowConstraints maxHeight="285.0" minHeight="-Infinity"
prefHeight="60.0" vgrow="SOMETIMES"/>
<RowConstraints maxHeight="141.0" minHeight="-Infinity"
prefHeight="60.0" vgrow="SOMETIMES"/>
<RowConstraints maxHeight="285.0" minHeight="-Infinity"
prefHeight="60.0" vgrow="SOMETIMES"/>
<RowConstraints maxHeight="285.0" minHeight="-Infinity"
prefHeight="60.0" vgrow="SOMETIMES"/>
</rowConstraints>
</GridPane>
</children> </children>
</GridPane> </GridPane>
</children> </children>
@@ -234,10 +237,10 @@
<RowConstraints maxHeight="1.7976931348623157E308" minHeight="400.0" prefHeight="400.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="1.7976931348623157E308" minHeight="400.0" prefHeight="400.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="80.0" minHeight="80.0" prefHeight="80.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="80.0" minHeight="80.0" prefHeight="80.0" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<stylesheets>
<String fx:value="/css/Master.css" />
<String fx:value="/css/LobbyView.css" />
</stylesheets>
</GridPane> </GridPane>
</children> </children>
<stylesheets>
<URL value="@../css/Master.css"/>
<URL value="@../css/LobbyView.css"/>
</stylesheets>
</StackPane> </StackPane>
@@ -1,6 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import com.jfoenix.controls.*?>
<?import java.lang.*?>
<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import com.jfoenix.controls.JFXButton?> <?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXDialogLayout?> <?import com.jfoenix.controls.JFXDialogLayout?>
<?import java.net.URL?> <?import java.net.URL?>
@@ -9,6 +14,7 @@
<?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?> <?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?> <?import javafx.scene.layout.RowConstraints?>
<JFXDialogLayout maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" <JFXDialogLayout maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
minWidth="-Infinity" prefWidth="550.0" xmlns="http://javafx.com/javafx/8" minWidth="-Infinity" prefWidth="550.0" xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1" xmlns:fx="http://javafx.com/fxml/1"