JAVATM GUI TUTORIAL

Lenyíló lista

JAVATM GUI Tutorial > Lenyíló lista   |   Applet   Forráskód   Letöltések

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?" ); } }

Forráskód

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class ChoiceExampleApplet extends JApplet implements ItemListener { private Choice choice; private JPanel mainPanel; private JLabel label; public void buildGui() { mainPanel = new JPanel(); mainPanel.setLayout( new BorderLayout() ); choice = new Choice(); label = new JLabel( "Nothing selected." ); this.getContentPane().add( mainPanel ); mainPanel.add( choice, BorderLayout.CENTER ); mainPanel.add( label, BorderLayout.SOUTH ); mainPanel.add( new JLabel( "Choose your age:" ), BorderLayout.NORTH ); choice.add( "-----" ); choice.add( "< 20" ); for ( int i = 20; i < 50; i++ ) { choice.add( "" + i ); // convert int to string } choice.add( "> 50" ); 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?" ); } } public void init() { buildGui(); repaint(); } }

Letöltés

Fordítás J2SDK 1.4 vagy magasabb verziójával.
# > javac ChoiceExampleApplet.java
Applet: ChoiceExampleApplet.java
Stand-alone változat: ChoiceExample.java



Vissza a lap tetjére