Allerede nå er det mulig å kjøre filen ExampleProjectApp.java i VSCode for å få opp en liten kalkulator-app.
Denne filen er "startsfilen" til applikasjonen. Her settes tittel på appen, hvilken FXML-fil som skal brukes, og den er ansvarlig for å starte selve applikasjonen:
primaryStage.setTitle("Example App"); // Setter tittel på vinduet
primaryStage.setScene(new Scene(FXMLLoader.load(getClass().getResource("App.fxml")))); // Sier at appen skal bruke "App.fxml"
primaryStage.show(); // Viser vinduet
Kontrolleren til applikasjonen er ExampleProjectController.java. Denne filen er "bindeleddet" mellom FXML-filen(e) og klassen(e) som skal brukes i applikasjonen. I dette eksempelprosjektet har den to metoder: initCalculator
og handleButtonClick
. I tillegg har den noen felter som er annotert med @FXML
. Dette viser at de tilhører FXML-filen vår. Her er navnet på variablene viktige. F.eks er private Label result
på linje 12 bundet til Label
-feltet på linje 15 i FXML-filen, siden denne har en fx:id = "result"
og variabelen vår heter result
:
@FXML
private Label result; // Fra ExampleProjectApp.java
<Label fx:id="result" layoutX="257.0" layoutY="244.0" /> // Fra App.fxml
Noe liknende skjer med metoden handleButtonClick
, som også er annotert med @FXML
. Dette gjøres slik at vi "får tak i" denne metoden fra FXML-filen. Button
-feltet i FXML-filen har en onAction="#handleButtonClick"
, som vil si at metoden handleButtonClick
, som er annotert med @FXML
, blir kjørt når vi trykker på knappen:
<Button layoutX="271.0" layoutY="188.0" mnemonicParsing="false" onAction="#handleButtonClick" text="Kalkuler" /> <!-- Fra App.fxml -->
Det som gjør at kontrolleren og FXML-filen er koblet sammen er attributten fx:controller='exampleproject.ExampleProjectController'
på det aller ytterste elementet i FXML-filen.
<AnchorPane fx:id="background" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="exampleproject.ExampleProjectController"> <!-- Fra App.fxml -->
Så, når vi trykker på knappen i appen blir som sagt metoden handleButtonClick
kjørt. Det som skjer inne i denne metoden er først at vi oppretter en ny kalkulator. Ved opprettelse av en kalkulator trenger vi en operator
. Denne henter vi ut fra hva en bruker av appen har skrevet inn i TextField
-feltet med fx:id="operator"
. Siden vi allerede har opprettet en variabel private TextField operator
, som er annortert med @FXML
, er denne allere linket til dette TextField
-feltet, og vi kan hente ut teksten som er skrevet inn med operator.getText()
.
initCalculator(operator.getText()); // Kaller på initCalculator som oppretter en ny kalkulator. Operator.getText() henter ut teksten som er skrevet inn i `operator`-feltet.
Det samme gjelder nedover i metoden; vi henter ut verdier fra firstNumber
og secondNumber
. Det som er verdt å merke seg her er at de blir hentet ut som String
s, men kalkulatoren vår krever int
s. Derfor gjør vi de også om til integers. Her bør man og være litt forsiktige, da det ikke er gitt at brukere skriver inn gyldige tall. Derfor har vi wrappet dette inn i en try/catch
, som sier ifra dersom tallet er ugyldig.
I tillegg til alt dette er det laget en liten eksempel testfil. Ingenting spennende som skjer her, det er en test for konstruktøren til kalkulator klassen vår, samt en test for metoden calculate
den har. Alle tester dere skriver til klassene deres legges altså inn i mappen src/test/java/<deres_prosjekt>
.
- Inviter gruppemedlemmene dine til dette repoet, og gi de minst en
Developer
-rolle (helstMaintainer
) - Klon dette prosjektet et sted på maskinen deres (ikke inne i Students-mappen, men gjerne i samme mappe denne ligger i).
- Dersom du har aktivert 2FA på GitLab-kontoen din og blir bedt om innlogging ved kloning/pushing av/til repoet må du opprette en personal access token som har "read_repository" og "write_repository"-rettigheter. Deretter kan du logge inn med ditt feidebrukernavn som brukernavn og denne tokenen som blir laget til deg som passord. En guide for hvordan opprette personal access token finnes her.
- Lag en ny mappe i
src/main/java/
som er deres prosjekt. - Opprett en startsfil for appen deres, slik som ExampleProjectApp.java og en kontroller som ExampleProjectController.java i deres nye prosjekt-mappe.
- Opprett en ny mappe i
src/main/resources/
som er deres prosjekt. - Opprett en FXML-fil, slik som App.fxml i deres nye prosjekt-mappe i
src/main/resources/
. - HUSK å legge inn
fx:controller='<deres_prosjekt>.<deres_kontroller>'
på det aller ytterste elementet i den nye FXML-filen deres, ellers vil ikke appen starte.
Eventuelt: Endre navn på filer og mapper fra "ExampleProject" til deres prosjektnavn.
Nøkkelpunkt | Beskrivelse |
---|---|
Andel av karakter | 35% (appen) + 15% (dokumentasjon/teori) |
Frist for godkjenning av prosjektplan | 25. februar |
Innleveringsfrist | 29. april |
Demonstrasjonsfrist hos læringsassistent | 03. mai |
Gruppestørrelse | 1 eller 2 personer |
Uke | Fra | Til | Beskrivelse |
---|---|---|---|
7-8 | 14/2 | 25/2 | Grunnklasser og brukergrensesnitt |
11 | 14/3 | 18/3 | Lagring of filhåndtering |
14 | 04/4 | 08/4 | Testing |
16-17 | 19/4 | 29/4 | Fullføre appen med tilhørende dokumentasjon |
LYKKE TIL