Bevezetés
Lenyíló listákat általában akkor alkalmazunk, amikor kis helyre kell viszonylag sok elemű listát
elhelyezni a grafikus felületen. JAVATM-ban a lenyíló listákat a java.awt.Choice és a
javax.swing.JComboBox osztály implementálja. A többi Swing csomagba tartozó osztályhoz hasonlóan a
JComboBox osztály több lehetőséget biztosít a feljesztők számára.
Az alábbi példában bemutatásra kerül, hogyan lehet nagyon egyszerűen használni a lenyíló listákat.
A példában a Choice osztályt használom, de hasonlóképpen lehet megoldani a problémát JComboBox
objektummal is.
Objektumok létrehozása, inicializállása
Az egyik nagy különbség a Choice és a JComboBox osztály között, hogy az utóbbi
Object -eket tárol, míg a Choice osztály csak String -eket tárol. Tehát
aszerint érdemes választani a két osztály közül, hogy mit szeretnénk tárolni a listában. Jelen példában csak
String -ek vannak tárolva, ezért is esett a választás a Choice osztályra.
Először létrehozzuk a lenyíló listát, a Choice osztálynak egyetlen (alapértelmezett) konstrultora van, a
JComboBox példány létrehozásakor megadhatunk egy vektort, vagy akár egy Object[] tömböt is.
private Choice choice;
...
choice = new Choice();
A listába ezután beszúrjuk az elemeket. A példában elég sok számot kellene beszúrni, ezt elérhetjük úgy is, ha egy for-ciklusba szervezzük a számok beszúrást.
Az fontos, hogy nem számként, hanem sztringként kell beszúrni. Néhány listaelemet azonban kézzel kell beszúrni. Az add(String ) vagy a addItem(String )
függvényekkel szúrhatunk új elemet a listába. Ekkor az új elemek a lista végére kerülnek. Az insert(String, int) függvény adott pozícióra szúr be elemet.
A JComboBox osztály esetében az addItem(Object) és a insertItemAt(Object, int) áll rendelekezésünkre.
choice.add( "-----" );
choice.add( "< 20" );
for ( int i = 20; i < 50; i++ ) {
choice.add( "" + i ); // convert int to string
}
choice.add( "> 50" );
Elem törlésére a Choice osztály esetében a remove(int) , remove(String) és
a removeAll() függvényeket használhatjuk, JComboBox esetében ugyanezt a removeItem(Object) , removeItemAt(int) és
a removeAllItems() függvényekkel tehetjük meg.
A kiválasztott elemet a Choice esetében az int getSelectedIndex(int) , a String getSelectedItem() és a Object[] getSelectedObjects()
kérdezhetjük le, JComboBox esetében viszont az int getSelectedIndex() , Object getSelectedItem() és a Object[] getSelectedObjects() függvényeket
használhatjuk.
Eseménykezelés
A Choice objektumokhoz csak ItemListener -t, a JComboBox objektumokhoz viszont
ActionListener -t is adhatunk. Abban az osztályban, ahol az eseményeket kezeljük, implementálni kell a
void actionPerformed(ActionEvent) és az void itemStateChanged(ItemEvent) függvényeket.
Jelen esetben a listaelem kiválasztásakor csak a címke szövegét változtatjuk meg.
choice.addItemListener( this );
...
// event handling
public void itemStateChanged( ItemEvent e ) {
// now only the choice is the event source
String selectedItem = choice.getSelectedItem();
if ( selectedItem == "-----" ) {
label.setText( "Nothing selected." );
} else if ( selectedItem == "< 20" ) {
label.setText( "You are very young!" );
} else if ( selectedItem == "> 50" ) {
label.setText( "Really? Are you over 50?" );
} else {
label.setText( "Really? Are you " + selectedItem + " years old?" );
}
}
|