Gyakorlati alapok IV.
Végre ablakozunk! (AWT, Swing, JavaFX)
Label további tulajdonságai
Az előző 2 fejezetben...
...alapszinten megismertük a Label-objektumot és legegyszerűbb működtető metódusait. Ebben a fejezetben folytatjuk ismerkedésünket néhány további tulajdonságával, rutinjával.
Bevezetésképpen induljunk ki az egyik releváns alapkódból:
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
A következő kódban egyesítünk egy középrezárt label objektumot egy szintén középrezárt ikonnal. Ehhez először nyilvánvalóan lementjük az ikont egy dedikált helyre (itt Y:/search.jpg), majd 2 függvényhívással létrehozzuk és összehangoljuk a objektumokat:
Icon icon = new ImageIcon("Y:/search.jpg");
JLabel label = new JLabel("", icon, JLabel.CENTER);
Main.java
public class Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import java.awt.*;
import javax.swing.*;
class Window extends JFrame {
Window() {
super();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Center center = new Center();
frame.setSize(400, 300);
frame.setTitle("PJP - Penzes Java Programming");
Icon icon = new ImageIcon("Y:/search.jpg");
JLabel label = new JLabel("", icon, JLabel.CENTER);
frame.add(label);
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 a label szövegét paraméterként üresen hagytuk ("")...
JLabel label = new JLabel("", icon, JLabel.CENTER);
...azonban szöveggel kitöltve...
JLabel label = new JLabel("Search!", icon, JLabel.CENTER);
...természetesen az is meg fog jelenni a frame-en:
A betű (font) alaptulajdonságait a setFont() függvény segítségével állíthatjuk be. Például változtassuk meg a fonttípust, a betűméretet és állítsuk a szöveget félkövérre:
label.setFont(new Font("Verdana", Font.BOLD, 21));
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);
label.setFont(new Font("Verdana", Font.BOLD, 21));
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
A label háttérszínét a setBackground(Color.x) függvénnyel állíthatjuk be, ám előtte egy true utasítással aktiválnunk kell a setOpaque() függvényt is, mivel a label objektumok alapértelmezésben nem átlátszóak. Az utóbbi függvény feladata tehát a label komponens átlátszóvá tétele (például label1.setOpaque(true);), másként a setBackground(Color.x) hívásának nem lesz eredménye.
A setBackground(Color.x) függvény használatát a 2 db frame című fejezetből vett példa alapján nézzük meg, amely során a 2 label háttérszíne lesz megváltoztatva:
label1.setOpaque(true);
label1.setBackground(Color.YELLOW);
label2.setOpaque(true);
label2.setBackground(Color.WHITE);
Jól láthatjuk, hogy a háttérszín csakis a beállított határokig változik meg:
label1.setBounds(50, 50, 300, 20);
label2.setBounds(50, 75, 150, 20);
Main.java
public class Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import java.awt.*;
import javax.swing.*;
class Window extends JFrame {
Window() {
super();
JFrame frame = new JFrame();
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
label1.setText("PJP - Penzes Java Programming...");
label2.setText("...is the best of all...");
label1.setBounds(50, 50, 300, 20);
label2.setBounds(50, 75, 150, 20);
label1.setOpaque(true);
label1.setBackground(Color.YELLOW);
label2.setOpaque(true);
label2.setBackground(Color.WHITE);
frame.add(label1);
frame.add(label2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Center center = new Center();
frame.setSize(400, 300);
frame.setTitle("PJP - Penzes Java Programming");
center.setCenter(frame);
frame.setLayout(null);
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