Informatik-Elemente graphischer Oberflächen
Mit Feldern konnten wir statistische Daten erheben und Auswertungen machen. Für einen Spielautomaten fehlen uns aber noch der Startknopf und die Gewinnanzeige. Dies wollen wir jetzt angehen.
Um den Spielautomat nun funktionsfähig zu gestalten benötigen wir noch eine Schaltfläche Neues Spiel und eine Anzeige Gewinn in der unteren Steuerungsleiste.
Wir müssen also eine Schaltfläche und eine Anzeige unserem Spielautomat hinzufügen. Dazu benötigen wir Klassen, auf die wir zugreifen müssen. Die benötigten Klassen befinden sich weitgehend im Paket javax.swing. Damit wir darauf zugreifen können, müssen wir das Paket importieren. Das haben wir schon bei den Zufallszahlen gehabt. Da mussten wir auch das Paket java.util.Random importieren. Daher muss das Paket javax.swing auch vor der Klassenvereinbarung importiert werden. Also schreibt man in die nächste Zeile nach
import java.util.Random;
den Import
import javax.swing.*;
* bedeutet, dass man das gesamte Paket zur Verfügung hat und nicht nur spezielle Dinge daraus.
Unsere Klasse schaut nun folgendermaßen aus:
import java.util.Random;
import javax.swing.*;
public class SPIELAUTOMAT
{//weiterer Quelltext}
Im Quelltext stehen
1. die Attribute der Klasse,
2. der Konstruktor und
Graphische Oberflächen sind aus Komponenten wie Schaltknopf, Textanzeige, Texteingabe oder Auswahlliste aufgebaut. Alle diese Komponenten werden in ein Graphikfenster eingefügt. Auch das Graphikfenster selbst ist eine graphische Komponente. Die Objekte der Klasse ZEICHENFENSTER haben eine Methode komponenteHinzufuegen(JComponent element, String position), die das übergebene Objekt in die Steuerungsleiste rechts oder unten einfügt. |
Als erstes haben wir das Paket für graphische Oberflächen importiert. Nun müssen wir bei den Attributen ein Attribut der gewünschen Klasse einführen.
Ein Attribut der gewünschten Klasse ist z. B. JButton für einen Schaltknopf oder JLabel für eine Textanzeige. Wir führen aus der Klasse JButton einen Schaltknopf ein und nennen ihn
schaltknopf und aus der Klasse JLabel führen wir eine Anzeige ein und nennen sie anzeige.
Im Quelltext der Klasse SPIELAUTOMAT steht dann:
import javax.swing.*;
public class SPIELAUTOMAT
{
private JButton schaltknopf;
private JLabel anzeige;
//weiterer Quelltext
}
Als nächstes muss man nun di Objekte erzeugen.
Man erzeugt als nächstes das Objekt eines Schaltknopfs im Konstruktor des Spielautomaten: public SPIELAUTOMAT() Dieses erzeuge Objekt muss nun in das Graphikfenster eingebaut werden. Dies erfolgt nachdem man den Schaltknopf erzeugt hat ebenfalls im Konstruktor. public SPIELAUTOMAT() |
schaltknopf = new JButton("Neues Spiel"); erzeugt einen Schaltknopf auf dem "Neues Spiel" angezeigt wird.
Hierbei gibt es noch einige zu beachten:
Dem Schaltknopf muss ein Objekt vom Typ ActionListener zugeordnet werden. Dieses wird benachrichtigt, wenn der Schaltknopf betätigt wird und ruft dann seine Methode actionPerformed() auf. Ein ActionListener-Element wird beim Aufruf der Methode addActionListener() mit new ActionListener() erzeugt. Es wird ein Objekt einer anonymen Unterklasse von ActionListener erzeugt, deren Methode actionPerformed() an die konkrete Situation angepasst wird. Die Methode actionPerformed() wird so implementiert, dass sie die Methode spiele() aufruft. |
Im Java-Quelltext schaut das nun folgendermaßen aus, dass man im Konstruktor nachdem man den Schaltknopf erzeugt hat und im Graphigkfenster unten angezeigt hat nun ein Objekt vom Typ ActioListener erzeugt:
schaltknopf.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { spiele();} } );
Dadurch wird im ActionListener die Methode actionPerfomed() aufgerufen,die wiederum die Methode spiele() aufruft.
Damit der ActionListener funktioniert muss zu Beginn der Klasse noch import java.awt.event.*; eingefügt werden. |
Schaltflächen wie JButton erzeugen bei Benutzung, wie viele andere Komponenten auch, sog. events (Ereignisse). Je nach Komponente werden unterschiedliche Ereignisse ausgesandt. Bei Schaltflächen ist dies ein ActionEvent.
Da man normalerweise nicht an allen ausgesandten Ereignissen interessiert ist, muss man diejenigen, auf die man reagieren möchte abfangen. Hierzu steht für jedes spezielle Ereignis der ActionListener zur Verfügung, bei dem man die das Ereignis erzeugende Komponente anmelden muss.
Vor der Klassenvereinbarung steht nun:
import java.util.Random; import javax.swing.*; import java.awt.event.*;
Dann kommt die Definition der Klasse:
public class SPIELAUTOMAT
Bei den Attributen wird hinzugefügt:
private JButton schaltknopf;
Im Konstruktor wird hinzugefügt:
schaltknopf = new JButton("Neues Spiel"); ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(schaltknopf, "unten"); schaltknopf.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { spiele(); } } );
Achtet auch auf die letze geschweifte Klammer mit ; !
Die Einträge bei den Attributen haben wir schon gemacht.
Bei den Attributen:
private JLabel anzeige;
Im Konsturktor müssen wir jetzt die Anzeige erzeugen:
Im Konstruktor:
anzeige = new JLabel(" ");
ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(anzeige, "unten");
Dieses Feld ruft keine Methode auf, daher brauchen wir keinen ActionListener()!
In der Methode spiele() fügt man die Methode schreibeErgebnis() ein:
schreibeErgebnis();
Nun muss man noch die Methode schreibeErgebnis() formulieren.
public void schreibeErgebnis()
{
if (ermittleGewinn() == 10){anzeige.setText(" Hauptgewinn!! 10 €"); }
else { if (ermittleGewinn() == 2) {anzeige.setText(" Kleiner Gewinn 2 €"); }
else { anzeige.setText(" Verloren!!");}
}
anzeige = new JLabel(" "); erzeugt eine Anzeigefeld.
ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(anzeige, "unten"); fügt eie Anzeige im Graphikfesnter unten hinzu.