Upload
adalhard-landfried
View
108
Download
3
Embed Size (px)
Citation preview
Universität zu LübeckInstitut für Informationssysteme
Die Präsentationsschicht
- mit Swing
Präsentationsschicht - Verantwortlichkeiten
• realisiert Benutzeroberfläche grafisch
• sorgt für die Dialogkontrolle
Folge von Fenstern zur Durchführung eines
Arbeitsablaufes
Präsentation von Daten
• Meldungsfenster, Eingabedialoge, …
• Darstellungskomponenten: Textfelder, Listboxen, Radiobuttons, Tabellen, Label, …
• Editieren von Objektdaten -> Plausibilisierung
Dialogkontrolle
• Kontrollfluss in der Benutzerschnittstelle
• Benutzerereignisse werden behandelt
• Wichtig! -> keine Dialogabfolge in Fenstern
• in Swing: Event-Listener
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
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 }…
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
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
Action - Interface
public interface Action extends ActionListener{
public void actionPerformed(ActionEvent e);
public Object getValue(String key);
public void putValue(String key, Object value);
}
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.
Parameter in Action-Objekten
• angemessene Reaktion => Parameter
• Mittels putValue()/getValue()
• Übergabe von Schlüssel/Wert-Paaren
• Problem: richtiger Zeitpunkt der Übergabe
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.
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());
}
…
}
Trennung der Verantwortklichkeiten - MVC
• MVC: Model-View-Controller-Entwurfsmuster
• Trennung zwischen:
-Daten der Anwendung (model),
-Darstellung der Daten (view) und
-Dialogkontrolle(control)
Swing-Komponenten
• Elementare GUI-Controlls: Textfelder, Radiobuttons,…
• Fenster(JFrame) und andere Container(JPanel)
• Layout-Manager steuert Anordnung in Containern(z.B. BorderLayout, FlowLayout, GridLayout)
Ü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
Swing-Komponenten Tutorial
Überblick über das bsp. Framework
JFrame RootFrame
Observer TreeFrame
DialogFrame
LineEditFrame
JPanel TablePanel
JTextFieldCheckableTextField
InterfacePropertyChecker
AbstractChecker
Fensterklassen
Tabellen
Eingabefelder
Dialogfenster
DialogFrame(String title)
void createCancelButton()
JButton addActionButton(Action action)
abstract void doActionPerformed(ActionEvent e)
title
button nbutton1 …
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
Überblick Controller-Komponenten
AbstractAction MarktAction
LoginAction DoFindAction
CheckLoginAction NewAnbieterAction
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()