Gyakorlati alapok IV.
Végre ablakozunk! (AWT, Swing, JavaFX)
Frame létrehozása
Beállítottuk magasabb szintű kódkeretünket (A kódkeretek beállítása című fejezet), indulhat az ablakozás!
Először egy alapkeretet (frame) kell létrehoznunk és ebbe fogjuk belepakolni a további komponenseket. Ezt többféle módon is megtehetjük, itt és most csakis az azon kódokat ismertetem, amelyek a mostani kódkeretre épülnek (mert valójában másképp is megoldhatók). Ehhez a Swing-csomagból importáljuk a JFrame osztályt...
import javax.swing.JFrame;
...majd belőle származtatjuk a Window-osztályt:
class Window extends JFrame
Ettől kezdve hozzáférhetünk a JFrame osztály összes belső adatához és metódusához, amelyeket az osztállyal azonos nevű konstruktorban helyezünk el (Window()). A minimális kezdéshez 3 metódus szükséges (valójában csak 2, a címgenerálás nem kötelező):
setSize(400,300);
setTitle("PJP - Penzes Java Programming");
setVisible(true);
-
a setSize() metódussal beállítjuk a frame képpontokban mért szélességét és magasságát,
-
setTitle() metódussal a frame címét,
-
és a setVisible(true) metódussal mindezt láthatóvá tesszük, azaz a metódus megjeleníti a frame-et. Ezen utasításnak mindig az utolsónak kell lennie.
Nézzük meg a futtatható Java-kódot:
Main.java
public class Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import javax.swing.JFrame;
class Window extends JFrame {
Window() {
setSize(400,300);
setTitle("PJP
- Penzes Java Programming");
setVisible(true);
}
}
Végeredmény (a monitor bal felső oldalán):
Időzzünk el kicsit a keletkezett kódoknál!
A Main osztályhoz nem nyúlunk, de a Window osztályban eljátszhatunk a kódokkal. Láthatjuk, hogy a JFrame osztály metódusaihoz szabványos példányosítás nélkül is hozzáférhettünk (például setSize()), de más módszerek szintén működőképesek.
Először nézzük meg a metódus-hozzáféréseket a this referenciával (This one, please! - a this referencia című fejezet), amely most az aktuális osztálypéldányra mutat...
Main.java
public class Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import javax.swing.JFrame;
class Window extends JFrame {
Window() {
this.setSize(400,300);
this.setTitle("PJP
- Penzes Java Programming");
this.setVisible(true);
}
}
Végeredmény (a monitor bal felső oldalán):
...majd "klasszikus" osztálypéldányosítással:
Main.java
public class Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import javax.swing.JFrame;
class Window extends JFrame {
Window() {
super();
JFrame frame
= new JFrame();
frame.setSize(400,300);
frame.setTitle("PJP
- Penzes Java Programming");
frame.setVisible(true);
}
}
Végeredmény (a monitor bal felső oldalán):
A továbbiakban mi a legutóbbi, kissé "szájbarágós", de ezért talán a legplasztikusabb, azaz a legjobban átlátható kódot fogjuk továbbvinni.
Tapasztaltabb programozók azt is észrevehetik, hogy nem Window-, hanem JFrame-típusú objektumot hoztunk létre (bár az előbbit is megtehettük volna). Ennek oka, hogy nem szándékozunk egyetlen örökölt metódust sem megváltoztatni (overriding), azaz tökéletesen megelégszünk a JFrame által biztosított rutingyűjteménnyel.