From d135c296129b657654b7574b934cc08dd42b4a38 Mon Sep 17 00:00:00 2001 From: Michaeliaaa Date: Mon, 31 Aug 2020 23:48:41 +0800 Subject: [PATCH 1/2] Save working GUI --- src/main/java/duke/CommandHandler.java | 31 ++++-- src/main/java/duke/DialogBox.java | 52 +++++---- src/main/java/duke/Duke.java | 136 +++--------------------- src/main/java/duke/DukeException.java | 4 +- src/main/java/duke/Launcher.java | 2 +- src/main/java/duke/Main.java | 31 ++++++ src/main/java/duke/MainWindow.java | 51 +++++++++ src/main/java/duke/Parser.java | 62 +++++------ src/main/java/duke/TaskList.java | 25 +++-- src/main/java/duke/Ui.java | 58 ++++++++-- src/main/resources/view/DialogBox.fxml | 16 +++ src/main/resources/view/MainWindow.fxml | 19 ++++ 12 files changed, 282 insertions(+), 205 deletions(-) create mode 100644 src/main/java/duke/Main.java create mode 100644 src/main/java/duke/MainWindow.java create mode 100644 src/main/resources/view/DialogBox.fxml create mode 100644 src/main/resources/view/MainWindow.fxml diff --git a/src/main/java/duke/CommandHandler.java b/src/main/java/duke/CommandHandler.java index 4bb41a535b..0c11bc62d4 100644 --- a/src/main/java/duke/CommandHandler.java +++ b/src/main/java/duke/CommandHandler.java @@ -32,19 +32,22 @@ public CommandHandler(String input, DukeCommandType commandType) { * @param tasks * @throws DukeException */ - public static void handleCommands(String input, DukeCommandType commandType, TaskList tasks) throws DukeException { + public static String handleCommands(String input, DukeCommandType commandType, TaskList tasks) throws DukeException { String task; + String output = ""; switch (commandType) { case TODO: try { task = input.split("todo ")[1]; Task newTask = new ToDos(task); tasks.addTask(newTask); + output += tasks.addTask(newTask); } catch (ArrayIndexOutOfBoundsException exception) { try { throw new DukeException("", DukeExceptionType.MISSING_DESCRIPTION, TODO); } catch (DukeException e) { System.err.println(e); + output += e; } } break; @@ -76,16 +79,19 @@ public static void handleCommands(String input, DukeCommandType commandType, Tas try { Task newTask = new Deadlines(task, due); tasks.addTask(newTask); + output += tasks.addTask(newTask); } catch (DateTimeParseException e) { DukeException.wrongTimeFormat(); } } } catch (DukeException e) { System.err.println(e); + output += e; } } } catch (DukeException e) { System.err.println(e); + output += e; } break; case EVENT: @@ -115,34 +121,41 @@ public static void handleCommands(String input, DukeCommandType commandType, Tas } else { Task newTask = new Events(task, due); tasks.addTask(newTask); + output += tasks.addTask(newTask); } } catch (DukeException e) { System.err.println(e); + output += e; } catch (DateTimeParseException e) { DukeException.wrongTimeFormat(); } } } catch (DukeException e) { System.err.println(e); + output += e; } break; case LIST: tasks.getListOfTasks(); + output += tasks.getListOfTasks(); break; case FIND: String keyword = input.split(" ")[1]; System.out.println(keyword); tasks.findTasks(keyword); + output += tasks.findTasks(keyword); break; case DONE: try { int index = Integer.parseInt(input.split(" ")[1]); tasks.done(index); + output += tasks.done(index); } catch (IndexOutOfBoundsException exception) { try { throw new DukeException("", DukeExceptionType.INVALID_INDEX, DONE); } catch (DukeException e) { System.err.println(e); + output += e; } } break; @@ -150,29 +163,33 @@ public static void handleCommands(String input, DukeCommandType commandType, Tas try { int index = Integer.parseInt(input.split(" ")[1]); tasks.delete(index); + output += tasks.delete(index); } catch (IndexOutOfBoundsException exception) { try { throw new DukeException("", DukeExceptionType.INVALID_INDEX, DELETE); } catch (DukeException e) { System.err.println(e); + output += e; } } break; case HELP: Ui.getListOfCommands(); + output += Ui.getListOfCommands(); break; - case UNKNOWN: + case EXIT: + Ui.exit(); + output += Ui.exit(); + break; + default: try { throw new DukeException("", DukeExceptionType.UNKNOWN); } catch (DukeException e) { System.err.println(e); + output += e; } break; - case EXIT: - Ui.exit(); - break; - default: - throw new IllegalStateException("Unexpected value: " + commandType); } + return output; } } \ No newline at end of file diff --git a/src/main/java/duke/DialogBox.java b/src/main/java/duke/DialogBox.java index 44abed7dc1..1286339296 100644 --- a/src/main/java/duke/DialogBox.java +++ b/src/main/java/duke/DialogBox.java @@ -1,46 +1,60 @@ package duke; +import java.io.IOException; +import java.util.Collections; + import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.control.Label; +import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.HBox; +/** + * An example of a custom control using FXML. + * This control represents a dialog box consisting of an ImageView to represent the speaker's face and a label + * containing text from the speaker. + */ public class DialogBox extends HBox { - - private Label text; + @FXML + private Label dialog; + @FXML private ImageView displayPicture; - public DialogBox(Label l, ImageView iv) { - text = l; - displayPicture = iv; - - text.setWrapText(true); - displayPicture.setFitWidth(100.0); - displayPicture.setFitHeight(100.0); - - this.setAlignment(Pos.TOP_RIGHT); - this.getChildren().addAll(text, displayPicture); + private DialogBox(String text, Image img) { + try { + FXMLLoader fxmlLoader = new FXMLLoader(MainWindow.class.getResource("/view/DialogBox.fxml")); + fxmlLoader.setController(this); + fxmlLoader.setRoot(this); + fxmlLoader.load(); + } catch (IOException e) { + e.printStackTrace(); + } + + dialog.setText(text); + displayPicture.setImage(img); } /** * Flips the dialog box such that the ImageView is on the left and text on the right. */ private void flip() { - this.setAlignment(Pos.TOP_LEFT); ObservableList tmp = FXCollections.observableArrayList(this.getChildren()); - FXCollections.reverse(tmp); - this.getChildren().setAll(tmp); + Collections.reverse(tmp); + getChildren().setAll(tmp); + setAlignment(Pos.TOP_LEFT); } - public static DialogBox getUserDialog(Label l, ImageView iv) { - return new DialogBox(l, iv); + public static DialogBox getUserDialog(String text, Image img) { + return new DialogBox(text, img); } - public static DialogBox getDukeDialog(Label l, ImageView iv) { - var db = new DialogBox(l, iv); + public static DialogBox getDukeDialog(String text, Image img) { + var db = new DialogBox(text, img); db.flip(); return db; } diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 69d6fc35a9..7a6dfa3fbd 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -1,31 +1,9 @@ package duke; -import javafx.application.Application; -import javafx.scene.Scene; -import javafx.scene.control.Button; -import javafx.scene.control.ScrollPane; -import javafx.scene.control.TextField; -import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.VBox; -import javafx.stage.Stage; -import javafx.scene.layout.Region; -import javafx.scene.control.Label; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; - /** * Duke class is the main class to use in order to run the bot. */ -public class Duke extends Application { - - private Image user = new Image(this.getClass().getResourceAsStream("/images/DaUser.png")); - private Image duke = new Image(this.getClass().getResourceAsStream("/images/DaDuke.png")); - - private ScrollPane scrollPane; - private VBox dialogContainer; - private TextField userInput; - private Button sendButton; - private Scene scene; +public class Duke { /** User's storage */ private Storage storage; @@ -33,15 +11,18 @@ public class Duke extends Application { private TaskList tasks; /** Ui to interact with user */ private Ui ui; + /** Parser to parse user's inputs */ + private Parser parser; /** * Initialises Duke and objects required. */ @SuppressWarnings("checkstyle:WhitespaceAround") public Duke() { - ui = new Ui(); + ui = new Ui(parser); storage = new Storage(); tasks = new TaskList(); + parser = new Parser(); try { storage.load(tasks); } catch (Exception e) { @@ -56,7 +37,11 @@ public Duke() { */ public void run() throws DukeException { Ui.greeting(); - Parser.parseInputs(tasks); + boolean isExit = ui.isExit(); + while (!isExit) { + ui.readInput(); + isExit = ui.isExit(); + } storage.save(TaskList.tasks); } @@ -70,104 +55,7 @@ public static void main(String[] args) throws DukeException { new Duke().run(); } - @Override - public void start(Stage stage) { - //Step 1. Setting up required components - - //The container for the content of the chat to scroll. - scrollPane = new ScrollPane(); - dialogContainer = new VBox(); - scrollPane.setContent(dialogContainer); - - userInput = new TextField(); - sendButton = new Button("Send"); - - AnchorPane mainLayout = new AnchorPane(); - mainLayout.getChildren().addAll(scrollPane, userInput, sendButton); - - //Scroll down to the end every time dialogContainer's height changes. - dialogContainer.heightProperty().addListener((observable) -> scrollPane.setVvalue(1.0)); - - scene = new Scene(mainLayout); - - stage.setScene(scene); - stage.show(); - - //Step 2. Formatting the window to look as expected - stage.setTitle("Duke"); - stage.setResizable(false); - stage.setMinHeight(600.0); - stage.setMinWidth(400.0); - - mainLayout.setPrefSize(400.0, 600.0); - - scrollPane.setPrefSize(385, 535); - scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); - scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS); - - scrollPane.setVvalue(1.0); - scrollPane.setFitToWidth(true); - - // You will need to import `javafx.scene.layout.Region` for this. - dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE); - - userInput.setPrefWidth(325.0); - - sendButton.setPrefWidth(55.0); - - AnchorPane.setTopAnchor(scrollPane, 1.0); - - AnchorPane.setBottomAnchor(sendButton, 1.0); - AnchorPane.setRightAnchor(sendButton, 1.0); - - AnchorPane.setLeftAnchor(userInput , 1.0); - AnchorPane.setBottomAnchor(userInput, 1.0); - - //Part 3. Add functionality to handle user input. - sendButton.setOnMouseClicked((event) -> { - handleUserInput(); - }); - - userInput.setOnAction((event) -> { - handleUserInput(); - }); - - } - - /** - * Iteration 1: - * Creates a label with the specified text and adds it to the dialog container. - * @param text String containing text to add - * @return a label with the specified text that has word wrap enabled. - */ - private Label getDialogLabel(String text) { - // You will need to import `javafx.scene.control.Label`. - Label textToAdd = new Label(text); - textToAdd.setWrapText(true); - - return textToAdd; - } - - /** - * Iteration 2: - * Creates two dialog boxes, one echoing user input and the other containing Duke's reply and then appends them to - * the dialog container. Clears the user input after processing. - */ - private void handleUserInput() { - Label userText = new Label(userInput.getText()); - Label dukeText = new Label(getResponse(userInput.getText())); - dialogContainer.getChildren().addAll( - DialogBox.getUserDialog(userText, new ImageView(user)), - DialogBox.getDukeDialog(dukeText, new ImageView(duke)) - ); - userInput.clear(); - } - - /** - * You should have your own function to generate a response to user input. - * Replace this stub with your completed method. - */ - private String getResponse(String input) { - return "Duke heard: " + input; + protected String getResponse(String input) throws DukeException { + return parser.parseInputs(input); } } \ No newline at end of file diff --git a/src/main/java/duke/DukeException.java b/src/main/java/duke/DukeException.java index 3a10483e3f..89a586bea1 100644 --- a/src/main/java/duke/DukeException.java +++ b/src/main/java/duke/DukeException.java @@ -113,7 +113,7 @@ public String toString() { /** * Returns error in user's input due to wrong time format. */ - public static void wrongTimeFormat() { - System.err.println(" ERROR IN ADDING DEADLINE: WRONG FORMAT\n Format: YYYY-MM-DD\n"); + public static String wrongTimeFormat() { + return " ERROR IN ADDING DEADLINE: WRONG FORMAT\n Format: YYYY-MM-DD\n"; } } \ No newline at end of file diff --git a/src/main/java/duke/Launcher.java b/src/main/java/duke/Launcher.java index 9438ec7d71..e4ef6b4628 100644 --- a/src/main/java/duke/Launcher.java +++ b/src/main/java/duke/Launcher.java @@ -7,6 +7,6 @@ */ public class Launcher { public static void main(String[] args) { - Application.launch(Duke.class, args); + Application.launch(Main.class, args); } } diff --git a/src/main/java/duke/Main.java b/src/main/java/duke/Main.java new file mode 100644 index 0000000000..db593707b5 --- /dev/null +++ b/src/main/java/duke/Main.java @@ -0,0 +1,31 @@ +package duke; + +import java.io.IOException; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Scene; +import javafx.scene.layout.AnchorPane; +import javafx.stage.Stage; + +/** + * A GUI for Duke using FXML. + */ +public class Main extends Application { + + private Duke duke = new Duke(); + + @Override + public void start(Stage stage) { + try { + FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource("/view/MainWindow.fxml")); + AnchorPane ap = fxmlLoader.load(); + Scene scene = new Scene(ap); + stage.setScene(scene); + fxmlLoader.getController().setDuke(duke); + stage.show(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/duke/MainWindow.java b/src/main/java/duke/MainWindow.java new file mode 100644 index 0000000000..f01a6db617 --- /dev/null +++ b/src/main/java/duke/MainWindow.java @@ -0,0 +1,51 @@ +package duke; + +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.ScrollPane; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.VBox; +/** + * Controller for MainWindow. Provides the layout for the other controls. + */ +public class MainWindow extends AnchorPane { + @FXML + private ScrollPane scrollPane; + @FXML + private VBox dialogContainer; + @FXML + private TextField userInput; + @FXML + private Button sendButton; + + private Duke duke; + + private Image userImage = new Image(this.getClass().getResourceAsStream("/images/DaUser.png")); + private Image dukeImage = new Image(this.getClass().getResourceAsStream("/images/DaDuke.png")); + + @FXML + public void initialize() { + scrollPane.vvalueProperty().bind(dialogContainer.heightProperty()); + } + + public void setDuke(Duke d) { + duke = d; + } + + /** + * Creates two dialog boxes, one echoing user input and the other containing Duke's reply and then appends them to + * the dialog container. Clears the user input after processing. + */ + @FXML + private void handleUserInput() throws DukeException { + String input = userInput.getText(); + String response = duke.getResponse(input); + dialogContainer.getChildren().addAll( + DialogBox.getUserDialog(input, userImage), + DialogBox.getDukeDialog(response, dukeImage) + ); + userInput.clear(); + } +} \ No newline at end of file diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index 7df647aa7d..2ba9aec2fa 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -1,50 +1,40 @@ package duke; -import java.util.Scanner; - /** * Parser class will take in user's inputs and make sense of it. */ public class Parser { + private static TaskList tasks; + /** * Interprets the command type from user's input and calls CommandHandler to process the commands. * - * @param tasks + * @param input * @throws DukeException */ - public static void parseInputs(TaskList tasks) throws DukeException { - Scanner sc = new Scanner(System.in); - String input = sc.nextLine(); - while (!input.isEmpty()) { - if (input.equals("bye")) { - CommandHandler.handleCommands(input, DukeCommandType.EXIT, tasks); - break; - } else if (input.equals("help")) { - CommandHandler.handleCommands(input, DukeCommandType.HELP, tasks); - } else if (input.equals("list")) { - CommandHandler.handleCommands(input, DukeCommandType.LIST, tasks); - } else if (input.startsWith("todo")) { - CommandHandler.handleCommands(input, DukeCommandType.TODO, tasks); - } else if (input.startsWith("deadline")) { - CommandHandler.handleCommands(input, DukeCommandType.DEADLINE, tasks); - } else if (input.startsWith("event")) { - CommandHandler.handleCommands(input, DukeCommandType.EVENT, tasks); - } else if (input.startsWith("done")) { - CommandHandler.handleCommands(input, DukeCommandType.DONE, tasks); - input = sc.nextLine(); - continue; - } else if (input.startsWith("delete")) { - CommandHandler.handleCommands(input, DukeCommandType.DELETE, tasks); - input = sc.nextLine(); - continue; - } else if (input.startsWith("find")) { - CommandHandler.handleCommands(input, DukeCommandType.FIND, tasks); - } else { - CommandHandler.handleCommands(input, DukeCommandType.UNKNOWN, tasks); - input = sc.nextLine(); - continue; - } - input = sc.nextLine(); + public static String parseInputs(String input) throws DukeException { + String output = ""; + if (input.equals("bye")) { + output += CommandHandler.handleCommands(input, DukeCommandType.EXIT, tasks); + } else if (input.equals("help")) { + output += CommandHandler.handleCommands(input, DukeCommandType.HELP, tasks); + } else if (input.equals("list")) { + output += CommandHandler.handleCommands(input, DukeCommandType.LIST, tasks); + } else if (input.startsWith("todo")) { + output += CommandHandler.handleCommands(input, DukeCommandType.TODO, tasks); + } else if (input.startsWith("deadline")) { + output += CommandHandler.handleCommands(input, DukeCommandType.DEADLINE, tasks); + } else if (input.startsWith("event")) { + output += CommandHandler.handleCommands(input, DukeCommandType.EVENT, tasks); + } else if (input.startsWith("done")) { + output += CommandHandler.handleCommands(input, DukeCommandType.DONE, tasks); + } else if (input.startsWith("delete")) { + output += CommandHandler.handleCommands(input, DukeCommandType.DELETE, tasks); + } else if (input.startsWith("find")) { + output += CommandHandler.handleCommands(input, DukeCommandType.FIND, tasks); + } else { + output += CommandHandler.handleCommands(input, DukeCommandType.UNKNOWN, tasks); } + return output; } } \ No newline at end of file diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java index 838c65b18f..8b4abd2e7c 100644 --- a/src/main/java/duke/TaskList.java +++ b/src/main/java/duke/TaskList.java @@ -22,7 +22,7 @@ public TaskList() { * * @param task */ - public static void addTask(Task task) { + public static String addTask(Task task) { tasks.add(task); String str = " ____________________________________________________________" + "\n Got it. I've added this task:" @@ -30,10 +30,7 @@ public static void addTask(Task task) { + "\n Now you have " + tasks.size() + " task(s) in the list." + "\n ____________________________________________________________\n"; System.out.println(str); - } - - public static void addStoredTask(Task task) { - tasks.add(task); + return str; } /** @@ -50,12 +47,14 @@ public static void addStoredTask(Task task) { * * @throws DukeException */ - public static void getListOfTasks() throws DukeException { + public static String getListOfTasks() throws DukeException { + String str = ""; if (tasks.isEmpty()) { try { throw new DukeException("", DukeExceptionType.EMPTY_LIST); } catch (DukeException e) { System.err.println(e); + str += e; } } else { String lst = " ____________________________________________________________" @@ -66,7 +65,9 @@ public static void getListOfTasks() throws DukeException { } lst += "\n ____________________________________________________________\n"; System.out.println(lst); + str += lst; } + return str; } /** @@ -74,13 +75,14 @@ public static void getListOfTasks() throws DukeException { * * @param index */ - public static void done(Integer index) { + public static String done(Integer index) { tasks.get(index - 1).markAsDone(); String str = " ____________________________________________________________" + "\n Nice! I've marked this task as done:\n " + tasks.get(index - 1) + "\n ____________________________________________________________\n"; System.out.println(str); + return str; } /** @@ -88,13 +90,14 @@ public static void done(Integer index) { * * @param index */ - public static void delete(Integer index) { + public static String delete(Integer index) { String str = " ____________________________________________________________" + "\n Noted. I've removed this task:\n " + tasks.remove(index - 1) + "\n Now you have " + tasks.size() + " task(s) in the list." + "\n ____________________________________________________________\n"; System.out.println(str); + return str; } /** @@ -102,7 +105,8 @@ public static void delete(Integer index) { * * @param keyword */ - public static void findTasks(String keyword) { + public static String findTasks(String keyword) { + String str = ""; ArrayList matchingTasks = new ArrayList<>(); for (Task task: tasks) { if (task.getDescription().contains(keyword)) { @@ -117,7 +121,7 @@ public static void findTasks(String keyword) { } } else { int index = 1; - String str = " ____________________________________________________________" + str += " ____________________________________________________________" + "\n Here are the matching tasks in your list:"; for (Task task : matchingTasks) { str += "\n " + index + ". " + task; @@ -126,5 +130,6 @@ public static void findTasks(String keyword) { str += "\n ____________________________________________________________\n"; System.out.println(str); } + return str; } } \ No newline at end of file diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java index f20349b448..2134134eab 100644 --- a/src/main/java/duke/Ui.java +++ b/src/main/java/duke/Ui.java @@ -1,14 +1,38 @@ package duke; +import java.util.Scanner; + /** * Ui class will handle the interactions with the user. */ public class Ui { + /** Parser for parsing user's inputs */ + protected Parser parser; + + /** Boolean to determine if Duke should stop running */ + private boolean isExit = false; + + /** + * Constructs a new Ui object. + * @param parser the parser that deals with user input + */ + public Ui(Parser parser) { + this.parser = parser; + } + + /** + * Determines whether or not Duke should stop running. + * @return true if Duke should stop running + */ + public boolean isExit() { + return this.isExit; + } + /** * Prints logo and greets the user. */ - public static void greeting() { + public static String greeting() { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" @@ -18,13 +42,14 @@ public static void greeting() { + "\n Hello! I'm Duke" + "\n What can I do for you?" + "\n____________________________________________________________\n"; - System.out.println(logo + greet); + String str = logo + greet; + return str; } /** * Prints a list of commands which the user can use. */ - public static void getListOfCommands() { + public static String getListOfCommands() { String commands = " ____________________________________________________________" + "\n Here are all your commands:" + "\n list - show all tasks" @@ -35,22 +60,43 @@ public static void getListOfCommands() { + "\n delete - delete task from list" + "\n ____________________________________________________________\n"; System.out.println(commands); + return commands; } /** * Prints bye and quit the bot. */ - public static void exit() { + public static String exit() { String bye = " ____________________________________________________________" + "\n Bye! Hope to see you again soon." + "\n ____________________________________________________________"; System.out.println(bye); + return bye; } /** * Prints error in loading the data from the file. */ - public static void showLoadingError() { - System.err.println(" ERROR IN LOADING YOUR DATA :-(\n"); + public static String showLoadingError() { + return " ERROR IN LOADING YOUR DATA :-(\n"; + } + + /** + * Reads the user's inputs and then passes them to parser for parsing. + */ + public void readInput() throws DukeException { + Scanner sc = new Scanner(System.in); + while (sc.hasNextLine()) { + String input = sc.nextLine(); + if (input.equals("bye")) { + this.isExit = true; + exit(); + sc.close(); + break; + } else { + String reply = parser.parseInputs(input); + System.out.println(reply); + } + } } } \ No newline at end of file diff --git a/src/main/resources/view/DialogBox.fxml b/src/main/resources/view/DialogBox.fxml new file mode 100644 index 0000000000..e433809947 --- /dev/null +++ b/src/main/resources/view/DialogBox.fxml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml new file mode 100644 index 0000000000..832f84382e --- /dev/null +++ b/src/main/resources/view/MainWindow.fxml @@ -0,0 +1,19 @@ + + + + + + + + + + + +