Übungsaufgaben zu Java mit JFrame?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ganz speziell zum JFrame könntest du erst einmal schauen, wie du

  • so eine Top-Level-Komponente überhaupt erzeugen/anzeigen kannst
  • wie du ihr Verhalten ändern kannst (Positionierung des Fensters, Größe des Fensters, Hintergrundfarbe, Schließverhalten wenn jemand auf das rote X in der Titelleiste klickt)
  • wie du ein Fenster via Java-Code schließt

Bezüglich Swing generell könnte ich mir diese Themen vorstellen:

1) Für den Einstieg:

  • Wie man Komponenten wie JButton, JLabel, JPanel, u.ä. erstellt und dem Frame zuordnet
  • Wie man Komponenten verändert (sei es Text, Farbe, o.ä.; nutze hierfür auch die Referenz zum Nachschlagen, welche Methoden einzelne Komponenten überhaupt besitzen)
  • Wie man die Größe von Komponenten setzt (in der Regel mit setPreferredSize)
  • Wie man mittels Vererbung eigene Swing-Komponenten anlegen kann
  • Theorie/Recherche: Was ist AWT und was ist Swing?
  • Evt. nützlich: Wie man mit dem GUI Designer (IntelliJ) / WindowBuilder (Eclipse) / Matisse (NetBeans) Oberflächen via Drag & Drop erstellen kann (für die folgenden Aufgaben solltest du davon aber erst einmal ablassen)

2) Ein zentrales Thema ist die Anordnung von Elementen mittels Layout Manager (niemals absolut und direkt via setBounds, da du damit keine responsive Layouts erstellen kannst). Es wäre daher sinnvoll, sich verschiedene Layouts auszudenken und diese umzusetzen. Beachte, dass du Komponenten wie JPanel auch schachteln und mit unterschiedlichen Layout Managers ausstatten kannst).

Zum Beispiel:

  • Ein Steckbrief (Kurzinformationen wie Name, Alter, etc. links oben, Bild rechts oben, Hobbys oder Charakterbeschreibung zweispaltig darunter; Erweiterung: Das Fenster bekommt eine Hintergrundfarbe und den Texten gibst du eine individuelle Schriftart, -farbe und -größe)
  • Ein kleines Login-Formular (Nutzername, Passwort; beide Felder sind vertikal zueinander angeordnet und innerhalb des Fensters zentriert; links von sich haben sie jeweils eine Feldbeschriftung; Erweiterung: Gib dem Fenster ein Hintergrundbild)
  • Via Google Bildersuche (form dialog) findest du verschiedene Dialoge, die du nachbauen kannst (Beispiel 1, Beispiel 2, Beispiel 3, usw. ...). Sie müssen nicht funktional sein. Es geht lediglich darum, die richtigen Komponenten zu finden, leicht anzupassen und via Layout Managers richtig zu positionieren.

3) Ein zweites wichtiges Thema ist das Event Handling. Sei es dabei die Reaktion auf einen Buttonklick oder die Selektion eines Listeneintrags.

  • Erstelle ein Fenster mit einem Button. Dieser öffnet bei Klick ein anderes Fenster und versteckt stattdessen das erste Fenster. Wenn das zweite Fenster geschloßen wird, soll das erste Fenster wieder angezeigt werden.
  • Erstelle ein Fenster, in dem vom Nutzer erfragt wird, wie alt er ist. Das Programm rechnet daraufhin sein Geburtsjahr aus und gibt es in einem Label wieder.
  • Erstelle ein Fenster mit Auswahlelementen für Eissorten. Je nachdem, was der Nutzer auswählt, wird ein Text ausgegeben, der die Eissorte innerhalb eines formulierten Satzes (z.B. Der Nutzer mag die Eissorte XY) wiedergibt.

Erstelle ein Fenster, welches auf Tastenbefehle lauscht. Wenn der Nutzer z.B. A drückt, soll ein Infodialog angezeigt werden. Befasse dich dafür mit Key Bindings.

4) Es gibt ein paar besondere Komponenten, mit denen man sich ruhig einmal genauer auseinandersetzen kann. Ein paar Anwendungsfälle wurden schon in vorherigen Aufgaben abgedeckt. Folgend eine kleine Auswahl weiterer Fälle:

  • Erstelle ein Fenster mit einer Namenslistung (JList). Über ein Eingabefeld kann man Namen zu einem ListModel hinzufügen (oder entfernen), welches an der Komponente angebunden ist. Als Zusatz könntest du schauen, wie du (mittels Radiobutton-Group) die Sortierung anpassen kannst. Du solltest dir dazu ein eigenes ListModel (SortedListModel) schreiben, welches seine Elemente entsprechend einer vorgegebenen Reihenfolge (aufsteigend/absteigend) sortiert.
  • Erstelle ein Fenster mit einem Menü. Es soll einen Menüpunkt geben, mit dem das Programm beendet wird sowie einen Menüpunkt, welcher bei Klick einen Infodialog öffnet. Im ersten Schritt reicht ein einfacher Modal Dialog (JOptionPane). Als Erweiterung könntest du schauen, wie du dir ein eigenes Dialogfenster bauen kannst.
  • Erstelle ein Fenster, dessen Hintergrundbild via Button (Datei-Upload: JFileChooser) geändert werden kann.
  • Erstelle ein Fenster, welches ein JPanel beinhaltet. Auf dem JPanel zeichnest du eine Form (Kreis/Viereck/o.ä.) mit einer zufallsgenerierten Farbe. Über einen JTimer lässt du das Panel in einem regelmäßigen Zeitintervall immer wieder neu zeichnen.

5) Der folgende Punkt geht schon in ein erweitertes Niveau hinein, welches in einem normalen Schulunterricht bestimmt nicht mehr abgedeckt wird. Aber vielleicht interessiert es dich dennoch.

Normalerweise trennt man Anwendungen in verschiedene Schichten auf. Diese Entkoppelung bewirkt mehr Flexibilität und Übersicht. Man kann das Programm leichter erweitern und (modular) testen.

Ein Architekturmuster, welches man in Kombination mit Swing nutzen kann, ist das MVC Pattern. Es gibt ein Model (beinhaltet die Daten und reine Anwendungslogik), ein View (die Oberflächenelemente) und einen Controller (vermittelt zwischen Model und View).

Die Aufgabe mit der Namenslistung (siehe Punkt 3) geht bereits in diese Richtung. Der notwendige Action Listener des Buttons stellt den Controller dar, das ListModel die Datenschicht.

Ein kleines Beispiel findest du auch hier. Die MessageBean-Klasse ist in diesem Fall das Model, dem ein Observer (PropertyChangeListener) zugewiesen wird. Sobald der Controller (mouseClicked) das Model ändert, weist der Listener dem View an, das Label zu ändern.

  • Bau mit MVC ein Programm, welches Mausklicks zählt. Nach jedem fünften Mausklick wird eine (zufällige?) Ausgabe getätigt.
  • Bau das Programm mit dem Steckbrief um. Unter der Steckbriefanzeige wird ein Formular erstellt, über welches man die Textdaten des Steckbriefs ändern kann. Alle Daten sollen in einem Modelobjekt stehen, welches das View (die Steckbriefanzeige) aktualisiert, sobald man das Formular via Button abschickt.

Weitere ähnliche Aufgaben kannst du dir natürlich leicht selbst ausdenken.

Zuletzt noch eine Empfehlung bezüglich einer Lernquelle/Referenz: Da eignen sich die Oracle Tutorials (bzw. siehe hier; denn auf der aktuellen Seite sind wohl die Bilder verschwunden) am besten. Zu den jeweiligen Komponenten gibt es meist auch praktische Beispiele (verlinkt am unteren Ende der jeweiligen Seite).

Eine bessere Quelle konnte ich bisher leider nicht ausfindig machen. Es gibt stattdessen viele Tutorials, die eher zeigen, wie man bestimmte Probleme (z.B. das Zuordnen von Positionen und Größen) eben überhaupt nicht lösen sollte. Auch im Schulunterricht werden meines Wissens leider nicht immer gute Praktiken gelehrt.

Erstelle ein Fenster und zeichne einfache geometrische Objekte (Kreise, Rechtecke etc.)

Oder anstatt zu zeichnen kannst du andere Komponenten dem Fenster hinzufügen wie JButtons

Woher ich das weiß:Studium / Ausbildung