Bevezetés
JAVATM-ban a gombokat a java.awt.Button és a javax.swing.JButton osztályok
valósítják meg. A java.awt.Button osztály kinézetre a klasszikusabb vonalat képviseli,
a javax.swing.JButton pedig már a modernebbet. Más különbség is van a két osztály között:
a java.awt.Button osztályból származó objektumoknak csak a szöveget adhatunk, de beállíthatjuk
a háttér színét, állapotát és más attribútumait. A javax.swing.JButton osztály lehetőséget ad arra, hogy a
gombon kis ikont helyezzünk el. Ezáltal érdekesebbé, mindenki számára egyértelművé tehetjük a felhasználói felületünket.
Az alábbi példa egy-egy gombot mutat be. A programbeli gombok felváltva lesznek aktívak és
inaktívak. A felső gomb színe és felirata is változik.
Objektumok létrehozása, inicializállása
A gombok feliratait (JButton esetében az ikont is) megadhatjuk már konstruktorban, illetve később a
setLabel(String) függvénnyel. A gombok háttér színét a setBackground(Color) függvénnyel állíthatjuk be.
Eldönthetjük, hogy egy gomb állapota aktív vagy inaktív legyen. Ennek beállításához a setEnabled(boolean) metódust kell használni.
Ha egy komolyabb alkalmazást fejlesztünk, akkor szükség lehet arra, hogy bizonyos gombokat, kezelőelemeket letiltsunk, hogy a felhasználók ne
nyomhassák meg azokat.
private Button button1;
private JButton button2;
...
button1 = new Button( "Click me!" );
button2 = new JButton( "I am a JButton" );
button1.setBackground( Color.GREEN );
button2.setEnabled( false );
// add action listener
button1.addActionListener(this);
button2.addActionListener(this);
Applet esetén nem adhatunk meg könnyen külső fájlt, mint például ikont. Frame-ek esetében azonban ennek nincs
akadálya.
button2 = new JButton( new ImageIcon("pointer_hand.jpg") );
Eseménykezelés
A gombokhoz az ActionListener eseményfigyelőt rendelhetjük. Abban az osztályban, ahol az eseményeket kezeljük
implementálni kell a void actionPerformed(ActionEvent) függvényt. Itt kell leírnunk azt, mit csináljon a program, ha
egy gombot megnyomunk. Jelen példában bármelyik gombot nyomjuk meg, ugyanaz az eseménysor hajtódik végre. Ebben az esetben
nem lenne szükség arra, hogy megnézzük, melyik gomb lett megnyomva, de a kezdőknek talán könnyebb így megérteni a gombok eseménykezelését.
Az eseménykezeléskor az egyes gombokhoz egy String -et is rendelhetünk a setActionCommand(String) függvénnyel.
Nincs olyan megkötés, hogy minden egyes gombhoz külön sztringet kell rendelni, ezért például ha azt akarjuk elérni, hogy néhány gomb
közül bármelyiket megnyomva egy esemény végrehajtódjon, akkor ezekhez a gombokhoz ugyanazt a sztringet kell hozzárendelni, és a
void actionPerformed(ActionEvent) függvényben lekezelni. Az ActionEvent osztály String getActionCommand()
metódusának segítségével lekérdezhetjük az eseményhez rendelt sztring-parancsot (ha van). Az ActionEvent osztály
Object getSource() metódusával csak azt kapjuk meg, hogy melyik objektum hozta létre az eseményt.
// event handling
public void actionPerformed(ActionEvent e) {
boolean b1_enabled = button1.isEnabled();
if (e.getSource().equals(button1)) {
if ( b1_enabled == true ) {
button1.setEnabled( false );
button2.setEnabled( true );
button1.setBackground( Color.BLUE );
button1.setLabel( "I am disabled." );
} else {
button1.setEnabled( true );
button2.setEnabled( false );
button1.setBackground( Color.GREEN );
button1.setLabel( "Click me!" );
}
}
if (e.getSource().equals(button2)) {
// now the event handling is same as in previous case
if ( b1_enabled == true ) {
button1.setEnabled( false );
button2.setEnabled( true );
button1.setBackground( Color.BLUE );
button1.setLabel( "I am disabled." );
} else {
button1.setEnabled( true );
button2.setEnabled( false );
button1.setBackground( Color.GREEN );
button1.setLabel( "Click me!" );
}
}
}
|