Gyakorlati alapok IV.
Végre ablakozunk! (AWT, Swing, JavaFX)
Label a frame-en
A label egyszerű feliratot, címkét jelent. Általában tájékoztató jellegű szöveget tartalmaz és további komponensfunkciók magyarázatául szolgál. Itt az idő, hogy az új komponenst hozzáadjuk a frame-hez!
A frame alapkódját már ismerjük az előző, a Frame bezárása című fejezetből, ennek lehetséges végeredménye, amely egyúttal programozási kiindulópontunk is:
Végeredmény (a monitor közepén / felbontástól függetlenül/):
-
exit gomb működik
Az új komponenst kötelező importálással (import javax.swing.JLabel) klasszikus Java-objektumként hozzuk létre...
JLabel label = new JLabel();
...majd be kell állítanunk az egyik legfontosabb tulajdonságát, a megjelenítendő szöveget...
label.setText("PJP - Penzes Java Programming");
...végül hozzá kell adnunk a frame-hez:
frame.add(label);
Nézzük meg a módosított Java-kódot:
Main.java
public class Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import javax.swing.JFrame;
import javax.swing.JLabel;
class Window extends JFrame {
Window() {
super();
JFrame frame
= new JFrame();
JLabel label
= new JLabel();
label.setText("PJP - Penzes Java Programming");
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Center center
= new Center();
frame.setSize(400, 300);
frame.setTitle("PJP
- Penzes Java Programming");
center.setCenter(frame);
frame.setVisible(true);
}
}
Center.java
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;
public class Center {
void setCenter(JFrame frame) {
Point center =
GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
int x = (int) center.getX() -
(frame.getWidth() / 2);
int y = (int) center.getY() -
(frame.getHeight() / 2);
Point ablakCenter = new Point(x, y);
frame.setLocation(ablakCenter);
}
}
Végeredmény (a monitor közepén / felbontástól függetlenül/):
-
exit gomb működik
Ezzel megvagyunk, működik, de nem igazán elegáns ebben a pozícióban. További fontos, igazító tulajdonságokat állíthatunk be a...
setHorizontalAlignment();
setVerticalAlignment();
...metódusokkal, illetve a SwingConstants osztály importjával és felhasználásával:
import javax.swing.SwingConstants;
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.TOP);
Main.java
public class Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
class Window extends JFrame {
Window() {
super();
JFrame frame = new JFrame();
JLabel label = new JLabel();
label.setText("PJP - Penzes Java
Programming");
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.TOP);
Center center = new Center();
frame.setSize(400, 300);
frame.setTitle("PJP - Penzes Java
Programming");
center.setCenter(frame);
frame.setVisible(true);
}
}
Center.java
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;
public class Center {
void setCenter(JFrame frame) {
Point center =
GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
int x = (int) center.getX() -
(frame.getWidth() / 2);
int y = (int) center.getY() -
(frame.getHeight() / 2);
Point ablakCenter = new Point(x, y);
frame.setLocation(ablakCenter);
}
}
Végeredmény (a monitor közepén / felbontástól függetlenül/):
-
exit gomb működik
Láthatjuk, hogy az igazító metódusok is kiválóan működnek; például nézzük meg, ha mindent a középpontba állítunk:
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.CENTER);
Main.java
public class Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
class Window extends JFrame {
Window() {
super();
JFrame frame = new JFrame();
JLabel label = new JLabel();
label.setText("PJP - Penzes Java
Programming");
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.CENTER);
Center center = new Center();
frame.setSize(400, 300);
frame.setTitle("PJP - Penzes Java
Programming");
center.setCenter(frame);
frame.setVisible(true);
}
}
Center.java
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;
public class Center {
void setCenter(JFrame frame) {
Point center =
GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
int x = (int) center.getX() -
(frame.getWidth() / 2);
int y = (int) center.getY() -
(frame.getHeight() / 2);
Point ablakCenter = new Point(x, y);
frame.setLocation(ablakCenter);
}
}
Végeredmény (a monitor közepén / felbontástól függetlenül/):
-
exit gomb működik
Arra is van lehetőségünk, hogy a rendszer automatikusan méretezze a frame-et. Ez a pack() metódus segítségével történik, amely az alkomponens méretéhez fogja igazítani a frame méretét, de csakis akkor, ha előtte kivesszük a kódból a frame setSize() metódusát. Mivel azonban a label komponensnek most nincs fix, a kódba implementált mérete, ezért a végeredmény is érdekes lesz:
Main.java
public class Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
class Window extends JFrame {
Window() {
super();
JFrame frame = new JFrame();
JLabel label = new JLabel();
label.setText("PJP - Penzes Java
Programming");
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.TOP);
Center center = new Center();
frame.setTitle("PJP - Penzes Java
Programming");
center.setCenter(frame);
pack();
frame.setVisible(true);
}
}
Center.java
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;
public class Center {
void setCenter(JFrame frame) {
Point center =
GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
int x = (int) center.getX() -
(frame.getWidth() / 2);
int y = (int) center.getY() -
(frame.getHeight() / 2);
Point ablakCenter = new Point(x, y);
frame.setLocation(ablakCenter);
}
}
Végeredmény (a monitor közepén / felbontástól függetlenül/):
-
exit gomb működik
A frame mérete azonban szegélyeinél az egérrel növelhető, így nagyítás után benne meg fog jelenni a frame is, az alkomponens is:
Végeredmény (a monitor közepén / felbontástól függetlenül/):
-
exit gomb működik
-
nagyítás után: