10 Skillnader mellan JavaFX och Swing-dummies

10 Skillnader mellan JavaFX och Swing-dummies

Om du är en erfaren Java-programmerare har du utan tvekan arbetat med Swing för att skapa användargränssnitt. Oracle har inte helt övergivit Swing - det är inte avvecklat, och Swing-applikationer fortsätter att fungera. Men inget arbete görs längre för att förbättra Swing, och Oracle har gjort klart att JavaFX är framtiden.

Här är tio grundläggande skillnader mellan JavaFX och Swing.

I JavaFX är hela världen ett steg

I Swing kallas klassen som innehåller dina användargränssnittskomponenter en ram och definieras av JFrame-klassen. En ram är i huvudsak ett tomt fönster där du kan lägga till en panel, som fungerar som en behållare för dina användargränssnitt. En panel definieras av JPanel-klassen.

En Swing-applikation är faktiskt en klass som utökar JFrame-klassen. För att visa användargränssnittskomponenter lägger du till komponenter i en JPanel och lägger sedan till panelen i ramen.

JavaFX använder metaforen för en teater för att modellera behållarna på toppnivå i en applikation. Ett stadium (definierat av Stage-klassen) representerar behållaren på högsta nivå - vanligen ett fönster, men i vissa operativsystem kan scenen representera hela bildytan. De enskilda kontrollerna och andra komponenter som utgör användargränssnittet finns i en scen (definierad av scenklassen). En applikation kan ha mer än en scen, men bara en av scenerna kan visas på scenen när som helst.

En scen innehåller en scengraf, som är det viktigaste konceptet i JavaFX. Scengrafen är en samling av alla element som utgör ett användargränssnitt - grupper, layouter, kontroller och former. Dessa objekt heter noder och är alla härledda från nodklassen. Node-klassen har många användbara funktioner och funktioner som automatiskt görs tillgängliga för alla objekt du kan lägga till i ditt användargränssnitt. Nodklassen definierar till exempel en setRotate-metod som låter dig rotera vilken nod som helst i scengrafen.

I JavaFX är layouthanterare noder

I Swing är en layout associerad med en JPanel. Den högsta JPanel ger den grundläggande layouten för ramen. Om du vill bygga upp fler layouter i den överordnade layouten måste du skapa ytterligare JPanel, ange deras associerade layouter och sedan lägga till dem i layouten på högre nivå.

I JavaFX är layouter underklasser i nodklassen, precis som kontroller och former. Layout innehåller en samling noder, och varje nod som finns i en layout kan vara vilken som helst nod: en kontroll, en form eller en annan layout.Det här systemet är mycket mindre besvärligt än Swings associering av layouter med paneler.

JavaFX har förbättrat händelsehantering

Både JavaFX och Swing använder händelsehantering för att svara på användarinmatningshändelser. Men du kommer att upptäcka att händelser i JavaFX är bättre genomtänkt och mer konsekvent än deras ekvivalenter i Swing. Men den största orsaken till händelsehanteringen är förbättrad i JavaFX på grund av dess beroende av egenskaper.

JavaFX stöder egenskaper

JavaFX stöder koncepten egenskaper och använder egenskaper omfattande i sina klasser. Enkelt uttryckt är en egenskap en variabel vars värde kan observeras. Du kan registrera en lyssnare med någon egendom, så att du kan skriva kod som utlöses automatiskt när egenskapen ändras. Dessutom kan du binda egenskaper till varandra, vilket innebär att om ett fastighetsvärde ändras, ändras det andra egenskapsvärdet automatiskt med det.

Eftersom nästan alla egenskaper hos användargränssnittselement hanteras genom egenskaper, tillhandahåller JavaFX händelsehantering som inte är synlig i Swing. I JavaFX kan du till exempel bifoga en händelseloggare till en färgfärg. Om formen ändrar färg, exekveras din händelseloggskod. Du kanske inte har möjlighet att använda möjligheten, men du kan använda den om du behöver.

JavaFX kan skinnas med CSS

En av de bästa funktionerna i JavaFX är att du kan styra formatering med Cascading Style Sheets (CSS). Nästan alla aspekter av utseendet på ditt användargränssnitt kan ställas in med en stilregel och du kan enkelt låta användaren välja vilken av flera tillgängliga stilark som ska tillämpas på scenen. Således kan du ändra hela utseendet på din ansökan med ett enda metodsamtal.

JavaFX har mer konsekventa kontroller

Generellt ser du att JavaFX-kontrollhierarkin är mer komplett än Swing. Båda har alla grundläggande kontroller - knappar, kryssrutor, kombinationsrutor och liknande. Men JavaFX har flera intressanta kontroller som Swing inte har, till exempel den hopfällbara TitledPane-kontrollen och Accordion-kontrollen som arrangerar flera TitledPane-kontroller i en stapel. Och det faktum att alla dessa kontroller är skinnbara av CSS ger dem en stor fördel jämfört med Swing.

JavaFX har specialeffekter

Javafx. scen. effektpaketet innehåller ett antal klasser som enkelt kan applicera specialeffekter till vilken nod som helst i scengrafen. Dessa klasser låter dig enkelt applicera skuggor, reflektioner, oskärpa och andra intressanta visuella effekter som kan förändra utseendet på ditt användargränssnitt.

Animering är lättare i JavaFX

Animering är möjlig i Swing, men Swing ger inget direkt stöd för det. För att animera en Swing-komponent måste du skapa egna timer och bygga din egen logik för att utföra animeringen.

I motsats till detta har JavaFX inbyggt stöd för sofistikerade animeringar som kan appliceras på vilken nod som helst i scengrafen. Du kan använda en av flera inbyggda övergångsklasser för att utföra vanliga animeringar, som fades, rotationer eller rörelsebana.Eller du kan använda KeyFrame och Timeline klasserna för att enkelt skapa egna animeringar.

JavaFX stöder moderna touch-enheter

Swing saknar stöd för moderna touch-enheter. I motsats till detta har JavaFX inbyggt stöd för vanliga beröringsbehållanden som att bläddra, svepa, rotera och zooma. Hantering av dessa händelser i JavaFX är lika enkelt som hantering av någon annan typ av händelse: Du installerar helt enkelt en händelseloggare vid beröringshändelsen och skriver sedan kod som svarar på lämpligt sätt.

JavaFX har ingen motsvarighet till JOptionPane

Det skulle inte vara rättvist att helt fylla i listan med tio skillnader med punkter som tydligt gynnar JavaFX. Här är en liten irritation av JavaFX: Den har ingen inbyggd motsvarighet till Swings JOptionpane-klass, vilket är väldigt praktisk för att visa kortvariga meddelanden eller få enkel inmatning från användaren. I JavaFX måste du skapa din egen motsvarighet till den här användbara klassen.