Gyakorlati alapok IV.
Végre ablakozunk! (AWT, Swing, JavaFX)
Frame pozícionálása
Az előző, Frame című fejezetben megalkottunk egy frame-et:
Végeredmény (a monitor bal felső oldalán):
Szinte azonnal látjuk a problémát: futtatáskor a frame mindig a monitor bal felső oldalán fog kirajzolódni.
A megoldás, hogy gyorsan keresünk a Frame osztályban igazító, pozícionáló metódusokat. Az első rögtön elénk is ugrott:
setLocation(int x, int y)
Építsük is be a gyorsan a kódba:
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.setLocation(500, 250);
frame.setTitle("PJP
- Penzes Java Programming");
frame.setVisible(true);
}
}
Végeredmény (a monitor bal felső sarkától 500 és 250 pixelre):
Van egy másik metódusunk is, amelyik teljesen egybefogja a frame 4 alaptulajdonságát:
setBounds(int x, int y, int width, int height)
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.setBounds(500, 250, 400, 300);
frame.setTitle("PJP
- Penzes Java Programming");
frame.setVisible(true);
}
}
Végeredmény (a monitor bal felső sarkától 500 és 250 pixelre):
Ám ezenfelül a koordináták más, külső osztályok segítségével is eltárolhatók. Ilyen például a Dimension osztály (java.awt.Dimension), amelyik a frame méretét (is) menedzselheti...
Dimension
dimension = new Dimension();
dimension.width = 400;
dimension.height = 300;
frame.setSize(dimension);
...és a Point osztály (java.awt.Point), amelyik a pozíciót:
Point point
= new Point();
point.x = 500;
point.y = 250;
frame.setLocation(point);
Nézzük meg az így módosított Java-kódot:
Main.java
public class Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import
java.awt.Dimension;
import java.awt.Point;
import javax.swing.JFrame;
class Window extends JFrame {
Window() {
super();
JFrame frame = new JFrame();
Dimension dimension = new
Dimension();
dimension.width = 400;
dimension.height = 300;
frame.setSize(dimension);
Point point = new Point();
point.x = 500;
point.y = 250;
frame.setLocation(point);
frame.setTitle("PJP - Penzes Java
Programming");
frame.setVisible(true);
}
}
Végeredmény (a monitor bal felső sarkától 500 és 250 pixelre):
Sőt, létezik egy olyan további külső, Rectangle nevű osztály is (java.awt.Rectangle), amelyik a setBounds() metódushoz hasonlóan, de persze már külön metódusokban képes minden frame alaptulajdonságot eltárolni:
Rectangle
rectangle = new Rectangle();
rectangle.x = 500;
rectangle.y = 250;
rectangle.width = 400;
rectangle.height = 300;
frame.setBounds(rectangle);
Main.java
public class Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import
java.awt.Rectangle;
import javax.swing.JFrame;
class Window extends JFrame {
Window() {
super();
JFrame frame = new JFrame();
Rectangle rectangle = new
Rectangle();
rectangle.x = 500;
rectangle.y = 250;
rectangle.width = 400;
rectangle.height = 300;
frame.setBounds(rectangle);
frame.setTitle("PJP - Penzes Java
Programming");
frame.setVisible(true);
}
}
Végeredmény (a monitor bal felső sarkától 500 és 250 pixelre):