universität zu lübeck institut für informationssysteme die präsentationsschicht - mit swing
TRANSCRIPT
![Page 1: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/1.jpg)
Universität zu LübeckInstitut für Informationssysteme
Die Präsentationsschicht
- mit Swing
![Page 2: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/2.jpg)
Präsentationsschicht - Verantwortlichkeiten
• realisiert Benutzeroberfläche grafisch
• sorgt für die Dialogkontrolle
Folge von Fenstern zur Durchführung eines
Arbeitsablaufes
![Page 3: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/3.jpg)
Präsentation von Daten
• Meldungsfenster, Eingabedialoge, …
• Darstellungskomponenten: Textfelder, Listboxen, Radiobuttons, Tabellen, Label, …
• Editieren von Objektdaten -> Plausibilisierung
![Page 4: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/4.jpg)
Dialogkontrolle
• Kontrollfluss in der Benutzerschnittstelle
• Benutzerereignisse werden behandelt
• Wichtig! -> keine Dialogabfolge in Fenstern
• in Swing: Event-Listener
![Page 5: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/5.jpg)
Ereignisbehandlung mit Event Listenern
• in Swing Objekte spezieller Klassen
• müssen bei Darstellungkomponenten registriert werden
• tritt das Ereignis ein, werden Methoden der Event Listener aufgerufen
• für unterschiedliche Ereignisse(Tastatur-, Mausereignisse), unterschiedliche Methoden
![Page 6: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/6.jpg)
EreignisbehandlungBsp.
Dialog
Bitte Namen eingeben:
Name:
ok
KeyListener TextfeldListener
keyPressed(KeyEvent) : void
ActionListener ButtonListener
actionPerformed(ActionEvent)
1 …2 mTextfeld.addKeyListener(new TextfeldListener(){3 public void keyPressed(KeyEvent e){4 textfeld_keyPressed(e);5 }6 });7 btn.addActionListener(new ActionListener(){8 public void actionPerformed(ActionEvent e){9 btn_actionPerformed(e);10 }11 });12 private void textfeld_keyPressed(KeyEvent e){13 if(e.getKeyChar()==‘?‘)…14 }…
![Page 7: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/7.jpg)
DialogkontrolleBsp. Ablauf
Anwendungsschicht-Schnittstelle(Fassade)
SuchoptionenBegriff: Buch
ok cancel
Suchergebnis
GUI-Controller
constructor(ergebnis){ this.ergebnis = ergebnis; fillWindow();}
ok
void doSearch(String suchStr){ ergebnis = fassade.find(suchStr); //Suchergebnis in einem neuen Fenster anzeigen}…
ListeneractionPerformed
ergebnis
Präsentationsschicht
![Page 8: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/8.jpg)
Action-Konzept in Swing
• bietet Möglichkeit, eine in der GUI benutzte Funktionalität mit ihren erweiterten Eigenschaften in einer Java-Klasse zusammenzufassen
• viele Swing-Komponenten(z.B. JButton) besitzen Action-Member-Variable
• Funktionalität einer Action-Klasse kann in mehreren Menüs, Fenstern genutzt werden
![Page 9: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/9.jpg)
Action - Interface
public interface Action extends ActionListener{
public void actionPerformed(ActionEvent e);
public Object getValue(String key);
public void putValue(String key, Object value);
}
![Page 10: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/10.jpg)
Registrieren von Action-Objekten
• anmelden eines Action-Objekts => mittels setAction()-Methode
• =>wird als Listener registriert
• =>actionPerformed() wird immer aufgerufen, sobald passendes Ereignis in Darstellungskomponente stattfindet.
![Page 11: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/11.jpg)
Parameter in Action-Objekten
• angemessene Reaktion => Parameter
• Mittels putValue()/getValue()
• Übergabe von Schlüssel/Wert-Paaren
• Problem: richtiger Zeitpunkt der Übergabe
![Page 12: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/12.jpg)
Parameter-Übergabe
• Trick:
• Im z.B. Button wird zusätzlicher ActionListener registriert
• => dessen actionPerformed()-Methode wird dann ebenfalls aufgerufen und zwar zuerst
• =>hier werden Parameter des Action-Objekts gesetzt.
![Page 13: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/13.jpg)
Action-Konzept Bsp.
public class FindAction extends AbstractAction{
public void actionPerformed(ActionEvent ae){
Vector result = Marktplatz.findKatalogelement(getValue(“name“));
ResultDlgFrame rDlg = new ResultDlgFrame(result);
rDlg.show();
}
}
public class SearchDlgFrame extends LineEditFrame{
protected JButton jb;
protected JTextField tf;
public SearchDlgFrame(){
jb.setAction(new FindAction());
jb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
doActionPerformed(e);
}
});
…
}
public void doActionPerformed(ActionEvent e){
Object src = e.getSource();
Action action = ((JButton)src).getAction();
action.putValue(“name“,tf.getText());
}
…
}
![Page 14: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/14.jpg)
Trennung der Verantwortklichkeiten - MVC
• MVC: Model-View-Controller-Entwurfsmuster
• Trennung zwischen:
-Daten der Anwendung (model),
-Darstellung der Daten (view) und
-Dialogkontrolle(control)
![Page 15: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/15.jpg)
Swing-Komponenten
• Elementare GUI-Controlls: Textfelder, Radiobuttons,…
• Fenster(JFrame) und andere Container(JPanel)
• Layout-Manager steuert Anordnung in Containern(z.B. BorderLayout, FlowLayout, GridLayout)
![Page 16: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/16.jpg)
Überblick – wichtige Swing-Komponenten
Komponente Aufgabe wichtige Methoden
JLabel Darstellung von Zeichenketten setText(String)
JTextField Anzeigen und Editieren von setText(String) Zeichenketten getText():String
JTextArea analog, nur mehrzeilig analog
JCheckBox Darstellung und Änderung von setSelected(boolean) Wahrheitswerte durch Ankreuzen isSelected(): boolean
JComboBox stellt Liste von Optionen in Form getSelectedItem():Object einer Dropdown-Liste dar setSelectedItem(Object)
JTree stellt Daten hierarchisch dar setModel(TreeModel) (z.B. Verzeichnisstruktur)
JButton stellt einen einfachen Button dar
![Page 17: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/17.jpg)
Swing-Komponenten Tutorial
![Page 18: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/18.jpg)
Überblick über das bsp. Framework
JFrame RootFrame
Observer TreeFrame
DialogFrame
LineEditFrame
JPanel TablePanel
JTextFieldCheckableTextField
InterfacePropertyChecker
AbstractChecker
Fensterklassen
Tabellen
Eingabefelder
![Page 19: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/19.jpg)
Dialogfenster
DialogFrame(String title)
void createCancelButton()
JButton addActionButton(Action action)
abstract void doActionPerformed(ActionEvent e)
title
button nbutton1 …
![Page 20: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/20.jpg)
Eingabedialoge
LineEditFrame(String title)
void addProperty(String label, JComponent inputElement)
void setData(Object data)
void setFacade(IMarktplatz marktplatz)
title
button1 button n…
label 1: textfield1
label 2: textfield2
label…: textfield n
label … radiobutton
label … checkbox
![Page 21: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/21.jpg)
Überblick Controller-Komponenten
AbstractAction MarktAction
LoginAction DoFindAction
CheckLoginAction NewAnbieterAction
![Page 22: Universität zu Lübeck Institut für Informationssysteme Die Präsentationsschicht - mit Swing](https://reader035.vdocuments.net/reader035/viewer/2022062512/55204d6a49795902118c0009/html5/thumbnails/22.jpg)
AbläufeBsp. Anmeldung eines Anbieters
loginDlg
LoginDlgFr
MarktActionCheckLoginAction
fassadeMarktplatz
mCurrentAnbieterAnbieter
Enter name/password
Klick loginactionPerformed() currentAnbieter = checkLogin(name,pwd)
[currentAnbieter!=null]
loginFailed()
ahf
AnbieterHomeFrame
show()
getName()