JAVATM GUI TUTORIAL

Gombok

JAVATM GUI Tutorial > Gombok   |   Applet   Forráskód   Letöltések

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

Forráskód

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class ButtonExampleApplet extends JApplet implements ActionListener { private Button button1; private JButton button2; private JPanel mainPanel; public void buildGui() { mainPanel = new JPanel(); button1 = new Button( "Click me!" ); button2 = new JButton( "I am a JButton" ); add(mainPanel); mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); mainPanel.add(button1); mainPanel.add(button2); button1.setBackground( Color.GREEN ); button2.setEnabled( false ); // add action listener button1.addActionListener(this); button2.addActionListener(this); } // 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!" ); } } } public void init() { buildGui(); repaint(); } }

Letöltés

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



Vissza a lap tetjére