Appearance
Meme Studio (Prüfung 1 FS23)
Repository
https://gitlab.fhnw.ch/oop/oop2-versuche/template-q1.git
Die URL auf GitLab: https://gitlab.fhnw.ch/oop/oop2-versuche/template-q1
Zeit
- 45 min
Hilfsmittel
- Erlaubt: alte Übungen, Slides, Material oop1 + oop2
- Verboten: Kommunikation, AI (führt zu Note 1)
Ziel: Erstellen Sie folgendes GUI für die Applikation "Meme Studio"
b
Vorgehen
Implementieren Sie den Konstruktor von View
gemäss weiterem Vorgehen. Alle Attribute der Klasse View sind bereits für Sie angelegt worden. Es gilt die Komponenten entsprechend Vorlage im GUI zu positionieren und die Callbacks der Listener für btUpdate
und btClipboard
zu registrieren und zu implementieren.
- ☑ Importieren Sie das Projekt und starten Sie
main
in der KlasseApp.java
, um zu validieren, dass der Import geklappt hat.
Komponenten
- Auf der linken Seite finden Sie das
memePanel
der KlasseMemePanel
. - Rechts finden Sie oben das
propertiesPanel
des TypsJPanel
und den ButtonCopy to Clipboard
. - Das
propertiesPanel
besteht wiederum aus mehreren UI Komponenten. Fügen Sie diese viaGridBagLayout
dem Panel mit hinzu. Das Layout vonpropertiesPanel
ist einGridBagLayout
. textBottom
undtextTop
sind Objekte des TypsMemeText
, schauen Sie die Klasse an um zu sehen, welche Information sie fürMemePanel
trägt.
1. MemePanel, Properties Panel, Combobox und Copy to Clipboard Button
- ☑ Setzen Sie das Layout von
View
im Konstrukor alsGridBagLayout
. - ☑ Rufen Sie im Konstruktor
memePanel.update
auf und übergeben Sie"meme0"
,textTop
undtextBottom
. - ☑ Im Konstruktor von View fügen Sie folgende GUI Elemente gemäss Layout hinzu
- ☑
memePanel
- ☑
propertiesPanel
- ☑
btClipboard
- ☑
memeSelect
innerhalb vonpropertiesPanel
- ☑
- ☑ Füllen Sie
memeSelect
mit Strings im Formatmeme01
bismeme14
. Verwenden Sie hierzu die Methode.addItem(String)
vonmemeSelect
. - ☑ Setzen Sie für die Panels gemäss GUI die Borders mit
MyBorderFactory.createMyBorder()
. - ☑ Die Zeile
propertiesPanel.setPreferredSize(
new Dimension(300, propertiesPanel.getPreferredSize().getSize().height));
am Ende des Konstrukturs belassen.
2. Update Button
Mit einem Click auf btUpdate
soll ein Methodenaufruf von update
von memePanel
erfolgen. Erstellen und registrieren Sie hierzu einen anonymen ActionListener
.
Tipp: Sie können von memeSelect
den aktuellen String erhalten, in dem Sie .getSelectedItem()
in einen String casten.
- ☑ Adden Sie den Button gemäss GUI
- ☑ Rufen Sie beim Click auf
btUpdate
die Methodeupdate(String, MemeText, MemeText)
vonmemePanel
auf und übergeben Sie als erstes Argument den Selektierten String vonmemeSelect
und als zweites und drittes ArgumenttextTop
undtextBottom
.
3. Texte
Um einen Text im memePanel
erscheinen zu lassen, ist es erforderlich textTop
und textBottom
via update
die Werte von den zwei JTextFields, Schriftgrösse und Backdrop (mit oder ohne schwarzen Hintergrund) zeichen, mitzugeben.
- ☑ Adden Sie die zwei
tfTop
undtfBottom
impropertiesPanel
mit entsprechendenGridBagConstraints
. - ☑ Verschieben Sie
btUpdate
im GUI entsprechend nach unten. - ☑ Im Listener von
btUpdate
: bevor Sieupdate
vonmemePanel
aufrufen, rufen Sie nunupdate
von dentextTop
undtextBottom
auf. Übergeben Sie als Parameter die Werte derJTextField
s (Methode.getText()
). - ☑ übergeben Sie für die Schriftgrösse jeweils 14 und für
backdrop
den Werttrue
.
Nun sollten Sie in der Lage sein, Text erscheinen zu lassen und via Update zu ändern. Auch sollten Sie die Texte mit der Maus (Drag and Drop) bereits bewegen können.
4. Font Slider und Checkbox für Backdrop
Erweitern Sie die Applikation nun mit dem Slider für die grösse der Schrift und der Checkbox, mit der Sie den schwarzen Hintergrund des Texts ein- oder ausschalten können.
- ☑ verwenden Sie
.getValue()
vom Slider um den Wert alsint
zu erhalten. - ☑ verwenden Sie
.isSelected()
von der Checkbox.
5. Copy to Clipboard
Der Methode Utility.graphicsToClipBoard
können Sie als Parameter das memePanel
mitgeben, um die Meme als Bild in die Zwischenablage zu kopieren. Erstellen Sie hierzu einen anonymen ActionListener
für den Button btClipboard
, welcher die Meme in die Zwischenablage kopiert.
Wichtig
Der Methodenaufruf: propertiesPanel.setPreferredSize
(new Dimension(300, propertiesPanel.getPreferredSize().getSize().height));
muss im Konstruktor in der letzten Zeile erfolgen.