Mi van az ablakban?

Eddig van egy üres ablakunk, ami már elég nagy hogy látszódjon:

public class HelloGui {
    public static void main(String[] args) {
        JFrame frame=new JFrame();
        frame.setSize(200, 100);
        frame.setTitle("Elso program");
        frame.setVisible(true);
    }
}

Megtanultad, hogyha valami tulajdonságát meg akarod változtatni az ablaknak, akkor keresni kell hozzá egy settert. Igazán nem nagy dolog.

De hogyan lehet erre szöveget kitenni? Van valami print ide is? Sajnálom, de nincs.

Sokkal jobb van helyette, hiszen egy ablakban nem csak szövegek lehetnek, hanem lehetnek gombok, lista-választók, táblázatok, képek és megannyi dolog. Ezt a sok bizbaszt régen úgy nevezték, hogy gadget (ami tényleg azt jelenti, hogy mütyűr, bizbasz). Manapság widgetnek, vezérlőnek, vagy komponensnek nevezzük azokat a dolgokat, amiket egy ablakba teszünk.

Néhány vezérlő ami rendelkezésünkre áll

Ez már kezd hasonlítani arra, amit egy igazi programban szoktunk látni, nem? Okés, még nem teljesen csili-vili, de sokkal jobb, mint a konzolos progik világa.

Ahhoz hogy egy sima szöveges cimkét kitegyünk, a cimke osztályra lesz szükség, melynek neve nem kis találékonysággal JLabel. Konstruktor, stb... Álljunk meg egy pillanatra, nézd már milyen sok konstruktora van:

Húú de sok konstruktor

Van neki olyan konstruktora is, amibe pontosan egy Stringet vár. Ez kell nekünk!

public class HelloGui {
    public static void main(String[] args) {
        JFrame frame=new JFrame();
        frame.setSize(200, 100);
        frame.setTitle("Elso program");
        frame.setVisible(true);

        JLabel label=new JLabel("Gipsz Jakab");
    }
}

Őőő... neked már látszik a label? Nekem még nem :)

Vizuális konténerek

Emlékszel a konténeres fejezetre? A konténer arra volt jó, hogy sok egyforma típusú dolgot tárolt. Nos, a vizuális konténerek meg sok vizuális vezérlőt tárolnak.

Konténerek és komponensek

A JFrame tehát egy konténer. Meg a JPanel is (ez egy téglalap alakú terület egy ablakon belül, amibe vezérlőket (komponenseket) lehet tenni.

Mit csinálunk a konténerekkel? Belerakunk dolgokat! Akkor tehát vonjuk le a logikus következtetést: ha a labelünket beletesszük a frame-be, akkor meg fog benne jelenni. Legalábbis ez lenne a logikus, nem?

public class HelloGui {
    public static void main(String[] args) {
        JFrame frame=new JFrame();
        frame.setSize(200, 100);
        frame.setTitle("Elso program");
        frame.setVisible(true);

        JLabel label=new JLabel("Gipsz Jakab");
        frame.add(label);
    }
}

Feladat: Próbáld ezt ki. Azt is próbáld meg, hogy mi történik, ha a label szövegét a setText metódusával megváltoztatod!

Feladat: Vajon mi történik, ha teszel bele egy ilyen sort:

label.setForeground(Color.red);

Próbáld meg kékre, zöldre is! Használd a Ctrl+Space autocomplete-t a Color utáni pont után, hogy felfedezd a színeket!

Feladat: Vajon mi történik, ha teszel bele egy ilyen sort:

label.setToolTipText("Ide nézz!");

Ezután indítsd el, és húzd az egeret a megjelenő ablakban lévő label szövege fölé. Hagyd ott egy kicsit, és valami fog történni - aminek a neve tooltip.