WebElektronika

Swing alkalmazás készítése I.

person access_time 2014.03.28.
Elkészítjük a Java nyelv segítségével az első swing-es alkalmazásunkat. Nem törekszünk a Java nyelv részletes elméleti szintű bemutatására, inkább a gyakorlati alkalmazásra fektetjük a hangsúlyt.


A magyarul kapható, a Java nyelvet ismertető könyvek meghatározó részénél nem kap szerepet ennek az objektumorientált nyelvnek a gyakorlati alkalmazásának a bemutatása. Ezért ebben a cikkünkben (és  a későbbiekben is) inkább erre helyezzük a hangsúlyt.
 

Swing alkalmazás készítése öröklés nélkül

Először úgy készítünk egy swing-es alkalmazást, hogy nem használjuk fel az öröklést, tehát nem vesszük (örökléssel) elő a JFrame osztály metódusait. De ezeket viszont még is használnunk kell. Mi a megoldás? Példányosítsuk a JFrame osztályt! Indítsuk el a NetBeans-t, válasszuk az új projectkészítésnél a Java alkalmazást és írjuk be a következő kódot.

package javaswing1;

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class JavaSwing1 {

    JButton jb1;
    JButton jb2;
    JFrame jfr;
    
    private  void Swing1(){
        jfr = new JFrame();
        jb1 = new JButton("Katt ide");
        jb2 = new JButton("Vagy ide");
        jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jfr.setTitle("WebElektronika");
        jfr.setSize(350, 250);
        jfr.add(jb1);
        jfr.add(jb2);
        
        jfr.setVisible(true);
    }
    
    public static void main(String[] args) {
        JavaSwing1 js = new JavaSwing1();
        js.Swing1();
    }
}


Ha futtatjuk ezt a programot (1. ábra, "F6" megnyomása), akkor azt tapasztaljuk, hogy a második nyomógomb (jb2) teljesen eltakarja a "jb1"-et. Miért? Hogyan tudjuk ezt elkerülni?


1. ábra   Futási eredmény
 

Az egyik lehetséges megoldás a layout vezérlők alkalmazása. Használhatunk akár FlowLayout-ot, de akár GridLayout vezérlőt is. Egészítsük ki a FlowLayout osztály példányosításával a programunkat (tegyük be a  setSize() után), illetve ezt a példányt ezután adjuk át paraméternek a setLayout metódus meghívásával (2. ábra).


2. ábra   Layout vezérlő használata
 

Ha a FlowLayout vezérlőt használjuk, akkor a vezérlők a felrakás sorrendjét követően egymás mellé kerülnek (3. ábra).


3. ábra   FlowLayout használata
 

Használjuk a GridLayout osztályt a FlowLayout helyett, most ennek a példányát adjuk át a setLayout metódusnak az "fl" helyett. Azt tapasztaljuk, hogy a két nyomógomb egymás mellé került (4. ábra).


4. ábra   GridLayout használata

 

Swing alkalmazás készítése örökléssel

Jobb megoldás az, ha a JFrame-t nem példányosítjuk, hanem ebből az osztályból örököltetünk. Nézzük meg a következő példát, amelyben az öröklést használjuk fel. Egyébként a példa abból a szempontból nem szerencsés, hogy a main metódusban a saját osztályt példányosítjuk. Későbbi példáinkban ezt a módszert kerülni fogjuk.

package javaswing2;

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class JavaSwing2 extends JFrame{

    JButton jb1;
    JButton jb2;
    JLabel jl1;
    JTextField jt1;

    public JavaSwing2()
    {
        super("WebElektornika");
        setSize(350, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        FlowLayout fl = new FlowLayout();
        setLayout(fl);
        jb1 = new JButton("Katt ide");
        jb2 = new JButton("Új példa");
        jl1 = new JLabel("webelektronika.com");
        jt1 = new JTextField("Tesztszöveg",20);
        add(jb1);
        add(jb2);
        add(jl1);
        add(jt1);
        setVisible(true);
    }
    public static void main(String[] args) {

        JavaSwing2 js = new JavaSwing2();
        js.show();
    }    
}

Futtassuk most az alkalmazásunkat az "F6" segítségével (5. ábra).


5.ábra   Futási eredmény
 

A Java-val foglalkozó következő cikkünkben megnézzük azt, amikor a projektünkben egy másik osztály segítségével hozzuk létre a Swing-es ablakunkat.
Továbbá kitérünk arra is, hogy hogyan lehet tetszőlegesen elrendezni a felületünkön a különböző vezérlőket, grafikai elemeket.