Gyakorlati alapok IV.

Végre ablakozunk! (AWT, Swing, JavaFX)

 

Frame bezárása

 

Eddig lappangott egy szörnyű nagy titok programjainkban: a frame bár megjelent szépen középre pozícionálva...

 

Végeredmény (a monitor közepén / felbontástól függetlenül/):

 

www.informatika-programozas.hu - Frame

 

...sőt rányomhattunk az aktiváláskor piros bezáró gombra is (X), amely eseményre a frame eltűnt, ám mindez csupán csalóka látszat volt, mert programunk valójában futott tovább! Ezt bizonyítja azon tény, hogy a futtatást leállító gomb...

 

www.informatika-programozas.hu - Stop!

 

piros, azaz aktív maradt. Mi történik itt?

 

Tulajdonképpen még nem kezeltük le első eseményünket, amely ezen a szinten egyáltalán már előfordulhat, ez pedig a bezáró gomb (X) Close eseménye. Alapértelmezésben a Java-rendszer ehhez gombhoz csak elrejtést párosít (Hide) és ezt láthattuk akkor, ha rákattintottunk. Ez a parancs viszont nem állítja le automatikusan programunkat, annak felülírásához kódunkba egy újabb sort kell illesztenünk:

 

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

Észrevehetjük benne a konkrét bezáró parancsot: JFrame.EXIT_ON_CLOSE, amely voltaképpen egy elegáns, de határozott System.exit() hívás (A totálisan destruktív magatartás: a System.exit() metódus című fejezet).

 

Kódcsontvázunk ezzel tehát egy újabb funkcióval bővült. 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;

class Window extends JFrame {
    Window() {
        super();
        JFrame frame = new JFrame();
        Center center = new Center();
        frame.setSize(400, 300);
        frame.setTitle("PJP - Penzes Java Programming");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        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

 

A setDefaultCloseOperation() metódus más paramétereket is képes fogadni, ezek nemcsak JFrame, hanem JInternalPane és JDialog komponensek esetében is felhasználhatók:

Természetesen a System.exit() metódus közvetlen hívásával is bezárhatjuk az alkalmazást. Alább például létrehozunk 1 frame-et és 5 másodperc várakozás után balesetmentesen megszüntetjük:

 

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;

class Window extends JFrame {
    Window() {
        super();
        JFrame frame = new JFrame();
        Center center = new Center();
        frame.setSize(400, 300);
        frame.setTitle("PJP - Penzes Java Programming");
        center.setCenter(frame);
        frame.setVisible(true);
        try {
            Thread.sleep(5000);
            System.exit(0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

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