GUI med JFrame: gör interaktionen mellan människan och datorn möjlig


Nyckelord: GUI, användargränssnitt, JFrame, Swing, Java FX

GUI Java

I den här artikeln ska vi se hur vi kan använda den inbyggda klassen JFrame för att skapa ett GUI för vårt spel.

Vad är ett GUI?

GUI står för Graphical User Interface, eller på svenska Grafiskt Användarsnitt, och är till för att underlätta interaktion mellan människa och dator. Det kan var i form av till exempel, bilder, grafiska knappar eller ljud.

Lite mer formellt kan vi säga att ett GUI visar objekt som förmedlar information och representerar åtgärder som kan vidtas av användaren. Vanligtvis så ändrar objekten färg, storlek eller synlighet när användaren interagerar med dem, till exempel, när vi trycker på en knapp.

I vårt fall är det GUI det som användaren ser spelplanen och den meny som frågar om spelaren vill starta spelet.

GUI JFrame Java
Figur 1: Exempel på GUI för vårt spel i Java

Som du säkert inser så har det mesta av det vi använder på datorn någon form av GUI för att underlätta just vårt användande. Exempelvis, tänk på alla knappar och funktioner som finns i Microsoft Word och Excel.

Hur fungerar GUI i Java?

I Java Development Kit (JDK) så finns det inbyggda klasser som hjälper oss att på ett förhållandevis enkelt sätt skapa ett grafiskt användargränssnitt. Att skriva egna klasser som gör grafik och ”återuppfinna hjulet” är en mycket svår och tidskrävande uppgift.

För närvarande så finns det tre Java-API för grafisk programmering som man kan använda sig av.

  • Swing
  • JavaFX
  • AWT (Abstract Windowing Toolkit)

Det ska dock nämnas att de flesta AWT-komponenterna har blivit något föråldrade och har ersatts med nyare Swing-komponenter. Vi kommer fortsättningsvis att använda oss av Swing när vi bygger GUI för vårt spel.

GUI för spel i Java med JFrame

När vi ska programmera vårt spel så behövs det någon form av spelplan, den bildruta som användare ska se. Vi behöver helt enkelt ett GUI som användaren ska spela mot. Vi kommer använda oss av den inbyggda klassen JFrame som finns i Swing paketet för att skapa en bildruta.

Det vi börjar med är att skapa ett objekt och kopplar objektet game till vårt GUI. 

// Skapar objektet frame och ger titeln på spelet
JFrame frame = new JFrame("Titel"); 

// Kopplar objektet game till GUI:t                   
frame.add(game);                

Sedan så använder vi ett par av de inbyggda metoderna som finns i JFrame för att modifiera spelfönstret

//Gör GUI:t i rätt storlek (samma storlek som spelet)                       
frame.pack();                                        

//Om man stänger fönstret, stäng av programmet  
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

//Gör så att man inte kan ändra storlek på fönstret
frame.setResizable(false);                         

//Placerar GUI:t mitt på skärmen     
frame.setLocationRelativeTo(null); 

//Gör fönstret synligt för användaren                    
frame.setVisible(true);

Vill du läsa mer om olika inbyggda metoder i JFrame och hur de används kan du göra det här.

Okej, nu har vi skapat en bildruta som användaren ska se när man spelar. Nästa steg är att se till att vi vårt spel kan styras av tangentbordet.

Swing vs Java FX

När det kommer till att välja mellan Swing och Java FX så finns det inget entydigt svar, utan det beror på situationen. Några skillnader är, till exempel, när det kommer till antal komponenter så har Swing en större uppsättning. JavaFX har ett stort antal komponenter tillgängliga, men mindre än vad Swing tillhandahåller. Vidare så har Java FX har ett något mer avancerat user interface och anpassningsbara komponenter jämfört med Swing som använder en mer standardiserad utformning. Avslutningsvis så kan man säga att Swing är standardverktyget för Java-utvecklare för att skapa GUI. Det beror nog på främst på det större biblioteket av komponenter samt att det helt enkelt har funnits längre, därav så har vi valt att använda Swing i vårt exempel.

För att läsa en djupare analys om skillnader mellan Swing och Java FX – länk.

Vad tyckte du om sidan?

Lämna gärna feedback och hjälp oss göra sidan bättre

Feedback gör oss bättre!

Lämna gärna feedback om vad du tyckte om avsnittet!