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/):

www.informatika-programozas.hu - Frame

 

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:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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/):

www.informatika-programozas.hu - Frame + Label

 

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);

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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/):

www.informatika-programozas.hu - Frame + Label

 

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);

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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/):

www.informatika-programozas.hu - Frame + Label

 

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:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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/):

www.informatika-programozas.hu - Frame + Label

 

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/):

www.informatika-programozas.hu - Frame + Label