Informatik-Elemente graphischer Oberflächen: Unterschied zwischen den Versionen

Aus RSG-Wiki
Wechseln zu: Navigation, Suche
Zeile 51: Zeile 51:
 
{{Lösung versteckt|1=
 
{{Lösung versteckt|1=
 
'''private JButton schaltknopf;''' ruft ein Attribut der Klasse JButton auf, das in der Klassen SPIELAUTOMAT den Name schaltknopf erhält und '''private JLabel anzeige;''' ruft ein Atribut der Klasse JLabel auf, das hier den Name anzeige erhält.}}
 
'''private JButton schaltknopf;''' ruft ein Attribut der Klasse JButton auf, das in der Klassen SPIELAUTOMAT den Name schaltknopf erhält und '''private JLabel anzeige;''' ruft ein Atribut der Klasse JLabel auf, das hier den Name anzeige erhält.}}
 +
 +
 +
Als nächstes muss man nun di Objekte erzeugen.
 +
 +
{{Aufgaben-blau|3|Wo werden im Java-Quelltext Objekte erzeugt?}}
 +
 +
{{Lösung versteckt|Im Konstruktor werden Objekte erzeugt.}}
 +
 +
 +
{{Merke|1=Man erzeugt als nächstes das Objekt eines Schaltknopfs im Konstruktor des Spielautomaten:<br>
 +
public SPIELAUTOMAT()<br>
 +
{<br>
 +
schaltknopf = new JButton("Neues Spiel");<br>
 +
...}
 +
 +
Dieses erzeuge Objekt muss nun in das Graphikfenster eingebaut werden. Dies erfolgt nachdem man den Schaltknopf erzeugt hat ebenfalls im Konstruktor.<br>
 +
public SPIELAUTOMAT()<br>
 +
{<br>
 +
schaltknopf = new JButton("Neues Spiel");<br>
 +
ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(schaltknopf, „unten“); <br>
 +
...}
 +
}}
 +
 +
{{Aufgaben-blau|4|2=Was bewirken im Konstruktor die Zeilen:<br>
 +
schaltknopf = new JButton("Neues Spiel");<br>
 +
ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(schaltknopf, „unten“); ?}}
 +
 +
{{Lösung versteckt|1='''schaltknopf = new JButton("Neues Spiel");''' erzeugt einen Schaltknopf auf dem "Neues Spiel" angezeigt wird. <br>
 +
'''ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(schaltknopf, „unten“);'''  fügt den Schaltknopf im Graphikfesnter unten an.
 +
}}
 +
 +
 +
Hierbei gibt es noch einige  zu beachten:
 +
 +
{{Merke|1=Dem Schaltknopf muss ein Objekt vom Typ <span style="color:#C00000">ActionListener</span> zugeordnet werden. Dieses wird benachrichtigt, wenn der Schaltknopf betätigt wird und ruft dann seine Methode <span style="color:#C00000">actionPerformed()</span> auf.
 +
 +
Ein ActionListener-Element wird beim Aufruf der Methode addActionListener() mit <span style="color:#C00000">new ActionListener()</span> 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.
 +
 +
{{Merke|1=Damit der ActionListener funktioniert muss zu Beginn der Klasse noch <span style="color:#C00000">'''import java.awt.event.*;'''</span> eingefügt werden.}}

Version vom 21. April 2020, 10:55 Uhr

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.

Automat1.jpg

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}


Bleistift 35fach.jpg   Aufgabe 1

Was steht im Quelltext der Klasse SPIELAUTOMAT ?

Im Quelltext stehen
1. die Attribute der Klasse,
2. der Konstruktor und

3. die Methoden der Klasse.


Nuvola apps kig.png   Merke

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
}


Bleistift 35fach.jpg   Aufgabe 2

Was bewirken die Zeilen
private JButton schaltknopf;
private JLabel anzeige;
bei den Attributen?

private JButton schaltknopf; ruft ein Attribut der Klasse JButton auf, das in der Klassen SPIELAUTOMAT den Name schaltknopf erhält und private JLabel anzeige; ruft ein Atribut der Klasse JLabel auf, das hier den Name anzeige erhält.


Als nächstes muss man nun di Objekte erzeugen.


Bleistift 35fach.jpg   Aufgabe 3

Wo werden im Java-Quelltext Objekte erzeugt?

Im Konstruktor werden Objekte erzeugt.


Nuvola apps kig.png   Merke

Man erzeugt als nächstes das Objekt eines Schaltknopfs im Konstruktor des Spielautomaten:

public SPIELAUTOMAT()
{
schaltknopf = new JButton("Neues Spiel");
...}

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");
ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(schaltknopf, „unten“);
...}


Bleistift 35fach.jpg   Aufgabe 4

Was bewirken im Konstruktor die Zeilen:
schaltknopf = new JButton("Neues Spiel");
ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(schaltknopf, „unten“); ?

schaltknopf = new JButton("Neues Spiel"); erzeugt einen Schaltknopf auf dem "Neues Spiel" angezeigt wird.

ZEICHENFENSTER.gibFenster().komponenteHinzufuegen(schaltknopf, „unten“); fügt den Schaltknopf im Graphikfesnter unten an.


Hierbei gibt es noch einige zu beachten:

Nuvola apps kig.png   Merke

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.

Nuvola apps kig.png   Merke

Damit der ActionListener funktioniert muss zu Beginn der Klasse noch import java.awt.event.*; eingefügt werden.