Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 2 - Java GUI - Základní komponenty

V minulém díle, Java GUI, jsme si vytvořili naše první okno v Javě.

Nakonec jsem se rozhodl, že budu přidávat jednoduché prográmky, na kterých si vždy něco ukážeme. V následujících dvou dílech si vytvoříme jednoduchou kalkulačku. Dnes si přidáme nějaké komponenty a v příštím tutoriálu se vrhneme na událost. Kalkulačka bude mít jednu funkci a to sčítání. Bude obsahovat dvě textová pole, do kterých budeme zapisovat, tlačítko a label („štítek“), který bude vypisovat výsledek. Pojďme na to. :-)

Vše, co jsme vytvořili v minulém díle, budeme potřebovat. Otevřeme si třídu Gui. Deklarujeme v ní tyto objekty, ke kterým přidáme klíčové slovo private (budou tedy přístupné pouze uvnitř třídy). V konstruktoru třídy Gui je vytvoříme takto:

public class Gui extends JFrame{
    private JLabel vysledekLab;
    private JButton sectiBut;
    private JTextField cislo1Field;
    private JTextField cislo2Field;
    public Gui()
    {
       super("Kalkulačka");
       cislo1Field = new JTextField("1. číslo", 5);
       cislo2Field = new JTextField("2. číslo", 5);
       sectiBut = new JButton("Sečti");
       vysledekLab = new JLabel("Výsledek je: ");
    }

Všechny komponenty jsou objekty, to znamená, že mají své metody a při vytvoření se zavolá konstruktor.

První komponenty

JLabel je obyčejný štítek, do kterého můžeme umístit text – vysledekLab je jméno našeho labelu. Jako parametr přebírá nějaký řetězec (text).

JLabel nazevLabelu = new JLabel("Text na Labelu")

JTextField je pole pro zápis. My jsme si ho pojmenovali cislo1Field (pole pro první číslo). První jeho parametr je text, který se v něm objeví. Číslo za ním vyjadřuje velikost pole. Říká, že bude velké na 5 znaků.

JTextField nazevTextFieldu = new JTextField("Text v TextFieldu", 5)

JButton je obyčejné tlačítko. My jsme ho pojmenovali sectiBut. Parametrem je text, který má být na tlačítku.

JButton nazevTlacitka = new JButton("Text na tlačítku")

Pokud bychom teď spustili program, pořád by měl podobu prázdného okna. Zapomněli jsme na dvě důležité věci.

  • První je tzv. Layout neboli rozmístění komponent v okně. Java má osm layoutů. Podrobně se na ně podíváme jindy. Nám nyní bude stačit FlowLayout. FlowLayout všechno centruje a umísťuje od shora.
FlowLayout layout = new FlowLayout();
setLayout(layout);
  • Druhou věcí je ta, že musíme tyto komponenty do okna přidat. To dělá metoda add(), která bere jako parametr komponentu. Náš kód bude nyní vypadat takto.
public class Gui extends JFrame{

    private JLabel vysledekLab;
    private JButton sectiBut;
    private JTextField cislo1Field;
    private JTextField cislo2Field;

    public Gui()
    {
       super("Kalkulačka");
       FlowLayout layout = new FlowLayout();
       setLayout(layout);

       cislo1Field = new JTextField("1. číslo", 5);
       add(cislo1Field);

       cislo2Field = new JTextField("2. číslo", 5);
       add(cislo2Field);

       sectiBut = new JButton("Sečti");
       add(sectiBut);

       vysledekLab = new JLabel("Výsledek je: ");
       add(vysledekLab);
    }

Jelikož není dobré přidávat komponenty přímo do okna, vytvoříme tzv. JPanel. Jedná se o panel, do kterého se umísťují další komponenty. Drží nám je v podstatě pohromadě. Pro ukázku vytvoříme dva, pojmenujeme je třeba panel1 a panel2. Panel tvoříme takto:

JPanel nazevPanelu = new JPanel()

Panely mají metodu add(), která jako parametr přebírá komponent, který v ní mají být umístěné. Kód tedy vypadá takhle:

public class Gui extends JFrame{

    private JLabel vysledekLab;
    private JButton sectiBut;
    private JTextField cislo1Field;
    private JTextField cislo2Field;
    private JPanel panel1;
    private JPanel panel2;

    public Gui()
    {
        super("Kalkulačka");
        FlowLayout layout = new FlowLayout();
        setLayout(layout);

        panel1 = new JPanel();
        add(panel1);

        panel2 = new JPanel();
        add(panel2);

        cislo1Field = new JTextField("1. číslo", 5);
        panel1.add(cislo1Field);

        cislo2Field = new JTextField("2. číslo", 5);
        panel1.add(cislo2Field);

        sectiBut = new JButton("Sečti");
        panel1.add(sectiBut);

        vysledekLab = new JLabel("Výsledek je ");
        panel2.add(vysledekLab);
    }

Vidíme, že pokud okno zmenšujeme, drží komponenty v témže panelu pohromadě.

Ukážeme si ještě poslední věc a to jak přidat panelu barvu. Jedná se o metodu setBackground() s parametrem barvy. Například "Color.red" – tedy červené. Můžeme si také pomocí RGB nadefinovat vlastní barvu. Vytvoříme tedy instanci třídy Color (naši barvu), která jako parametry bere hodnoty RGB:

Color nazevBarvy = new Color(150, 75, 130)

Výsledný kód teď vypadá takto:

public class Gui extends JFrame{

    private JLabel vysledekLab;
    private JButton sectiBut;
    private JTextField cislo1Field;
    private JTextField cislo2Field;
    private JPanel panel1;
    private JPanel panel2;

    public Gui()
    {
        super("Kalkulačka");
        FlowLayout layout = new FlowLayout();
        setLayout(layout);

        Color barva = new Color(150, 75, 130);

        panel1 = new JPanel();
        panel1.setBackground(Color.red);
        add(panel1);

        panel2 = new JPanel();
        panel2.setBackground(barva);
        add(panel2);

        cislo1Field = new JTextField("1. číslo", 5);
        panel1.add(cislo1Field);

        cislo2Field = new JTextField("2. číslo", 5);
        panel1.add(cislo2Field);

        sectiBut = new JButton("Sečti");
        panel1.add(sectiBut);

        vysledekLab = new JLabel("Výsledek je ");
        panel2.add(vysledekLab);
    }

Obsah metody main necháme stejný. Ukážu ještě jednu zajímavou metodu. Když chceme mít velikost okna přesně na komponenty, které v ní máme, můžeme použít metodu pack() na našem objektu okno. Takto tedy bude vypadat metoda main:

public static void main(String[] args) {
    Gui okno = new Gui();
    okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    okno.setVisible(true);
    okno.pack();
    okno.setLocationRelativeTo(null);

}

Výsledek vypadá nějak takhle:

kalkulacka1 - Java Swing bez grafického návrháře

To je pro dnešek všechno.

Příště, Java GUI - událost, si řekneme něco o událostech v Javě a "přinutíme" naši kalkulačku, aby sčítala. :-).


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 648x (15.03 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Java GUI
Všechny články v sekci
Java Swing bez grafického návrháře
Přeskočit článek
(nedoporučujeme)
Java GUI - událost
Článek pro vás napsal Samik11
Avatar
Uživatelské hodnocení:
30 hlasů
Autor se věnuje primárně programování v jazyce Java. Nestraní se ani C# nebo PHP.
Aktivity