Table of Contents |
---|
Inleiding
Voor het programma is een java frontend nodig, zodat het gebruikt kan worden door een eindgebruiker via een exe bestand. Hiervoor zijn meerdere opties voor een library mogelijk, zoals JavaFX of Swing. Dit moet vroeg besloten worden omdat het onwikkelen van een frontend handig is om dingen te presenteren aan de product owner, en het duurt lang, dus is het beter om dit te ontwikkelen aan het begin van het project.
De hoofdvraag is dus Kunnen wij beter JavaFX of Swing als java frontend framework library gebruiken om een nieuwe versie van rokade te maken?
...
Wat is het verschil tussen JavaFX en Swing?
Wat is JavaFX?
JavaFX is een platform en framework library dat gebruikt wordt voor de ontwikkeling van desktopapplicaties en rijke internettoepassingen. Het is gebaseerd op Java en biedt een uitgebreide set tools en bibliotheken om interactieve en visueel aantrekkelijke gebruikersinterfaces te creëren. Met JavaFX kunnen ontwikkelaars diverse moderne technologieën integreren om boeiende en responsieve applicaties te bouwen.
Wat zijn de voor en nadelen van JavaFX?
Voordelen van JavaFX.
- CSS styling: Het is mogelijk om JavaFX applicaties te stylen met Cascading style sheets. Dit maakt het mogelijk om net als bij HTML websites de elementen en het uiterlijk van elkaar te scheiden, en om applicaties te maken die er uniek uitzien zonder de code onoverzichtelijk te maken. JavaFX CSS Reference Guide. (n.d.)
- Verschillende media: Binnen JavaFX is het makkelijk om video of audiobestanden af te spelen. Het is zelfs mogelijk om webpaginas binnen een applet te bekijken, of om 3D beelden te renderen. Dit zit allemaal in de JavaFX library, hier zijn bij andere libraries apparte plugins voor nodig. JavaFX Overview (Release 8). (n.d.).
- Leercurve: JavaFX is makkelijker te leren dan andere frontend libraries zoals Swing.(Larkin, P. (2022, July 20). JavaFX vs Swing: The Key Differences ) Ook is de Yaeger engine van de HAN gebouwd op JavaFX, waardoor alle teamleden al een beetje bekend zijn met de structuur van een JavaFX applicatie. YaegerGame (yaeger 2023.2024 API). (n.d.).
...
- Jong: JavaFX is jonger dan de veelgebruikte alternatieven, en is door de gemeenschap en oracle de laatste jaren een beetje verwaarloosd. Het heeft dus relatief minder ondersteuning en software tools om te gebruiken dan de alternatieven.(Larkin, P. (2022, July 20). JavaFX vs Swing: The Key Differences )
Wat is Swing?
Swing is een grafische gebruikersinterface (GUI)-toolkit die de GUI-componenten bevat en een reeks widgets en pakketten biedt om geavanceerde GUI-componenten voor Java-toepassingen te maken. Het is een voorganger van JavaFX en is gebouwd bovenop de verouderde Java Abstract Widget Toolkit (AWT).
...
Als onderdeel van de Java Foundation Classes (JFC) heeft Swing de manier waarop Java-desktopapplicaties worden ontwikkeld en ervaren drastisch veranderd. Met zijn rijke functionaliteit en flexibiliteit heeft Swing een grote invloed gehad op de ontwikkeling van GUI-toepassingen in Java.
Wat zijn de voor en nadelen van Swing?
Voordelen van Swing:
Onafhankelijkheid: Swing-applicaties kunnen op alle moderne besturingssystemen gebruikt worden, dankzij java's design. Het is mogelijk om applicaties te ontwikkelen die er hetzelfde uitzien op verschillende computers, maar ook om zonder veel moeite het uiterlijk van de applcaties aan te passen aan het besturingssysteem van de gebruiker. (The JavaTM tutorials > Creating a GUI with Swing > Modifying the look and feel). (n.d.).
- Ondersteunding: Swing is een erg oude library, dit heeft ook nadelen, maar zorgt er ook voor dat veel problemen al bekend en opgelost zijn. Er is veel documentatie over Swing beschikbaar, en veel software tools en plugins om ontwikkeling van Swing applicaties te ondersteunen. Iemand die hiermee bekend is kan dus efficient Swing applicaties ontwikkelen. (AnveshKumar. (2023, March 19). The battle of JavaFX vs Java Swing: Which one is best for you? DevDojo.)
...
Leercurve: Voor beginnende ontwikkelaars kan het leren van Swing en het begrijpen van zijn concepten en functionaliteiten enige tijd vergen, vooral in vergelijking met eenvoudigere frontend-frameworkslibraries, zoals persoonlijk bleek bij het onderzoek in hoofdstuk 7
- Ouderdom: De Swing library is oud (Sun and Netscape to Jointly Develop Java Foundation Classes. (n.d.).), en is nog steeds gemaakt voor oudere besturingssystemen. Dit is handig als je een app wilt ontwikkelen die op nieuwe en oude systemen moet draaien, maar het zorgt er ook voor dat veel documentatie en hulpmiddelen zijn gemaakt voor oude besturingssystemen en frontend designs. Swing applicaties zien er dus vaak ouderwets uit. (The JavaTM tutorials > Creating a GUI with Swing > Modifying the look and feel). (n.d.).
Hoe maak je een JavaFX applicatie?
(Gemaakt met behulp van voorkennis, (First JavaFX Application - Javatpoint, z.d.) en (Create A New JavaFX Project | IntelliJ IDEA, z.d.))
...
package nl.eniac.klukkluk;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
public class KlukklukApplication extends Application {
@Override
public void start(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(KlukklukApplication.class.getResource("welcome-screen.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 320, 240);
stage.setTitle("Klukkluk v0.01");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
(Code snippet 6.1)
Het resultaat van deze code is te zien in de volgende afbeelding. Zoals te zien is wordt de title weergegeven als applicatie naam:
(Afbeelding 6.1)
Om deze scene iets meer opvulling te geven moet er in het fxml bestand aangegeven worden wat er allemaal in de scene opgenomen moet worden. In dit bestand kunnen echter geen echte functionaliteiten gegeven worden aan de objecten.
Er wordt hieronder wel een knop aangemaakt maar in het bestand wordt nergens gezegd wat de knop nou precies moet doen. Om dit op te lossen wordt er aangegeven wat de controller is van deze scene. Dat wordt gedaan door dit het volgende stukje code fx:controller="nl.eniac.klukkluk.KlukklukController".
Bij de button wordt er met de onAction tag aangegeven welke methode het gedrag van deze button bevat. Dit wordt uitgevoerd op het moment dat er op de button geklikt wordt.
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Button?>
<VBox alignment="CENTER" spacing="20.0" xmlns:fx="http://javafx.com/fxml"
fx:controller="nl.eniac.klukkluk.KlukklukController">
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0"/>
</padding>
<Label fx:id="welcomeText"/>
<Button text="Test" onAction="#onHelloButtonClick"/>
</VBox>
(Code snippet 6.2)
Nu we de button hebben toegevoegd ziet de applicatie er zo uit:
(Afbeelding 6.2)
Om gedrag te geven aan de button en de label moet er een Controller klasse aangemaakt worden die dit gedrag bevat. Door gebruik te maken van onAction in het FXML bestand weet JavaFX welke methode hij moet gebruiken.
De label welcomeText bevat nu nog geen tekst en is dus eigenlijk onzichtbaar in afbeelding 6.2. In de methode onHelloButtonClick() wordt er wel tekst toegewezen aan dit label.
Als er dus op de knop wordt gedrukt nu wordt deze tekst ook echt toegekend aan welcomeText.
package nl.eniac.klukkluk;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
public class KlukklukController {
@FXML
private Label welcomeText;
@FXML
protected void onHelloButtonClick() {
welcomeText.setText("Kukkluk is up and running.");
}
}
(Code snippet 6.3)
Als er nu op de knop gedrukt wordt komt de volgende tekst tevoorschijn:
(Afbeelding 6.3)
Nadat al deze stappen gevolgd zijn zou er een werkende JavaFX applicatie moeten zijn die een button bevat met gedrag.
Hoe maak je een Swing applicatie?
(Gemaakt met behulp van voorkennis, Lesson: Getting Started with Swing (The JavaTM Tutorials > Creating a GUI With Swing). (n.d.) en Hejazi, F. (2019, May 7). IntelliJ IDEA GUI Designer Tutorial. Examples Java Code Geeks.)
...
Op deze manier kunnen er interactieve Swing applicaties gemaakt worden. Alle code van de gemaakte applicaties zijn te vinden op de repository.
Wat is het verschil tussen JavaFX en Swing?
Veel concepten in JavaFX en Swing lijken op elkaar. Swing heeft frames, JavaFX heeft scenes, Swing heeft panels, JavaFX heeft Vboxes. Beide libraries werken ook met layouts in XML, maar allebei op een andere manier. In de praktijk lijkt het ontwikkelen van een swing en een javaFX programma ook erg op elkaar. Het uiterlijk van beide libraries is wel op te merken. JavaFX ziet er iets beter uit met de default look, en het lijkt niet heel makkelijk om dat aan te passen op moderne operating systemen, terwijl JavaFX werkt met CSS. De UI designer plugin in IntelJ werkt ook anders, maar beide lijken goed genoeg. De Swing plugin lijkt meer gefocust op snelheid, en de JavaFX plugin meer op efficient dingen editen.
Conclusie
De keuze tussen JavaFX is niet makkelijk maar ook niet moeilijk. Uit beide soorten onderzoek (Bibliotheek en Workshop) bleek dat swing en JavaFX practisch gezien erg veel op elkaar lijken, en dat het verschil tussen de 2 vooral ligt aan voorkeur. Wel leek swing een beetje moeilijker om te leren, vanwege de extra benodigde boilerplate code voor simpele applicaties. Gezien de meeste leden van het team niet erg ervaren zijn met het gebruik van een user interface library (behalve Yaeger) wordt er dus gekozen voor JavaFX, ook al had Swing waarschijnlijk even goed kunnen zijn geweest.
zijn allebei goede opties voor het maken van een front-end. Er zijn echter wel een paar verschillen tussen de twee. In dit hoofdstuk wordt weergegeven wat deze verschillen precies zijn.
Hoe ze dingen laten zien:
- JavaFX organiseert alle onderdelen van de gebruikersinterface als knooppunten in een boomstructuur, wat meer flexibiliteit biedt voor speciale visuele effecten.
- Swing gebruikt een traditioneler model waarbij onderdelen direct aan vensters worden toegevoegd, wat minder flexibiliteit kan betekenen voor complexe lay-outs.
Lay-outs regelen:
- JavaFX gebruikt speciale containers om onderdelen te organiseren, wat het gemakkelijker maakt om ze op de juiste plek te krijgen.
- Swing heeft ook manieren om lay-outs te beheren, maar deze kunnen wat meer werk vereisen om de gewenste lay-out te krijgen.
Stijl geven:
- JavaFX maakt gebruik van CSS, net als bij het stylen van websites, waardoor het eenvoudig is om een consistente uitstraling te creëren.
- Swing regelt stijl meer met Java-code, dit kan wat meer gedoe zijn.
Media-ondersteuning:
- JavaFX kan gemakkelijk audio, video en 3D-graphics afspelen zonder extra gedoe.
- Swing heeft minder ingebouwde ondersteuning voor media en heeft soms extra hulpmiddelen nodig.
Leercurve:
- JavaFX wordt vaak gezien als eenvoudiger te leren, vooral als je bekend bent met webtechnologieën.
- Swing kan wat moeilijker zijn om onder de knie te krijgen, vooral voor beginners.
Moderniteit:
- JavaFX wordt beschouwd als moderner en krijgt regelmatiger updates en verbeteringen.
- Swing is al langer in gebruik en ontvangt misschien niet zo vaak updates als JavaFX.
- IntelJ editor:
- De JavaFX fxml editor in InteliJ is meer gefocust op het maken van gecompliceerde layouts met behulp van een rastersysteem.
- De Swing form editor in InteliJ is eerder gefocust op het snel maken van een responsive programma, waarbij de exacte posities in een layout vaak automatisch beslist worden.
Conclusie
Op basis van de vergelijking tussen JavaFX en Swing kunnen we tot een conclusie komen over welk frontend-library het meest geschikt is voor het ontwikkelen van een nieuwe versie van Rokade.
Beide libraries hebben verschillende voor- en nadelen. JavaFX biedt bijvoorbeeld CSS-styling en een relatief makkelijke leercurve. Swing, aan de andere kant, biedt een lange geschiedenis van gebruik met veel documentatie en ondersteuning, maar het heeft een steilere leercurve en kan er wat gedateerd uitzien.
Het maken van een JavaFX-applicatie omvat het gebruik van FXML-bestanden om de lay-out te definiëren en controllers om het gedrag te beheren, terwijl Swing meer gericht is op het maken van UI-programma's in code, maar biedt ook opties voor een GUI maken met XML.
Op basis van deze analyse lijkt het gebruik van JavaFX gunstiger voor het ontwikkelen van een nieuwe versie van Rokade. Met een modernere uitstraling en relatief eenvoudige leercurve zou het efficiënter kunnen zijn voor het ontwikkelteam om mee te werken. Bovendien biedt JavaFX een breed scala aan mogelijkheden voor het creëren van visueel aantrekkelijke en interactieve gebruikersinterfacesOm Rokade te maken moeten alle teamleden dus leren om te werken met JavaFX, en moet er onderzoek gedaan worden naar hoe CSS styling gebruikt kan worden in JavaFX, om een efficiente user interface te maken.
Bronnen
Lesson: Getting Started with Swing (The JavaTM Tutorials > Creating a GUI With Swing). (n.d.). https://docs.oracle.com/javase/tutorial/uiswing/start/index.html
- Hejazi, F. (2019, May 7). IntelliJ IDEA GUI Designer Tutorial. Examples Java Code Geeks. https://examples.javacodegeeks.com/java-development/desktop-java/ide/intellij-idea/intellij-idea-gui-designer-tutorial/
- Larkin, P. (2022, July 20). JavaFX vs Swing: The Key Differences | Career Karma. Career Karma. https://careerkarma.com/blog/javafx-vs-java-swing/
- How to set the look and feel (The JavaTM tutorials > Creating a GUI with Swing > Modifying the look and feel). (n.d.). https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html#available
- AnveshKumar. (2023, March 19). The battle of JavaFX vs Java Swing: Which one is best for you? DevDojo. https://devdojo.com/anvesh_kumar/the-battle-of-javafx-vs-java-swing-which-one-is-best-for-you
Sun and Netscape to Jointly Develop Java Foundation Classes. (n.d.). https://web.archive.org/web/20120509230952/http://www2.prnewswire.com/cgi-bin/stories.pl?ACCT=104&STORY=%2Fwww%2Fstory%2F84048&EDATE=
JavaFX CSS Reference Guide. (n.d.). https://openjfx.io/javadoc/17/javafx.graphics/javafx/scene/doc-files/cssref.html#node
YaegerGame (yaeger 2023.2024 API). (n.d.). https://han-yaeger.github.io/yaeger/hanyaeger/com/github/hanyaeger/api/YaegerGame.html
- JavaFX Overview (Release 8). (n.d.). https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-overview.htm#JFXST784
- First JavaFX Application - javatpoint. (z.d.). www.javatpoint.com. https://www.javatpoint.com/first-javafx-application
- Create a new JavaFX project | IntelliJ IDEA. (z.d.). IntelliJ IDEA Help. https://www.jetbrains.com/help/idea/javafx.html
...