Die Präsentationsschicht

Post on 08-Jan-2016

20 views 3 download

description

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, … - PowerPoint PPT Presentation

transcript

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()