package elte.java2_utikalauz5.gui;
/**
Egyszerű felhasználói felület faktoriális számító példaprogramunkhoz.

A szövegmezőbe beírt szám faktoriálisa egy gomb megnyomásakor fog megjelenni.
@link.forrásfájl {@docRoot}/../data/gui/src FaktorialisGUI.java
@link.letöltés {@docRoot}/../data/gui FaktorialisGUI.jar
@since Java 2 Útikalauz programozóknak 1.3
*/
class FaktorialisGUI implements java.awt.event.ActionListener {
/** A kiindulási szám a faktoriális számításhoz. */
private java.awt.TextField szám = //beviteli szövegmező
new java.awt.TextField(6); //legalább 6 karakter széles
/** Faktoriális számítás eredményét megjelenítő címke. */
private java.awt.Label eredmény = //eredménymegjelenítő cimke létrehozása
new java.awt.Label("=");
/**
GUI-t felépítő konstruktor.
@param felület a felhasználói felületet tartalmazó konténer
*/
private FaktorialisGUI(java.awt.Container felület) {
felület.setLayout(new java.awt.FlowLayout()); //komponensek egymás után
felület.add(szám); //szövegmező felvétele az ablakba
java.awt.Button nyomógomb = new java.awt.Button("!"); //nyomógomb
felület.add(nyomógomb); //nyomógomb felvétele az ablakba
nyomógomb.addActionListener(this); //nyomógomb megnyomásának figyelése
felület.add(eredmény); //eredménymegjelenítő cimke felvétele az ablakba
}
/**
Nyomógomb megnyomásakor a faktoriális kiszámítása.
@param esemény A gombnyomást reprezentáló eseményobjektum.
*/
public void actionPerformed(java.awt.event.ActionEvent esemény) {
try { //faktoriális kiszámítása
long maxi = Long.parseLong( szám.getText() ); //szám kiolvasása
long faktoriális = 1; //faktoriálisszámítás túlcsodulás figyeléssel
for (long i = 2; i<=maxi && faktoriális>0; i++) faktoriális *= i;
if (faktoriális<=0) throw new Exception("Túlcsordulás!");
eredmény.setText("= "+faktoriális); //eredmény megjelenítése
} catch (Exception e) { //hibakezelés
eredmény.setText("Hiba: "+e); //hiba megjelenítése
} //hogy az eredmény mindig teljesen megjelenjen,
eredmény.getParent().validate(); //a felületi elemek újraméreteztetése
}
/**
A grafikus felhasználói felület felépítése.
@param felület A felhasználói felületet tartalmazó konténer.
@param argumentumok Az indításkor megadott paraméterek.
*/
public static void felépít(java.awt.Container felület,
String argumentumok[]) {
new FaktorialisGUI( felület ); //felület felépítése
felület.setPreferredSize(new java.awt.Dimension(300, 100)); //kezdőméret
}
/**
A tesztprogram indítása.
@param argumentumok Az indításkor megadott paraméterek.
*/
public static void main(String argumentumok[]) {
java.awt.Frame ablak = new AblakTeszt.Ablak("Faktoriális számítás");
felépít( ablak, argumentumok ); //felület felépítése
ablak.setVisible(true); //és megjelenítése
}
}