220 likes | 310 Views
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, …
E N D
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. KeyListener TextfeldListener keyPressed(KeyEvent) : void Dialog Bitte Namen eingeben: Name: ok ActionListener ButtonListener actionPerformed(ActionEvent) • … • mTextfeld.addKeyListener(new TextfeldListener(){ • public void keyPressed(KeyEvent e){ • textfeld_keyPressed(e); • } • }); • btn.addActionListener(new ActionListener(){ • public void actionPerformed(ActionEvent e){ • btn_actionPerformed(e); • } • }); • private void textfeld_keyPressed(KeyEvent e){ • if(e.getKeyChar()==‘?‘)… • }…
DialogkontrolleBsp. Ablauf Präsentationsschicht Suchergebnis Suchoptionen Begriff: Buch ok cancel constructor(ergebnis){ this.ergebnis = ergebnis; fillWindow(); } Listener actionPerformed ok GUI-Controller ergebnis void doSearch(String suchStr){ ergebnis = fassade.find(suchStr); //Suchergebnis in einem neuen Fenster anzeigen } … Anwendungsschicht-Schnittstelle(Fassade)
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.
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()); } … } Action-Konzept Bsp.
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
Überblick über das bsp. Framework Fensterklassen JFrame RootFrame Observer TreeFrame DialogFrame LineEditFrame Tabellen JPanel TablePanel Eingabefelder JTextField CheckableTextField Interface PropertyChecker AbstractChecker
DialogFrame(String title) void createCancelButton() JButton addActionButton(Action action) abstract void doActionPerformed(ActionEvent e) Dialogfenster title button1 … button n
Eingabedialoge LineEditFrame(String title) void addProperty(String label, JComponent inputElement) void setData(Object data) void setFacade(IMarktplatz marktplatz) title label 1: textfield1 label 2: textfield2 label…: textfield n label … radiobutton label … checkbox button1 … button n
Überblick Controller-Komponenten AbstractAction MarktAction LoginAction DoFindAction CheckLoginAction NewAnbieterAction
AbläufeBsp. Anmeldung eines Anbieters loginDlg LoginDlgFr MarktAction CheckLoginAction fassade Marktplatz mCurrentAnbieter Anbieter Enter name/password Klick login currentAnbieter = checkLogin(name,pwd) actionPerformed() [currentAnbieter!=null] ahf AnbieterHomeFrame getName() show() loginFailed()