From 06429eaf876518afc4606d4f6c08fcf9688f1635 Mon Sep 17 00:00:00 2001 From: Jannik Date: Sat, 11 Nov 2017 22:27:19 +0100 Subject: [PATCH] added jfxokaycanceldialog class * added jfxokaycanceldialog class * code clean up --- bin/.gitignore | 1 + bin/application/MainWindowController$1.class | Bin 5918 -> 5918 bytes bin/application/MainWindowController$10.class | Bin 4444 -> 2511 bytes bin/application/MainWindowController$11.class | Bin 1311 -> 1139 bytes bin/application/MainWindowController$12.class | Bin 1554 -> 1554 bytes bin/application/MainWindowController$2.class | Bin 3311 -> 3311 bytes bin/application/MainWindowController$3.class | Bin 4249 -> 4249 bytes bin/application/MainWindowController$4.class | Bin 4257 -> 4257 bytes bin/application/MainWindowController$5.class | Bin 1096 -> 1096 bytes bin/application/MainWindowController$6.class | Bin 1096 -> 1096 bytes bin/application/MainWindowController$7.class | Bin 3503 -> 3503 bytes bin/application/MainWindowController$8.class | Bin 1607 -> 1607 bytes bin/application/MainWindowController$9.class | Bin 1917 -> 1917 bytes bin/application/MainWindowController.class | Bin 51944 -> 50465 bytes src/UIElements/JFXInfoDialog.java | 38 ++++- src/UIElements/JFXOkayCancelDialog.java | 105 +++++++++++++ src/application/MainWindowController.java | 142 ++++++------------ 17 files changed, 184 insertions(+), 102 deletions(-) create mode 100644 src/UIElements/JFXOkayCancelDialog.java diff --git a/bin/.gitignore b/bin/.gitignore index 9a0bb19..25b00bb 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -2,3 +2,4 @@ /cloudControllerInstances/ /datatypes/ /UIElements/ +/EventHandlers/ diff --git a/bin/application/MainWindowController$1.class b/bin/application/MainWindowController$1.class index 1fa8041390f47dde4c998ff8677378a272325d45..4b4825e5467ed01efea513131b6faf9aed72faa5 100644 GIT binary patch delta 256 zcmWN|Jt%|$9LMqB_di*r8(b#O`b>{9$RdM5CM9Jwxr|B~Trn6e%5XY7-mZ8=oqO^w zuaTEBNEyUAcV2RNNy;RA_K)xRUOFEk5f&mj>rbkZQMrt%nsL?PtAPnMF{w_b)Wfvm z%&3o)hM3g|bMgt4VnG=ebxvAWEGbJyPlWnqnG#kgW0eZla9GD>gDN(uWs7>YX=I0H zc4=de_813ra7Y(N#5rbw69zdW$t3|d|NWMIvRrV-H93mh^F^K?3RcR4MR_!bXLETm fkD}G^YAw83jCbqi!+QC&fbVd=+=0aKX|(kZ$T3mD delta 256 zcmWN}Jt%|$9LMqB_di*r8(b#O`b>{9$RdM5CM9Jwxr|B~Trn6e%HqW1?WpGzx`({W zOQI8lfx&Rj9Vah&=@x^y{nN+yd~YouArTfLIUAl*Ez@%GRnLr?m{kjNYGYo#ENFnF z;w);2C5;hif|Pugm1IR}R&_;Mw}i^Ft|A-yW0MNDsA8KMc5v9mWsf@cY2<)r4r%3x zc8=-dgzgxp^l(NW=fue{!UdyTGRX}A*>ZDVra7*8;Ep`66e#h?FHcrU(V{$?!;87R gna8^|@L?T%T8uC2=i3G;S-?-2s&*hTo{4t;0|Sy$IRF3v diff --git a/bin/application/MainWindowController$10.class b/bin/application/MainWindowController$10.class index 9973eeca0c410ce5b4123763b38b8e4b4c442bc1..4954a841d34d949d9308894981bb8ed97d31cbc6 100644 GIT binary patch delta 1164 zcmZ`%TW=dh6#mAuzHP>> zQ#ekgE7F~ijnz5Jt(rKEaX+3>MIPg4@T^+r6T43%EpQIcQ3I`YyQJRbiK9i`(=Z_OB*f;Okh$)jRoIjT=nCM`pP(%C^!|Ocxlyj9a|uaDXQI)ZeG@9 z$(3bFAHSI>29Q&Syu-c#W*9zGA9?%2R=G@>W9!apGgh%0QvK|GEAGb}Lv%iysmq46 z-BxPq^7X8}>`d0Ix>M0zyeN=ILH!!cn0h`%ftPSy&6uM-v$(0ZvcNE}cKDF`m`76C zZ0?q|W-Z@NwMx>Ksk%k=+|-<9OIodoS-c|fs-|nSs?M8gK@2bURHda`E6Cff-iuB^ zfp#U8cbkN#83IdAdA)1jTdF&&GOhx!}`+EZRPX@p#yqII|C2BfSDY*1ChLoU7yp*gI2y(F2g*3H89Q)Vw=?<3Ky5d9| zV;>^^c!u`@Q(|-$e6wapSDfZ?y69 zhNi+hR8CU!;13Ys-=LR&ixmG3Q~Y~e<3FIlA7YXJh$X%Q$sb{p|AM#qZym~GU0VN8 zCW2VRYeaepNm%svKw=mr(l|EBw@haP%T(6~PvuV(#={qBPL=MQke~oP?O<}`9;$8J k`fu1ia?wN8gVrtv>K&~CyCWT}bkHc?K#MfJKpjEP-;(C;hyVZp literal 4444 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 O>bOBlP(yGF8h-&ARb%S_ diff --git a/bin/application/MainWindowController$12.class b/bin/application/MainWindowController$12.class index 1f4bf2b1b4cfe4d4e17fdc8c06d4b0dda1502938..ec49e0b3204b8e88fb1b88e4b733915fc9ee69e3 100644 GIT binary patch delta 31 mcmbQlGl^$|I4h&zWC_+NUJ(Wk7EuOq7BL1T7V*jTtdjvDxD2b3ariO`Kc>RWz+72aVQZD0HTKpy*x+d7WRr^-cUwH{@U+Xz9=Uzq4k#T4 LO`+}R9JBlnNzxWs delta 108 zcmV~$p$sZI Kh1AJ8CdD772^5O} diff --git a/bin/application/MainWindowController$3.class b/bin/application/MainWindowController$3.class index d21053ba8400d6b1608411c98605903c26ab5857..9e71ba9bf7ec59c1e8a6fdd803ee5d9bd6cdd9ac 100644 GIT binary patch delta 178 zcmV~$J4*rp0EN+eKL|pEmS#yr?PWf~d{7h#mYPLkbE6=*1&s|(g0%%XiF-pJIOvju zyIXr}f5E|X2H`>Ys~_~v_%*n}OGKMQ6(gn;aTVEBnLX9nSCa!hai}f{^*B&mjjG>6)I8$G XpVU3!)-&$>&AoqUc)`Osxz+X>yjmk= delta 178 zcmV~$J4*rp0EN+eKL{iQm*&8rOv|(v`9d)&FtdjWjgCU#CNw%Y3ECFqB<>A?(4b2p z?QQO@{RIcl8HR`9kABcwlR^+>AEq24&s zh+|DT(Ko01GFp-~am-9J1|5}_xr0N5@gw*UYD diff --git a/bin/application/MainWindowController$4.class b/bin/application/MainWindowController$4.class index 0a34b686aea8dc1ae870d1b0937c727f0bb88447..65c0504873eb95141383d2d6da68e55282a73118 100644 GIT binary patch delta 178 zcmV~$y-I=s0EOXm-YGtWmgc~v*)8w_+-eF61S_*NlS<1l68twcNuecL!lgNJt3`(( zoZQ-5y@iIJXA~ZV-v=S@O@^U>N?a=>w86e294N}6VkEW2k#HdnL$2lCD=_W%F@ delta 178 zcmV~$J4*rp0EN+ezbQm$aSmLZ-GY9ATTVd`2$qk^EJ_W<(m>5e7zr-YA}-B}TP`*T z($v=8>R)i^oJn{Rp1uWrG9Ls3JSDV4QV~uScY%fdlU4zVps diff --git a/bin/application/MainWindowController$5.class b/bin/application/MainWindowController$5.class index b4cf2e5a7fab12887e1cda4ce701f0bb117363f7..566f2f66591044ae325faac28f39f7325380f0e3 100644 GIT binary patch delta 27 jcmX@Xae`w*E;HlA$$8A4oKqOMn5HraGEJX+fVl$zdiw}w delta 27 jcmX@Xae`w*E;Hlg$$8A4oYNS%n5HubGR>TPfVl$zdshf< diff --git a/bin/application/MainWindowController$6.class b/bin/application/MainWindowController$6.class index 1a5b67208be0e5543202339c5471bbde69e2c397..744f32d33b3cb35623daf1a824131311ffa92f8d 100644 GIT binary patch delta 27 jcmX@Xae`w*E;Hk-$$8A4oO2ntnC3AEGA)>VfVl$ze3=M} delta 27 jcmX@Xae`w*E;Hkt$$8A4obwsDm=-VyGA){XfVl$zeDw&D diff --git a/bin/application/MainWindowController$7.class b/bin/application/MainWindowController$7.class index b669139edcf16f66bb9616677682821a88e98bb8..a6ea230af92169dd9021eec9cf0c523c9dc472ee 100644 GIT binary patch delta 68 zcmV-K0K5OM8?PI%p9=w`v!Dwr0Wqfl6auOMF9NIpH3F>wQv$C5cLJ~ghyt+ylmfB< anF6x_o&vN0uL8CJ#{#SX+XA_h{0y_#ycUT7 delta 68 zcmV-K0K5OM8?PI%p9=w|v!Dwr0Wqln6auUOF9NOrH3F{yQv$I7cLK5ihyt?!lmfH> anF6%{o&vT2uL8IL#{#YZ+XB0j{0y_(CKjat diff --git a/bin/application/MainWindowController$8.class b/bin/application/MainWindowController$8.class index 0344e7ae0ae09d187720fde7774b7645bb4d609f..ad1e31a7cd00b3f338fd3a6f2571bc0342a7c65c 100644 GIT binary patch delta 35 rcmX@kbDU>`F)QPq$tJ8hg8LbGnGQ0@Fdbr0U^>j8!gOr%M%HNn!s`mO delta 35 rcmX@kbDU>`F)QP~$tJ8hf(IFRnGQ3^Fdbn~U^>d6!gONtM%HNn!=nno diff --git a/bin/application/MainWindowController$9.class b/bin/application/MainWindowController$9.class index 3ec4eb15f6493fe44af4041012c31be7f2124fa2..a817652679c00cc37400dcb7757b8065d155f0ab 100644 GIT binary patch delta 39 vcmey%_m^*jDI4R-$!2WTqGuQsna(n3GM!`4VLH!X!gP_rn(5NyV{F?235^X2 delta 39 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 delta 18635 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 b;HHO-Ta8Wl+(R2@Y=#hRn<0(cXvqHqyb2F} diff --git a/src/UIElements/JFXInfoDialog.java b/src/UIElements/JFXInfoDialog.java index 619dc0c..a458b31 100644 --- a/src/UIElements/JFXInfoDialog.java +++ b/src/UIElements/JFXInfoDialog.java @@ -1,3 +1,24 @@ +/** + * cemu_UI + * + * Copyright 2017 <@Seil0> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + package UIElements; import com.jfoenix.controls.JFXButton; @@ -17,15 +38,24 @@ public class JFXInfoDialog { private String bodyText; private String dialogBtnStyle; private int dialogWidth; - private int dialogHeigh; + private int dialogHeight; private Pane pane; - public JFXInfoDialog(String headingText, String bodyText, String dialogBtnStyle, int dialogWidth, int dialogHeigh, Pane pane) { + /** + * Creates a new JFoenix Dialog to show some information + * @param headingText Heading Text, just the heading + * @param bodyText body Text, all other text belongs here + * @param dialogBtnStyle Style of the okay button + * @param dialogWidth dialog width + * @param dialogHeight dialog height + * @param pane pane to which the dialog belongs + */ + public JFXInfoDialog(String headingText, String bodyText, String dialogBtnStyle, int dialogWidth, int dialogHeight, Pane pane) { this.headingText = headingText; this.bodyText = bodyText; this.dialogBtnStyle = dialogBtnStyle; this.dialogWidth = dialogWidth; - this.dialogHeigh = dialogHeigh; + this.dialogHeight = dialogHeight; this.pane = pane; } @@ -33,7 +63,7 @@ public class JFXInfoDialog { JFXDialogLayout content = new JFXDialogLayout(); content.setHeading(new Text(headingText)); content.setBody(new Text(bodyText)); - content.setPrefSize(dialogWidth, dialogHeigh); + content.setPrefSize(dialogWidth, dialogHeight); StackPane stackPane = new StackPane(); stackPane.autosize(); JFXDialog dialog = new JFXDialog(stackPane, content, JFXDialog.DialogTransition.LEFT, true); diff --git a/src/UIElements/JFXOkayCancelDialog.java b/src/UIElements/JFXOkayCancelDialog.java new file mode 100644 index 0000000..7a5c281 --- /dev/null +++ b/src/UIElements/JFXOkayCancelDialog.java @@ -0,0 +1,105 @@ +/** + * cemu_UI + * + * Copyright 2017 <@Seil0> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + + +package UIElements; + +import com.jfoenix.controls.JFXButton; +import com.jfoenix.controls.JFXDialog; +import com.jfoenix.controls.JFXDialogLayout; + +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.control.Label; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.Pane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; + +public class JFXOkayCancelDialog { + + private String headingText; + private String bodyText; + private String dialogBtnStyle; + private int dialogWidth; + private int dialogHeight; + private EventHandler okayAction; + private EventHandler cancelAction; + private Pane pane; + + /** + * Creates a new JFoenix Dialog to show some information with okay and cancel option + * @param headingText Heading Text, just the heading + * @param bodyText body Text, all other text belongs here + * @param dialogBtnStyle Style of the okay button + * @param dialogWidth dialog width + * @param dialogHeight dialog height + * @param okayAction action which is performed if the okay button is clicked + * @param cancelAction action which is performed if the cancel button is clicked + * @param pane pane to which the dialog belongs + */ + public JFXOkayCancelDialog(String headingText, String bodyText, String dialogBtnStyle, int dialogWidth, + int dialogHeight, EventHandler okayAction, EventHandler cancelAction, Pane pane) { + this.headingText = headingText; + this.bodyText = bodyText; + this.dialogBtnStyle = dialogBtnStyle; + this.dialogWidth = dialogWidth; + this.dialogHeight = dialogHeight; + this.okayAction = okayAction; + this.cancelAction = cancelAction; + this.pane = pane; + } + + public void show() { + JFXDialogLayout content= new JFXDialogLayout(); + content.setHeading(new Text(headingText)); + content.setBody(new Text(bodyText)); + StackPane stackPane = new StackPane(); + stackPane.autosize(); + JFXDialog dialog = new JFXDialog(stackPane, content, JFXDialog.DialogTransition.LEFT, true); + JFXButton okayBtn = new JFXButton("Okay"); + okayBtn.addEventHandler(ActionEvent.ACTION, okayAction); + okayBtn.addEventHandler(ActionEvent.ACTION, (e)-> { + dialog.close(); + }); + okayBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED); + okayBtn.setPrefHeight(32); + okayBtn.setStyle(dialogBtnStyle); + JFXButton cancelBtn = new JFXButton("Cancel"); + cancelBtn.addEventHandler(ActionEvent.ACTION, cancelAction); + cancelBtn.addEventHandler(ActionEvent.ACTION, (e)-> { + dialog.close(); + }); + cancelBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED); + cancelBtn.setPrefHeight(32); + cancelBtn.setStyle(dialogBtnStyle); + Label placeholder = new Label(); + placeholder.setPrefSize(15, 10); + content.setActions(cancelBtn, placeholder, okayBtn); + content.setPrefSize(dialogWidth, dialogHeight); + pane.getChildren().add(stackPane); + AnchorPane.setTopAnchor(stackPane, (pane.getHeight()-content.getPrefHeight())/2); + AnchorPane.setLeftAnchor(stackPane, (pane.getWidth()-content.getPrefWidth())/2); + dialog.show(); + } + +} + diff --git a/src/application/MainWindowController.java b/src/application/MainWindowController.java index 1d55d73..6dce3a0 100644 --- a/src/application/MainWindowController.java +++ b/src/application/MainWindowController.java @@ -53,8 +53,6 @@ import org.apache.logging.log4j.Logger; import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXColorPicker; -import com.jfoenix.controls.JFXDialog; -import com.jfoenix.controls.JFXDialogLayout; import com.jfoenix.controls.JFXHamburger; import com.jfoenix.controls.JFXTextField; import com.jfoenix.controls.JFXToggleButton; @@ -63,6 +61,7 @@ import com.jfoenix.controls.JFXTreeTableView; import com.jfoenix.transitions.hamburger.HamburgerBackArrowBasicTransition; import UIElements.JFXInfoDialog; +import UIElements.JFXOkayCancelDialog; import datatypes.CourseTableDataType; import datatypes.SmmdbApiDataType; import datatypes.UIROMDataType; @@ -97,7 +96,6 @@ import javafx.scene.input.MouseEvent; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; -import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.paint.Paint; @@ -953,78 +951,45 @@ public class MainWindowController { if(cloudSync) { cloudSync = false; } else { + //TODO this new dialog needs testing! - JFXDialogLayout content= new JFXDialogLayout(); - content.setHeading(new Text("activate cloud savegame sync (beta)")); - content.setBody(new Text("You just activate the cloud savegame sync function of cemu_UI, \nwhich is currently in beta. Are you sure you want to do this?")); - StackPane stackPane = new StackPane(); - stackPane.autosize(); - JFXDialog betaDialog = new JFXDialog(stackPane, content, JFXDialog.DialogTransition.LEFT, true); - JFXButton okayBtn = new JFXButton("Okay"); - okayBtn.setOnAction(new EventHandler(){ - @Override - public void handle(ActionEvent event){ - cloudSync = true; - //TODO rework for other cloud services - cloudService = "GoogleDrive"; - if (main.cloudController.initializeConnection(getCloudService(), getCemuPath())) { - main.cloudController.sync(getCloudService(), getCemuPath()); - saveSettings(); - } else { - cloudSyncToggleBtn.setSelected(false); - - //cloud sync init error dialog - JFXDialogLayout content= new JFXDialogLayout(); - content.setHeading(new Text("Error while initializing cloud sync!")); - content.setBody(new Text("There was some truble initializing the cloud sync." - + "\nPlease upload the app.log (which can be found in the cemu_UI directory)" - + "\nto \"https://github.com/Seil0/cemu_UI/issues\" so we can fix this.")); - content.setPrefSize(450, 170); - StackPane stackPane = new StackPane(); - stackPane.autosize(); - JFXDialog dialog =new JFXDialog(stackPane, content, JFXDialog.DialogTransition.LEFT, true); - JFXButton button=new JFXButton("Okay"); - button.setOnAction(new EventHandler(){ - @Override - public void handle(ActionEvent event){ - dialog.close(); - } - }); - button.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED); - button.setPrefHeight(32); - button.setStyle(dialogBtnStyle); - content.setActions(button); - main.pane.getChildren().add(stackPane); - AnchorPane.setTopAnchor(stackPane, (main.pane.getHeight()-content.getPrefHeight())/2); - AnchorPane.setLeftAnchor(stackPane, (main.pane.getWidth()-content.getPrefWidth())/2); - dialog.show(); - } - - betaDialog.close(); - } - }); - JFXButton cancelBtn = new JFXButton("Cancel"); - cancelBtn.setOnAction(new EventHandler(){ - @Override - public void handle(ActionEvent event){ - cloudSyncToggleBtn.setSelected(false); - betaDialog.close(); - } - }); - Label placeholder = new Label(); - placeholder.setPrefSize(15, 10); - okayBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED); - cancelBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED); - okayBtn.setPrefHeight(32); - cancelBtn.setPrefHeight(32); - okayBtn.setStyle(dialogBtnStyle); - cancelBtn.setStyle(dialogBtnStyle); - content.setActions(cancelBtn, placeholder, okayBtn); - content.setPrefSize(419, 140); - main.pane.getChildren().add(stackPane); - AnchorPane.setTopAnchor(stackPane, (main.pane.getHeight()-content.getPrefHeight())/2); - AnchorPane.setLeftAnchor(stackPane, (main.pane.getWidth()-content.getPrefWidth())/2); - betaDialog.show(); + String headingText = "activate cloud savegame sync (beta)"; + String bodyText = "You just activate the cloud savegame sync function of cemu_UI, " + + "\nwhich is currently in beta. Are you sure you want to do this?"; + + EventHandler okayAction = new EventHandler(){ + @Override + public void handle(ActionEvent event){ + cloudSync = true; + //TODO rework for other cloud services + cloudService = "GoogleDrive"; + if (main.cloudController.initializeConnection(getCloudService(), getCemuPath())) { + main.cloudController.sync(getCloudService(), getCemuPath()); + saveSettings(); + } else { + cloudSyncToggleBtn.setSelected(false); + + //cloud sync init error dialog + String headingText = "Error while initializing cloud sync!"; + String bodyText = "There was some truble adding your game." + + "\nPlease upload the app.log (which can be found in the cemu_UI directory)" + + "\nto \"https://github.com/Seil0/cemu_UI/issues\" so we can fix this."; + JFXInfoDialog cloudSyncErrorDialog = new JFXInfoDialog(headingText, bodyText, dialogBtnStyle, 450, 170, main.pane); + cloudSyncErrorDialog.show(); + } + } + }; + + EventHandler cancelAction = new EventHandler(){ + @Override + public void handle(ActionEvent event){ + cloudSyncToggleBtn.setSelected(false); + } + }; + + JFXOkayCancelDialog cloudSyncErrorDialog = new JFXOkayCancelDialog(headingText, bodyText, dialogBtnStyle, + 419, 140, okayAction, cancelAction, main.pane); + cloudSyncErrorDialog.show(); } } @@ -1124,30 +1089,11 @@ public class MainWindowController { LOGGER.info("No parameter set!"); //addGame error dialog - JFXDialogLayout content= new JFXDialogLayout(); - content.setHeading(new Text("Error while adding a new Game!")); - content.setBody(new Text("There was some truble adding your game." - + "\nOne of the needed values was empty, please try again to add your game.")); - content.setPrefSize(450, 170); - StackPane stackPane = new StackPane(); - stackPane.autosize(); - JFXDialog errorDialog =new JFXDialog(stackPane, content, JFXDialog.DialogTransition.LEFT, true); - JFXButton button=new JFXButton("Okay"); - button.setOnAction(new EventHandler(){ - @Override - public void handle(ActionEvent event){ - errorDialog.close(); - } - }); - button.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED); - button.setPrefHeight(32); - button.setStyle(dialogBtnStyle); - content.setActions(button); - main.pane.getChildren().add(stackPane); - AnchorPane.setTopAnchor(stackPane, (main.pane.getHeight()-content.getPrefHeight())/2); - AnchorPane.setLeftAnchor(stackPane, (main.pane.getWidth()-content.getPrefWidth())/2); - errorDialog.show(); - + String headingText = "Error while adding a new Game!"; + String bodyText = "There was some truble adding your game." + + "\nOne of the needed values was empty, please try again to add your game."; + JFXInfoDialog addGameErrorDialog = new JFXInfoDialog(headingText, bodyText, dialogBtnStyle, 450, 170, main.pane); + addGameErrorDialog.show(); } else { coverName = new File(coverPath).getName(); try {