# Graphical user interface with JavaFX The functionality of the user interface is fundamentally tied to the database. The database is created and filled with activities based on the class "Model" from @Rosendahl2025. We have tried to keep a strict separation between Model, View and Controller. The view class knows what is on screen, but never how it is processed by the controller. It knows what arguments to pass on to the controller and in some cases what it can expect to receive. The GUI itself is created based on a helper class GUI.java consisting of a public enum containing a category name used for columns and a number corresponding to the order the elements are shown in. The start() function in Window.java, handling the view, creates a List "columns" using the record ActivityColumn. There is a lot of repetition in creating the layouts for the columns, so the record allows us to cycle through columns based on the column and label objects in the GUI class. This cycle is where we assign functions to each button after creation. The database is filled with the init_db.txt file based on the commands in there. A participation table is created to bridge courses to the student to avoid many to many relationships. getSumEcts() in Database.java returns the result of a query constructed to return the sum of ECTS for a given program. It does not currently work for elective activities, as that would require a redesign of the database or a helper class that would make the code "inconsistent". The backend was really created alongside the UI, as we felt that was the most intuitive way to go about things. ![screendump](pf2display.png) As the screenshot shows, it is not possible to choose the same subject module in both boxes. ECTS is calculated dynamically as new activities are added. Fonts and styling is consistent across columns, and new columns could in theory be added easily as the code is modular and reusable.