10 Verschillen tussen JavaFX en Swing

10 Verschillen tussen JavaFX en Swing - dummies

Als je een ervaren Java-programmeur bent, heb je ongetwijfeld met Swing samengewerkt om gebruikersinterfaces te maken. Oracle heeft Swing niet volledig verlaten - het is niet verouderd en Swing-applicaties blijven werken. Maar er wordt geen werk meer gedaan om Swing te verbeteren, en Oracle heeft duidelijk gemaakt dat JavaFX de toekomst is.

Hier zijn tien basisverschillen tussen JavaFX en Swing.

In JavaFX is de hele wereld een podium

In Swing wordt de klasse die uw gebruikersinterfacecomponenten bevat een -frame genoemd en wordt deze gedefinieerd door de JFrame-klasse. Een frame is in feite een leeg venster waaraan u een -paneel kunt toevoegen dat dient als een container voor uw gebruikersinterface-elementen. Een panel wordt gedefinieerd door de klasse JPanel.

Een Swing-toepassing is eigenlijk een klasse die de klasse JFrame uitbreidt. Om gebruikersinterfacecomponenten weer te geven, voegt u componenten toe aan een JPanel en voegt u vervolgens het paneel aan het frame toe.

JavaFX gebruikt de metafoor van een theater om de containers op het hoogste niveau van een toepassing te modelleren. Een fase (gedefinieerd door de Stage-klasse) vertegenwoordigt de container van het hoogste niveau - meestal een venster, maar op sommige besturingssystemen kan de tafel het volledige schermoppervlak vertegenwoordigen. De afzonderlijke bedieningselementen en andere componenten waaruit de gebruikersinterface bestaat, bevinden zich in een scène (gedefinieerd door de klasse Scene). Een toepassing kan meer dan één scène hebben, maar slechts een van de scènes kan op elk moment in het werkgebied worden weergegeven.

Een scène bevat een scènemeter, , het belangrijkste concept in JavaFX. De scènegrafiek is een verzameling van alle elementen waaruit een gebruikersinterface bestaat: groepen, lay-outs, besturingselementen en vormen. Deze objecten worden knooppunten genoemd en zijn allemaal afgeleid van de klasse Node. De klasse Node heeft veel nuttige functies en mogelijkheden die automatisch beschikbaar worden gemaakt voor elk object dat u aan uw gebruikersinterface kunt toevoegen. De klasse Node definieert bijvoorbeeld een methode setRotate waarmee u elk knooppunt in de scènegrafiek kunt roteren.

In JavaFX zijn lay-outbeheerders knooppunten

In Swing wordt een lay-out gekoppeld aan een JPanel. Het JPanel op het hoogste niveau geeft de basislay-out voor het frame. Als u extra lay-outs wilt nesten in de lay-out op het hoogste niveau, moet u extra JPanels maken, de bijbehorende lay-outs instellen en deze vervolgens toevoegen aan de lay-out op hoger niveau.

In JavaFX zijn lay-outs subklassen van de klasse Node, net als besturingselementen en vormen. Lay-outs bevatten een verzameling knooppunten en elk knooppunt in een lay-out kan van elk type knooppunt zijn: een besturingselement, een vorm of een andere lay-out.Dit schema is veel minder omslachtig dan Swings associatie van lay-outs met panelen.

JavaFX heeft gebeurtenisafhandeling verbeterd

Zowel JavaFX als Swing gebruiken gebeurtenisafhandeling om te reageren op gebruikersinvoergebeurtenissen. U zult echter merken dat gebeurtenissen in JavaFX beter doordacht en meer consistent zijn dan hun equivalenten in Swing. Maar de belangrijkste reden voor het afhandelen van gebeurtenissen in JavaFX is vanwege de afhankelijkheid van eigenschappen.

JavaFX ondersteunt eigenschappen

JavaFX ondersteunt de concepten van eigenschappen en gebruikt eigenschappen uitgebreid in zijn klassen. Simpel gezegd, een eigenschap is een variabele waarvan de waarde kan worden waargenomen. U kunt een listener registreren bij elke eigenschap, zodat u code kunt schrijven die automatisch wordt geactiveerd wanneer de eigenschap verandert. Bovendien kunt u aan eigenschappen aan elkaar binden, wat betekent dat als een eigenschapswaarde verandert, de andere eigenschapswaarde hiermee automatisch verandert.

Omdat bijna alle kenmerken van elementen van de gebruikersinterface worden beheerd door middel van eigenschappen, biedt JavaFX gebeurtenisafhandeling die ongeoorloofd is in Swing. In JavaFX kunt u bijvoorbeeld een gebeurtenislistener koppelen aan de kleur van een vorm. Als de vorm van kleur verandert, wordt de gebeurtenislistenercode uitgevoerd. Je hebt misschien geen gebruik van de mogelijkheid, maar je kunt het gebruiken als dat nodig is.

JavaFX is skinnable met CSS

Een van de beste functies van JavaFX is dat u het formatteren kunt besturen met Cascading Style Sheets (CSS). Zowat elk aspect van het uiterlijk van uw gebruikersinterface kan worden ingesteld met een stijlregel en u kunt eenvoudig toestaan ​​dat de gebruiker selecteert welke van de verschillende beschikbare stijlpagina's moet worden toegepast op de scène. U kunt dus het volledige uiterlijk van uw toepassing wijzigen met één enkele methodeaanroep.

JavaFX heeft consistentere besturingselementen

Over het algemeen zult u merken dat de besturingshiërarchie van JavaFX completer is dan die van Swing. Beide hebben alle basisbedieningen: knoppen, selectievakjes, keuzelijsten met invoervak ​​en dergelijke. Maar JavaFX heeft verschillende interessante besturingselementen die Swing niet heeft, zoals het samenvouwbare besturingselement TitledPane en het Accordion-besturingselement dat meerdere Titlopane-besturingselementen in een stapel rangschikt. En het feit dat al deze besturingselementen door CSS kunnen worden weergegeven, geeft hen een enorm voordeel ten opzichte van Swing.

JavaFX heeft speciale effecten

De javafx. tafereel. effectpakket bevat een aantal klassen die gemakkelijk speciale effecten kunnen toepassen op elk knooppunt in de scènegrafiek. Met deze klassen kunt u eenvoudig schaduwen, reflecties, vervaging en andere interessante visuele effecten toepassen die de weergave van uw gebruikersinterface kunnen transformeren.

Animatie is gemakkelijker in JavaFX

Animatie is mogelijk in Swing, maar Swing biedt hier geen directe ondersteuning voor. Om een ​​Swing-component te animeren, moet u uw eigen timers instellen en uw eigen logica bouwen om de animatie uit te voeren.

JavaFX daarentegen heeft ingebouwde ondersteuning voor geavanceerde animaties die op elk knooppunt in de scènegrafiek kunnen worden toegepast. U kunt een van de verschillende ingebouwde overgangsklassen gebruiken om algemene animaties uit te voeren, zoals vervagen, rotaties of bewegingspaden.U kunt ook de klassen KeyFrame en Timeline gebruiken om eenvoudig aangepaste animaties in te stellen.

JavaFX ondersteunt moderne aanraakapparaten

Swing heeft geen ondersteuning voor moderne aanraakapparaten. JavaFX daarentegen heeft ingebouwde ondersteuning voor algemene aanraakbewegingen zoals scrollen, vegen, roteren en zoomen. Het afhandelen van deze gebeurtenissen in JavaFX is net zo eenvoudig als het afhandelen van elk ander type gebeurtenis: u installeert eenvoudigweg een gebeurtenislistener bij de aanraakgebeurtenis en schrijft vervolgens code die op de juiste manier reageert.

JavaFX heeft geen equivalent voor JOptionPane

Het zou niet eerlijk zijn om deze lijst met tien verschillen volledig te vullen met punten die duidelijk de voorkeur geven aan JavaFX. Hier is een kleine ergernis van JavaFX: het heeft geen ingebouwde equivalent voor de JOptionpane-klasse van Swing, wat erg handig is voor het weergeven van korte waarschuwingsberichten of voor het verkrijgen van eenvoudige invoer door de gebruiker. In JavaFX moet je je eigen equivalent van deze nuttige klasse maken.