Hilfe, wie fange ich diese Aufgabe am besten an? Gibts vielleicht ein Beispiel dazu, habe schon gegoogelt, jedoch nichts brauchbares gefunden.... :cry:
Übungsthema: GUI-Programmierung und Adapterklassen
Teil a) „Rechner“
Ziel ist die Implementierung eines kleinen Rechners mit zwei Eingabefeldern, einer Enter-Taste
und einem Ergebnisfeld. Eine aus „JFrame“ abgeleitete Klasse soll die Start-Anwendung
beinhalten. Für das Rechnermodul ist eine zusätzliche Klasse zu erzeugen, die unmittelbar aus
JPanel abgeleitet wird und folgende Komponenten enthält:
In der aus JFrame abgeleitet Klasse wird lediglich das Frame initialisiert und ein Objekt der
Klasse „EinAddierer“ instanziert. Ergeben sich Probleme bei der Anzeige?
Hinweis falls Sie mit den LayoutManagern von JAVA noch nicht vertraut sind:
Swing-Komponenten verfügen über die Methoden „setPreferredSize(Dimension)“. Geben Sie
hier mit „new Dimension(x,y)“ die gewünschten Komponentengrößen an. Was passiert dann,
wenn Sie die Anwendung „aufziehen“? Geben Sie der Anzeigeebene eventuell einen
Layoutmanager mit auf den Weg: „contentPane.setLayout (new FlowLayout());“
Statt der Implementierung des ActionListeners soll nun ein MouseAdapter für den JButton
registriert und die Methode zur Ereignisbehandlung in einer Adapterklasse implementiert
werden.
Was ist “MouseAdapter” für eine Klasse? Welche und wieviele Methoden werden im
MouseAdapter definiert? Wozu ist diese Klasse nützlich?
Instanzieren Sie den „Adapter“ als externe Klasse. Im vorstehenden Quellcode wird darauf
verwiesen, dem Konstruktor der Adapterklasse das aufrufende Objekt als Parameter zu
übergeben. Damit benötigen Sie nur Methodenaufrufe für das Eventhandling - was wäre die
Alternative?
Es soll auf Betätigung des Buttons das Additionsergebnis der beiden Textfelder in dem JLabel-
Feld ausgegeben werden. Dazu verwenden Sie:
• die Methode String getText() um aus den Komponenten “JTextField” den Inhalt auszulesen,
• die Wrapper-Klasse “Double” mit der Methode “Double.parseDouble (String)” zur
Interpretation des Inhalts als Double-Wert.
1. Testen Sie Ihr Programm mit syntaktisch korrekten Eingaben.
2. Platzieren Sie zwei „EinAddierer“ auf Ihrem Frame.
3. Zusatzaufgabe: Außer “mouseClicked” stellt MouseAdapter weitere Methoden zur Verfügung.
Implementieren Sie weitere (z. B. mouseEntered und mouseExited), um z. B. den
Hintergrund des Buttons zu verfärben.
Teil b) Exceptionhandling
In der vorstehenden Aufgabe tritt das Problem auf, dass bei unkorrekter Syntax (leeres
Textfeld oder Alpha-Zeichen) das Programm mit einem Laufzeitfehler abbricht. Um dies zu
verhindern stellt JAVA eine ausgefeilte Ausnahmebehandlung (“Exceptionhandling”) zur
Verfügung.
In der Vorlesung wird das Thema vertieft, hier sollen Sie lediglich eine Standardbehandlung
implementieren:
An welchen Stellen im Programmtext kann die Ausnahmebehandlung eingefügt werden?
Übungsthema: GUI-Programmierung und Adapterklassen
Teil a) „Rechner“
Ziel ist die Implementierung eines kleinen Rechners mit zwei Eingabefeldern, einer Enter-Taste
und einem Ergebnisfeld. Eine aus „JFrame“ abgeleitete Klasse soll die Start-Anwendung
beinhalten. Für das Rechnermodul ist eine zusätzliche Klasse zu erzeugen, die unmittelbar aus
JPanel abgeleitet wird und folgende Komponenten enthält:
Code:
class EinAddierer extends JPanel {
JButton rechne;
JTextField eingabe1;
JTextField eingabe2;
JLabel ergebnis;
//...
}
In der aus JFrame abgeleitet Klasse wird lediglich das Frame initialisiert und ein Objekt der
Klasse „EinAddierer“ instanziert. Ergeben sich Probleme bei der Anzeige?
Hinweis falls Sie mit den LayoutManagern von JAVA noch nicht vertraut sind:
Swing-Komponenten verfügen über die Methoden „setPreferredSize(Dimension)“. Geben Sie
hier mit „new Dimension(x,y)“ die gewünschten Komponentengrößen an. Was passiert dann,
wenn Sie die Anwendung „aufziehen“? Geben Sie der Anzeigeebene eventuell einen
Layoutmanager mit auf den Weg: „contentPane.setLayout (new FlowLayout());“
Statt der Implementierung des ActionListeners soll nun ein MouseAdapter für den JButton
registriert und die Methode zur Ereignisbehandlung in einer Adapterklasse implementiert
werden.
Code:
class MyAdapter extends MouseAdapter {
// Üblicherweise wird im Konstruktor das aufrufende
// Objekt als Parameter übergeben. In dem aufrufenden Objekt
// wird in einer Methode z. B. „myMouseClicked“ die Ereignis-
// behandlung vorgenommen.
public void mouseClicked (MouseEvent me){
// Bearbeiten des MouseClicks
// bzw. Aufruf der Ereignisbehandlung
// Zu lösen ist das Problem des Zugriffs auf
// die Komponente JButton
}
}
Was ist “MouseAdapter” für eine Klasse? Welche und wieviele Methoden werden im
MouseAdapter definiert? Wozu ist diese Klasse nützlich?
Instanzieren Sie den „Adapter“ als externe Klasse. Im vorstehenden Quellcode wird darauf
verwiesen, dem Konstruktor der Adapterklasse das aufrufende Objekt als Parameter zu
übergeben. Damit benötigen Sie nur Methodenaufrufe für das Eventhandling - was wäre die
Alternative?
Es soll auf Betätigung des Buttons das Additionsergebnis der beiden Textfelder in dem JLabel-
Feld ausgegeben werden. Dazu verwenden Sie:
• die Methode String getText() um aus den Komponenten “JTextField” den Inhalt auszulesen,
• die Wrapper-Klasse “Double” mit der Methode “Double.parseDouble (String)” zur
Interpretation des Inhalts als Double-Wert.
1. Testen Sie Ihr Programm mit syntaktisch korrekten Eingaben.
2. Platzieren Sie zwei „EinAddierer“ auf Ihrem Frame.
3. Zusatzaufgabe: Außer “mouseClicked” stellt MouseAdapter weitere Methoden zur Verfügung.
Implementieren Sie weitere (z. B. mouseEntered und mouseExited), um z. B. den
Hintergrund des Buttons zu verfärben.
Teil b) Exceptionhandling
In der vorstehenden Aufgabe tritt das Problem auf, dass bei unkorrekter Syntax (leeres
Textfeld oder Alpha-Zeichen) das Programm mit einem Laufzeitfehler abbricht. Um dies zu
verhindern stellt JAVA eine ausgefeilte Ausnahmebehandlung (“Exceptionhandling”) zur
Verfügung.
In der Vorlesung wird das Thema vertieft, hier sollen Sie lediglich eine Standardbehandlung
implementieren:
Code:
try {
// führe eine Anweisung wie z. B. Double.parseDouble() aus
} catch (NumberFormatException e) {
// melde auf geeignete Weise das Auftreten einer Ausnahme
// Das Programm kann fortgeführt werden!
}