WebElektronika

JSlider használata a Java nyelvben (ChangeListener)

person access_time 2014.06.12.
Folytatjuk a Java-ban használt swing vezérlők megismerését. Megnézzük most a JSlider (csúszka) használatát. Felteszünk a swing-es felületünkre néhány csúszkát, és hozzájuk rendelünk eseményeket.


Indítsuk el a NetBeans-t és hozzunk létre egy új projektet. A projekt neve legyen javaslider1. Adjunk a projektünkhöz még egy osztályt, a slider1-et. Ebben az osztályban fogjuk megvalósítani a felületünket, illetve azt az eseményt (eseményeket), amely a csúszka értékváltozását fogja figyelni.

A JSlider osztálynak, amelynek a példányosításával hozunk létre egy csúszkát (tehát egy új példányt), hat konstruktora van (1. ábra). Tehát a példányosítás során meg tudjuk adni a létrehozandó csúszkának az orientációját (függőleges/vízszintes), minimális/maximális értékét, de akár a kezdő értékét is.


1. ábra   A JSlider konstruktor túlterhelése
 

Írjuk be a slider1.java file-ba (tehát a slider1 osztályba) a következő kódot.

package javaslider1;

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class slider1 extends JFrame {
    JSlider jsl1, jsl2;
    JLabel jl1;

    public slider1(){
        super("JSlider példa");
    
    setSize(350,250);
    
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    FlowLayout fl = new FlowLayout();
    
    setLayout(fl);
        jsl1 = new JSlider();
        jsl2 = new JSlider(JSlider.VERTICAL,1,200,50);
        jl1 = new JLabel("Érték");
    
    add(jsl1);
    
    add(jsl2);
        add(jl1);
        
    
    //beállítom az első csúszka megjelenését
    
    jsl1.setMajorTickSpacing(10);
    
    jsl1.setMinorTickSpacing(5);
    
    jsl1.setPaintTicks(true);
    
    jsl1.setPaintLabels(true);

        jsl1.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                jl1.setText(""+jsl1.getValue());
            }
        });
       
        jsl2.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                jl1.setText(Integer.toString(jsl2.getValue()));
            }
        });
    
    setVisible(true);
    } 
}

Két csúszkát (jsl1, jsl2) fogunk feltenni a felületünkre, illetve egy JLabel osztályból példányosított címkét (jl1). A jsl2 csúszkát függőlegesen tesszük fel a JFrame-re, nem a default min/max-ot használjuk fel, illetve a kezdőérték 50 lesz.
A jsl1 csúszkának beállítjuk az értékeinek a megjelenítését 10/5 lépésenként (setMajorTickSpacing / setMinorTickSpacing).

Ezután létrehozunk egy-egy eseményt (stateChanged) és feliratkozunk rá. Az esemény törzsében pedig beállítjuk a címkének (jl1) a Text tulajdonságát a setText() metódusnak a segítségével. A JSlider osztályból példányosított vezérlőnek létezik a getValue() metódusa, amely int típusú, azaz egész számot, azaz a csúszka aktuális értékét adja vissza. Viszont nekünk sztring típus kell, hiszen a setText() paraméterlistájában sztringet kell megadni.
Vegyük észre, hogy a setText metódus paraméterlistájában kétféle megoldás látható. A jsl1-nél egy üres sztringhez adunk hozzá egy int típusú számot, míg a jl2-nél a toString() metódust hívjuk segítségül. Ez a szebb megoldás, ezentúl ezt fogjuk használni.

A JavaSlider1 osztályban található main metódusban példányosítsuk a slider1 osztályt (s1), majd hívjuk meg ennek a példánynak a show() metódusát.

package javaslider1;

public class JavaSlider1 {

    public static void main(String[] args) {
        slider1 s1 = new slider1();
        s1.show();
    }
}

 

Indítsuk el az alkalmazásunkat, nyomjuk meg az F6 funkcióbillentyűt. A következő kép fogad minket (2. ábra).


2. ábra   A program elindítása után (kezdőkép)
 

Változtassuk meg a csúszkák állapotát! Az újabb eredmény a 3. ábrán látható. Bármelyik csúszkának tudjuk változtatni az értékét úgy, hogy a megváltoztatásának pillanatában már látható is az adott csúszka értéke a JLabel osztályból példányosított vezérlőn (jl1).


3. ábra   Megváltoztak a csúszkák értékei