31.12.2012 Aufrufe

new - beim Fachbereich Informatik

new - beim Fachbereich Informatik

new - beim Fachbereich Informatik

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Entwicklung nutzerorientierter<br />

Anwendungen<br />

ENA<br />

Wintersemester 2012/13<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling


Wenn Microsoft Autos bauen würde …<br />

� Die Warnlampen für Öldruck, Lichtmaschine, Benzin und andere wären<br />

durch eine einzige Warnlampe mit der Aufschrift „Allgemeiner<br />

Autofehler“ ersetzt .<br />

� Der Airbag würde bei einem Unfall „Sind Sie sicher?“ fragen, bevor er<br />

aufginge.<br />

� Das Lenkrad würde durch eine Maus oder einen Trackball ersetzt<br />

werden.<br />

�� Sie müssten sich Tastenkombinationen für „Bremsen“ merken.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 2


Wenn Microsoft Autos bauen würde …<br />

� Beim Versuch, das Auto zu starten, würden Sie oft die<br />

Fehlermeldung „Abbruch, Wiederholen, Ignorieren“ erhalten.<br />

� Der Tachometer würde 70 anzeigen, auch wenn Sie nur 40 km/h<br />

fahren.<br />

� Der Motor wäre nicht gleich nach dem Starten voll funktionsfähig.<br />

Stattdessen würde das Auto stehen bleiben und wieder losfahren,<br />

während der Motor versucht, die nötigen Zubehörteile<br />

anzuschrauben.<br />

�� Jedes Mal, wenn Sie einen neuen Fahrgast mitnehmen, müssten Sie<br />

die Zusammenstellung des Autos ändern. Diese würde natürlich<br />

auch erhalten bleiben, wenn der Passagier schon lange ausgestiegen<br />

ist.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 3


Benutzer sind nur Menschen!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 4


Entwicklung nutzerorientierter Anwendungen<br />

� Gestaltung von grafisch-interaktiven Systemen<br />

�� Bedürfnisse, Fähigkeiten und Erwartungen der (spezifischen)<br />

Endanwender stehen im Mittelpunkt<br />

� Endanwender identifizieren<br />

� Bedürfnisse befriedigen<br />

� Fähigkeiten unterstützen<br />

� Erwartungen erfüllen<br />

� Interdisziplinäres Gebiet (Psychologie, Design, Softwareentwicklung, ...)<br />

�� Usability steht in den verschiedenen Phasen im Vordergrund<br />

� Anforderungen erfassen und analysieren<br />

� Prototypen entwerfen, umsetzen, testen und reflektieren<br />

� Ergebnisse evaluieren<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 5


Überblick<br />

� „Java for Run-aways“<br />

�� Human Computer Interaction:<br />

� Usability<br />

Konsistenz, Intuitive Bedienbarkeit, Erlernbarkeit, ...<br />

� Layout<br />

Gestaltung/Farbe, Schrift, Anordnung<br />

� Entwurf: benutzerzentrierte Analyse, Design, Rapid Prototyping<br />

� Konstruktion unter Java/Swing mit Tool (eclipse):<br />

�� Componenten, Container, LayoutManager, Eventhandling<br />

� Programmiermuster<br />

� Model-View-Control, Observer<br />

� Beispiele in der Vorlesung: Trouble Tickets Systeme, Turtle Grafik<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 6


Lernziele der Veranstaltung<br />

� Grafisch-interaktive Benutzungsoberflächen (GO)<br />

�� Benutzerorientierung verinnerlichen<br />

(Benutzergruppen/Rollen identifizieren, Usability-Überlegungen einsetzen, ...)<br />

� intuitiv und ergonomisch gestalten<br />

� visuell ansprechend entwerfen<br />

� GO-Entscheidungen - Verwendung bestimmter Componenten -<br />

begründen können<br />

� objektorientiert konstruieren<br />

� gute GOs spiegeln sich im Entwurfs- und Realisierungsaufwand wider<br />

�� Methodisch Vorgehen lernen<br />

� Konzept der Ereignisorientierung verstehen<br />

� Bausteine grafischer Oberflächen (Componenten) kennen lernen<br />

� ... und das alles in Java und mit Swing<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 7


Inhalte<br />

� SW-Technik: Rollenerfassen, Nutzungsfall, Szenario, Screen-Diagramm<br />

�� Trennung Datenverarbeitung �� �� Oberfläche, Dokument ��> ��> Ansicht<br />

� MVC als Architektur- und Designpattern<br />

� Screen-Design und Ergonomie<br />

� Gruppierung, Formen, Farben, statisches/dynamisches Layout<br />

� Java Crash-Kurs für Kenner von C++<br />

� Implementierungstechniken<br />

� Bausteine: Datentypen, Attribute, Ereignisse<br />

� Fenster und Dialoge, Layout-Manager<br />

� Ereignisbehandlung<br />

� U.U. zusätzliche Klassen (Dateihandling, Serialisierung, …)<br />

� Gute Beispiele, schlechte Beispiele<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 8


<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 9


Praktikum<br />

Semesterprojekt: Entwurf, prototypische Realisierung und Verfeinerung eines<br />

Systems<br />

� Problembewusstsein<br />

entsteht im Laufe des<br />

Semesters;<br />

optimierende Iterationen<br />

sind wichtig<br />

�� http://www.eclipse.org/downloads/ (und http://www.eclipse.org/archived/)<br />

� http://www.eclipse.org/windowbuilder/download.php<br />

� http://netbeans.org<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 10


Prüfung/Klausur<br />

� mit Papier und Kugelschreiber ☺<br />

� Am 04.02.2013 von 10.15 Uhr bis 11.45 Uhr; Raum siehe OBS<br />

(Anmeldung bis 20.01.2013; Abmeldung bis 31.01.2013)<br />

� regelmäßige Teilnahme am Praktikum – es sind 6 Termine -<br />

wird kontrolliert und ist Voraussetzung;<br />

Beginn am 18. (donnerstags) bzw. 19.10. (freitags)<br />

� alte Klausur vom Vorsemester und „Übungs-/Vorbereitungstermin“<br />

Tipp:<br />

Aktive Mitarbeit macht einen guten Teil der Prüfungsvorbereitung aus!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 11


Grundlagen-Literatur<br />

� http://www.javabuch.de<br />

Guido Krüger, Addison-Wesley, ISBN 3-8273-1949-8<br />

� http://openbook.galileocomputing.de/javainsel8/index.htm<br />

� http://www.dpunkt.de/java/index.html<br />

� http://www.java2s.com/Tutorial/Java/CatalogJava.htm und<br />

� http://java.sun.com/docs/books/tutorial/index.html<br />

� Sun: The Java Tutorial + Suchapplet<br />

http://java.sun.com/docs/books/tutorial/uiswing/components/components.html<br />

http://java.sun.com/docs/books/tutorial/information/download.html<br />

http://www.siteforum.com/sun/download/jtutorial_dfi.zip<br />

� Sun: Java 2 SDK API documentation + Suchapplet<br />

http://java.sun.com/products/jdk/1.3/index.html#docs<br />

http://www.siteforum.com/sun/download/jdk13_dfi.zip<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 12


Weiterführende Literatur<br />

� Bernhard Preim: Entwicklung interaktiver Systeme<br />

� Ivo Wessel: GUI-Design<br />

� Alan Cooper: About Face - The Essentials of User Interface Design<br />

� Sun: Java Look and Feel Design Guidelines<br />

� Online http://java.sun.com/products/jlf/dg/index.htm<br />

� Sun: Sonstiges rund um Java<br />

�� http://java.sun.com/docs/<br />

� Helmut Balzert: Lehrbuch Grundlagen der <strong>Informatik</strong><br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 13


Analyse-Design-Realisierung-Test-Evaluation<br />

Den gesamten Prozess<br />

Analyse<br />

wollen wir im Praktikum<br />

�� Benutzorientiertes RequirementsEngineering: zumindest einmal<br />

Usability-Engineering<br />

durchlaufen.<br />

� Heuristic – GUI wird ohne Benutzer(in) testet und bewertet<br />

� Observation – Benutzer(in) wird <strong>beim</strong> Bedienen beobachtet<br />

� Thinking-Aloud – Beim Bedienen denkt der Benutzer „laut“ und<br />

äußert sich so zusätzlich<br />

� Questionnaire – mit Hilfe eines Fragebogens werden Information<br />

über den Benutzer, die Wünsche und Anforderungen gesammelt<br />

� Interview – Befragung, Stärken und Schwächen werden<br />

herausgearbeitet<br />

� U.U. Erarbeitung von Anwendungswissen<br />

� U.U. Erarbeitung von zusätzlichem technischem (Hintergrund-)Wissen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 14


Analyse-Design-Realisierung-Test-Evaluation<br />

Design<br />

� Legen Sie Designziele fest<br />

� Welche Benutzergruppen adressieren Sie?<br />

� Entlasten Sie den Benutzer!<br />

� Beschreiben Sie Anwendungsszenariien und Use Cases<br />

� Skizzieren Sie das Layout (es sollte dynamisch sein)<br />

� Überlegen und begründen Sie Gestaltungsentscheidungen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 15


Analyse-Design-Realisierung-Test-Evaluation<br />

Realisierung<br />

� Entwickeln Sie die Funktionalität getrennt von der GUI!<br />

� Überlegen Sie, wie Sie Funktionalität und Dialog(Controls) koppeln:<br />

Model-View-Control<br />

� Denken Sie auch an<br />

� die Navigation im Systeme,<br />

� die Arbeitsabläufe und<br />

�� den generellen Workflow<br />

� Rapid Prototyping:<br />

� iterativ, unter Einbeziehung der Nutzer<br />

� Früh Machbarkeit demonstrieren<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 16


Analyse-Design-Realisierung-Test-Evaluation<br />

Test<br />

� Wer von Ihnen würde ein nicht getestetes Programm benutzen?<br />

� Überlegen Sie von Beginn an Testfälle<br />

� Wie lange dauert es, um eine bestimmte Aufgabe zu lösen?<br />

� Wie viele Klicks/Interaktionen werden benötigt, um die Aufgabe<br />

zu lösen?<br />

� Wie schnell erlernbar ist das GUI?<br />

�� Wie viele Fehler werden gemacht? Wie sicher ist die GUI?<br />

� Testen Sie die Gebrauchstauglichkeit (Usability)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 17


Analyse-Design-Realisierung-Test-Evaluation<br />

Evaluation der Umsetzung<br />

� Welche Ziele werden erreicht?<br />

� Wie gut werden Ziele erreicht?<br />

� Evaluationsmethoden:<br />

� Experteninspektionen, kognitiver Walkthrough, Usability-Tests,<br />

Fragebogenverfahren<br />

�� Klassifikation von Evaluationsmethoden:<br />

analytisch vs. empirische bzw.<br />

deskriptiv vs. präskriptive Evaluationsmethoden<br />

� Formen der Evaluation: summative und formative Evaluation<br />

� Bestimmung von Evaluationskriterien<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 18


Bedeutung der Entwurfsphase<br />

� Beim Entwurf und der Realisierung muss insbesondere in der Praxis<br />

darauf geachtet werden, dass<br />

� das Projekt<br />

„in-time“ und „in-budget“<br />

bleibt und<br />

� die User Requirements erfüllt werden.<br />

… muss auch etwas mit<br />

Qualität zu tun haben<br />

�� Fehler in der Analyse und Konzeption haben dabei dramatische<br />

Auswirkungen auf die beiden erstgenannten Punkte!<br />

� Ein erstes, wichtiges Ziel muss also sein, die Anforderungen der<br />

Benutzer richtig und vollständig zu erfassen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 19


<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling


Softwaretechnik für User Interfaces<br />

Arten von Applikationen<br />

� U-Software in Anlehnung an<br />

� Spiele<br />

U- und E-Musik<br />

� Funware<br />

� Heim-Software<br />

� E-Software<br />

� Office-Anwendungen<br />

� Kommerzielle Datenverarbeitung<br />

fließende Übergänge<br />

• in diesem Stil machen wir das Praktikum !<br />

� Inhouse-Applikationen<br />

� Maschinensteuerungen<br />

Kiosksysteme,<br />

POI (Point of Interest),<br />

POS (Point of Sales)<br />

Hoher GO/UI Anteil<br />

� wohin gehören Fahrplanauskunft, Geldautomat, Ticketservice, ... ?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 21


Gelegenheit, über Usability nachzudenken<br />

� Ständiger Technologiewandel verlangt permanente<br />

Auseinandersetzung mit Organisationsabläufen und den Systemen<br />

� Anstehende System- oder Versionswechsel sind zusätzlich günstige<br />

Zeitpunkte, dabei müssen gerade die unterschiedlichen Nutzer<br />

überzeugt und mitgenommen werden<br />

� Bereitschaft, sich mit Arbeitsabläufen und der Einbindung von<br />

IT - Prozessen auseinander zusetzen mit dem Ziel<br />

� Produktivität/Wirtschaftlichkeit zu steigern<br />

�� Ressourcen zu schon und Kosten (Durchlaufzeit) zu reduzieren<br />

� Qualität und Kundenzufriedenheit zu verbessern<br />

� Neben den Aspekten Preis, Lizenzen, Standards, branchentypischen<br />

Lösungen, verkauften Systemen, Schnittstellen und Integration spielt<br />

die Nutzerzufriedenheit eine wichtige Rolle<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 22


Mensch-Maschine-Schnittstelle -<br />

Graphische Benutzungsoberfläche<br />

kreativ, intuitiv<br />

Beobachten,<br />

Bedienen<br />

Interaktion<br />

Präsentation,<br />

Visualisierung<br />

monoton, schnell<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling


Phänomene nicht nur im Zusammenhang<br />

mit grafischen Benutzungsoberflächen (1/2)<br />

Kognitive Dissonanz<br />

� entsteht, wenn man zwischen verschiedenen Alternativen wählen<br />

muss und die Vor- und Nachteile dieser Systeme abwägt.<br />

� Hat man eine Entscheidung getroffen, ist man bemüht, sich zu<br />

versichern, dass man die richtige Wahl getroffen hat und nimmt<br />

Argumente besonders wahr, die die Entscheidung unterstützen und<br />

verharmlost/ignoriert Gegenargumente.<br />

� Beispiel:<br />

� Festhalten an möglicherweise kryptisch und schwer zu<br />

benutzenden oder teueren Systeme<br />

� Anordnung der Tasten auf der qwertz-Tastatur<br />

[Alternative siehe z.B. http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard ] ...<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 24


Phänomene nicht nur im Zusammenhang<br />

mit grafischen Benutzungsoberflächen (2/2)<br />

Magisches Denken<br />

� bezieht sich darauf, dass sich Benutzer eine Vorstellung (mentales<br />

Modell) von dem System/Geräte machen, mit dem sie arbeiten.<br />

Diese hängt von der Erfahrung und Vorbildung ab.<br />

� Die Modelle sind so konstruiert, dass sie Analogieschlüsse zulassen:<br />

„wenn das Mail-Tool geöffnet ist, stürzt die Textverarbeitung bei<br />

der Rechtschreibprüfung ab“<br />

�� Benutzer sind sehr bemüht an diesen Modellen festzuhalten;<br />

auch dann wenn gedankliche Verrenkungen nötig werden:<br />

„wenn das Mail-Tool offen ist und mehr als zehn neue Mails<br />

eingetroffen sind, dann stürzt die Textverarbeitung ab“<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 25


Entwickler und Anwender … (1/4)<br />

… spielen einen neuen Dialog durch:<br />

Entwickler: … So, jetzt hast Du einen Teil der Aufgabe bereits<br />

ausgeführt. Willst Du nun noch etwas verändern?<br />

Anwender: Ja, ich möchte eine Komponente löschen. Was muss ich tun?<br />

E: Deute auf das Menu mit dem Namen ‘CD‘.<br />

A: CD ?<br />

E: CD bedeutet ‘Component Delete‘.<br />

A: OK, ich habe verstanden … Oh, was passiert jetzt?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 26


Entwickler und Anwender … (2/4)<br />

E: Du bist jetzt im Analyse-Modus.<br />

Du musst aus Versehen ‘AM‘ ausgewählt haben.<br />

A: Ach so, ich dachte, ich hätte ‘CD‘ ausgewählt.<br />

Wie verlasse ich den Analyse-Modus?<br />

E: Kein Problem. Gib einfach ‘control Q‘ ein.<br />

A: [tippt C O N T R O L …]<br />

E: Nein! Drücke die ‘Strg‘-Taste und die ‘Q‘-Taste.<br />

A: Wie dumm von mir. … Ich versuch‘s noch einmal.<br />

… Es passiert gar nichts. Was habe ich falsch gemacht?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 27


Entwickler und Anwender … (3/4)<br />

E: Du hast nichts falsch gemacht. Die Komponente ist gelöscht aber<br />

noch nicht vom Bildschirm entfernt. Gib noch ‘control-J‘ ein.<br />

A: Ich habe verstanden. Wenn ich die nächste Komponente lösche, gebe<br />

ich wieder ‘control-Q‘ ein.<br />

… Hoppla, warum ist der Bildschirm jetzt weiß?<br />

E: Du hast nur ‘Q‘ eingegeben. ‘Q‘ bedeutet Quit und beendet das<br />

Programm. Jetzt musst Du leider alles noch einmal eingeben!<br />

A: Wenn das so ist, machen wir nächste Woche weiter.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 28


Entwickler und Anwender … (4/4)<br />

Folgende Fehler wurden gemacht:<br />

� Kommandos (CD, AM) sind nicht intuitiv<br />

� erzeugt unnötige Belastung für den Anwender<br />

� Auf welches Objekt wird das Kommando angewendet?<br />

� Keine Statusinformation zu Zustandsänderungen<br />

� Kryptische Kommandos (control-J, control-Q) sind ungeeignet für<br />

unerfahrene, gelegentliche Benutzer<br />

�� Kein Feedback bei Delete<br />

� erzeugt Frustration und Ablehnung bei dem Anwender<br />

� ergibt Negativausstrahlung auf das Gesamtsystem<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 29


Allgemeine Tipps (1/4)<br />

� Unklare Verwendung von Dialogbausteine:<br />

� Element sieht aus wie ein Buttons, es löst aber keine Aktion aus<br />

� Für exklusive Alternativen werden keine Radiobuttons verwendet<br />

� Anwender reagieren sensibel auf diese Inkonsistenzen<br />

� Zu wenig oder kein Feedback<br />

� Aktionen (Suchen, Filtern, …) müssen bestätigt werden<br />

� Hinweise auf fehlerhafte Eingaben sollten in räumlicher und<br />

zeitlicher Nähe erfolgen<br />

� Meldungen müssen einen Hinweis auf die Fehlerursache geben<br />

bzw. einen Tipp auf die korrekte Eingabe geben<br />

� Anwender können nur so den nächsten Schritt planen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 30


Allgemeine Tipps (2/4)<br />

� Unüberwindbare Formulare:<br />

�� Die Felder sind zu klein für die Texte<br />

� Tabulatorweiterschaltung ist nicht umgesetzt<br />

� Die Reihenfolge ist nicht sinnvoll<br />

� Standardtasten (z.B. Enter-Taste) ist nicht erwartungskonform<br />

� Anwender ist irritiert und erwartet doch Standardverhalten<br />

� Abfrage zu vieler Daten an der falschen Stelle<br />

� Das Anlegen eines Konto etwa vor der ersten (Produkt-)Auswahl<br />

ist eher hinderlich als verkaufsfördernd<br />

� Voreinstellungen sinnvoll wählen<br />

� Vorseinstellungen können Interaktionen beschleunigen<br />

� Hinweise geben, wie Felder auszufüllen sind<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 31


Allgemeine Tipps (3/4)<br />

� Umständliche und zu lange Texte vermeiden<br />

�� Kurz und prägnant formulieren<br />

� Aufforderungen, Meldungen und Hinweise leicht verständlich<br />

angeben<br />

� Bestätigungen sollten klar erkennbar sein und leicht aufzufinden<br />

sein<br />

� Konventionen überraschen den Anwender nicht;<br />

er „weiß“, was passiert und kann der Anwendung vertrauen<br />

�� Bedienoberflächen sind kein Selbstzweck!<br />

Sie sollen helfen, die Aufgabe<br />

� effizient (mit geringem Aufwand) und<br />

� effektiv (Aufgabe vollständig lösen)<br />

zu erledigen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 32


Allgemeine Tipps (4/4)<br />

� Eine gute Bedienoberfläche kann man nicht „berechnen“<br />

� Eine gute Bedienoberfläche muss man „erfahren“<br />

� Eine geeignete Methode,<br />

� um die Ideen der Entwickler zu demonstrieren und<br />

� deren Umsetzbarkeit zu belegen<br />

und auch<br />

� um die Anwender frühzeitig zu beteiligen<br />

ist die Erstellung eines Prototypen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 33


Ziele (1/2)<br />

� Benutzerführung gemäß Regeln<br />

� Motto: Fehlervermeidung statt Fehlerbehebung<br />

� Trennung von Anwendung und graphischer Benutzungsoberfläche<br />

� Einheitliches Look-and-Feel<br />

� Innerhalb einer Applikation und applikationsübergreifend<br />

� einfache Anpassung von Text und Schrift;<br />

relative Positionierung ist zusätzlich sehr hilfreich:<br />

„Componente C1 links von C2 und oberhalb von C3“<br />

� Methode<br />

Dialoge mit Hilfe von Zustände und<br />

Objekthierarchien (z.B. Fenster) modellieren<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 34


Ziele (2/2)<br />

� Aufgabenangemessene Präsentation und Interaktion<br />

� Direkte Manipulation<br />

� Benutzerunterstützung <strong>beim</strong><br />

� Gestalten und Steuern<br />

� Erstellen und Modifizieren<br />

� Inspizieren und Prüfen<br />

� Navigation(sunterstützung) in komplexen Situationen<br />

�� Beherrschung der Komplexität und Menge durch<br />

Informationsaufbereitung: selbsterklärend, kontextbezogene Hilfe<br />

� Realitätsnähe �� Abstraktion<br />

� Joy of Use: begeistern, stimulieren, motivieren, überzeugen, fesseln, ...<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 35


Usability-Kriterien<br />

� Usability-Kriterien sind:<br />

�� Effizienz (Efficiency)<br />

• Wenig Interaktion (Benutzer entlasten)<br />

• Fokussteuerung an Hauptabläufen orientiert (Benutzer führen)<br />

� Effektivität (Effectiveness)<br />

• Können alle Aufgaben vollständig gelöst werden?<br />

� Erlernbarkeit (Learnability)<br />

• Kann die BO aus der Benutzererfahrung heraus bedient werden?<br />

�� Erinnerbarkeit (Memorability)<br />

• Kann man die BO nach einer gewissen Zeit noch sicher bedienen?<br />

� Zufriedenheit/Wohlbefinden/Spaß (Satisfaction; Emotional Usability)<br />

• Gestaltung, Feedback, Klarheit<br />

� Fehlersituation durch Bedienung (Error)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 36


Usability-Aspekte<br />

� Struktur (Layout, Design) planen und festlegen<br />

� Dazu gehört auch<br />

• Elemente identifizieren<br />

• Elemente sinnvoll benennen („Sprache der Nutzer sprechen“)<br />

• Skizze erstellen und<br />

schrittweise (zunächst abstrakt dann konkret) verfeinern<br />

� An Anforderungen orientiert:<br />

• Welche Aufgaben möchte der Benutzer lösen<br />

� An Aufgaben und Bedürfnissen der unterschiedlichen<br />

Benutzergruppen angemessen<br />

• Welche unterschiedlichen Benutzergruppen gibt es?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 37


Emotional Usability: Joy of Use<br />

� Merkmale<br />

� Die Software muss den Benutzer unauffällig unterstützen, indem es<br />

interessante Funktionen als zu lösende Aufgaben präsentiert und<br />

Neugier weckt sowie Anreiz zum eigenständigen Lernen gibt<br />

� Die Aufgabenstellung wird in eine Geschichte integriert<br />

(und die Bearbeitung einer Teilaufgabe ist ein Schritt in einer<br />

größeren Aufgabenstellung).<br />

� Die Glaubwürdigkeit der Arbeitswelt wird durch Konsistenz und<br />

Aufmerksamkeit für Details gesichert<br />

(� Erwartungskonformität).<br />

Quelle: Marc Hassenzahl: Attraktive Software – Was Gestalter von Computerspielen<br />

lernen können; In: J Machate&M.Burmester: User Interface Tuning;<br />

Benutzerschnittstellen menschlich gestalten; Software & Support Verlag 2003<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 38


Componenten und Events<br />

� Componenten (Dialogbausteine) und Events (Dialogbausteine)<br />

spielen eine zentrale Rolle in grafischen Benutzungsoberflächen<br />

� Dabei wird ein wiederkehrendes Entwurfsmuster angewendet:<br />

Observer-Pattern<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 39


Observer Pattern (1/4)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 40


Observer Pattern (2/4)<br />

� Objekte werden über Zustandsänderungen informiert. Gleichzeitig<br />

soll eine möglichst geringe Kopplung zwischen den beteiligten<br />

Objekten bestehen.<br />

� Typisches Anwendungsbeispiel ist, dass es zu einem Objekt<br />

verschiedene Sichten (Views) gibt, die synchron über Veränderungen<br />

informiert werden.<br />

� Dabei übernehmen die Sichten die Rolle des Beobachters<br />

(Observers) und das Objekt (Observable) selbst wird beobachtet.<br />

� Es ergeben sich markante Muster zwischen den beteiligten<br />

Objekten:<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 41


Observer Pattern (3/4)<br />

� Das beobachtete Objekt verfügt über die folgenden Methoden:<br />

� add – füge Beobachter hinzu,<br />

� remove – entferne Beobachter,<br />

� notify – benachrichtige Beobachte,<br />

� get – erfrage Objektzustand und<br />

� set – setze Objektzustand<br />

� Das beobachtende Objekt verfügt über Methode(n) zum Aktualisieren<br />

der Sicht (z. B. refresh).<br />

� Das Objekt kennt seine Beobachter nicht<br />

� Das Pattern wird entweder durch Vererbung umgesetzt oder<br />

durch Implementierung einer Schnittstelle (interface) realisiert.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 42


Observer Pattern (4/4)<br />

� In der konkreten Situation benachrichtigt das überwachte Objekt alle<br />

Beobachter (Broadcast)<br />

� Jeder Beobachter entscheidet für sich, wie er mit der Information<br />

umgeht;<br />

ggfls. können zusätzlich verschiedene Ereignisse unterschieden<br />

werden<br />

� In komplexen Situation (z. B. bei Tabellen) kann es auch zu unnötigen<br />

Aktualisierungen kommen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 43


Wie wird das Oberserver-Patern unter<br />

Java/Swing umgesetzt?<br />

� Die Componenten können überwacht werden:<br />

� _____________________<br />

_____________________<br />

� Beobachter werden angemeldet/registriert:<br />

� _____________________<br />

_____________________<br />

� Ereignisse werden an die Beobachter gemeldet:<br />

�� _____________________<br />

_____________________<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 44


Observer Pattern – Codemuster (1/3)<br />

import java.util.Observer;<br />

public class Hauptprogramm {<br />

public static void main(String[] args) {<br />

ApplModel ap = <strong>new</strong> ApplModel();<br />

Beobachter b1 = <strong>new</strong> Beobachter();<br />

Beobachter b2 = <strong>new</strong> Beobachter();<br />

ap.addObserver(b1);<br />

ap.addObserver(b2);<br />

// löst Benachrichtigung aus:<br />

ap.setValue("Observer Test");<br />

}<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 45


Observer Pattern – Codemuster (2/3)<br />

// Observable<br />

// stellt die Methoden addObserver, notifyObservers bereit<br />

import java.util.Observable;<br />

import java.util.Observer;<br />

public class ApplModel extends Observable<br />

{<br />

private String value;<br />

ApplModel() { value = “ “; }<br />

public void setValue(String s) {<br />

value = s;<br />

setChanged(); // z.B. Flag setzen<br />

notifyObservers(value); // Beobachter informieren<br />

}<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 46


Observer Pattern – Codemuster (3/3)<br />

import java.util.Observable;<br />

import java.util.Observer;<br />

public class Beobachter implements Observer {<br />

}<br />

// Methode muss objektspezifisch realisiert werden<br />

public void update(Observable am, Object value) {<br />

}<br />

System.out.println("update: " + am + " " + value);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 47


Umsetzung des Observer Patterns<br />

� Wie müssen die Methoden addObserver und notifyObservers<br />

implementiert sein?<br />

� _____________________<br />

_____________________<br />

_____________________<br />

_____________________<br />

_____________________<br />

_____________________<br />

�� Wie müssen Sie das bei der GUI-Programmierung unter Java/Swing<br />

umsetzen?<br />

� _____________________<br />

_____________________<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 48


<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 49


Java Crash-Kurs: Interpreter-Prinzip<br />

� Compiler übersetzt Quellcode in Byte Code<br />

� Quellcode in .java-Datei<br />

� Bytecode in .class-Datei<br />

� Bytecode ist hardware-unabhängiger Befehlssatz für einen<br />

Interpreter<br />

• wird z.B. im Internet übertragen<br />

�� Java Virtual Machine interpretiert Byte Code<br />

� teilweise zur Geschwindigkeitssteigerung:<br />

Just-In-Time-Compiler übersetzt Byte Code<br />

in Maschinencode der Zielhardware<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 50


"Java ist streng objektorientiert"<br />

� In Java gibt es<br />

�� dynamische Feldobjekte<br />

� Laufzeitkontrolle (bzgl. Typen als auch bzgl. Feldgrenzen)<br />

� Systemunabhängige Festlegung der elementaren Datentypen<br />

� Garbage Collection ist Bestandteil der Sprache<br />

� "keine" Pointer �� alle Objektvariable sind Pointer<br />

� kein call-by-reference<br />

� keine structs<br />

� kein Dereferenzieren<br />

�� keines Pointerarithmetik<br />

� spezielle Klassen zur Unterstützung der (einfachen) Entwicklung<br />

internetbasierter Anwendungen<br />

(Client-Server Komponenten: Applets und Servlets)<br />

� Hauptprogramme verlieren an Bedeutung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 51


Java ist streng objektorientiert!<br />

Java = C++--<br />

� Klassen, Objekte, Konstruktoren, Instanziierung wie unter C++<br />

Syntax fast wie unter C++ (aber konsequenter)<br />

� Vererbung/Inheritance<br />

� Polymorphismus: gleicher Methodenname in unterschiedl. Klassen<br />

� Überladen:<br />

• gleicher Methodenname in gleicher Klasse bei unterschiedl.<br />

Parametern (Typ/Anzahl)<br />

� kein Überladen von Operatoren<br />

('+' hat immer die Bedeutung einer Addition; Ausnahme: Strings)<br />

� "keine" Multiple Inheritance sondern interfaces<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 52


“plattformunabhängig“<br />

<strong>Informatik</strong>ervision<br />

� gut: Wertebereiche primitiver Datentypen sind festgelegt<br />

� die Sprache ist meist nicht das Problem, sondern die Bibliotheken<br />

� AWT 1.0, AWT 1.1, Swing, SWT<br />

� vgl. MFC, OWL, Qt<br />

� Zugriff auf Betriebssystemfunktionen<br />

� die Implementation der Virtual Machine und ihrer Bibliotheken wird<br />

zur neuen Plattform<br />

�� VMs von Sun, Netscape, Microsoft, ...<br />

� Versionsnummern ...<br />

� hohe HW-Anforderung: viel Rechenleistung, viel RAM<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 53


“sicher“<br />

� etliche Methoden mittlerweile "deprecated„ (ablehnen, missbilligen),<br />

weil "inherently unsafe"<br />

� z.B. Thread.stop(), Runtime.runFinalizersOnExit(...)<br />

� Ausführungszeitpunkte von finalize und garbage collector undefiniert<br />

� Zuweisungen für double und long (64-Bit-Werte) sind nicht atomar<br />

� d.h. können als 2 Maschinenbefehle implementiert und damit<br />

unterbrechbar sein (müssen aber nicht)<br />

Programmierer machen in jeder Sprache Fehler...<br />

� Sie sind nicht von Ihrer Sorgfaltspflicht entbunden!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 54


“ausgereift“<br />

� große Zahl von "deprecated" Klassen, Feldern und Methoden<br />

� grundlegender Wechsel der Ereignisverarbeitung<br />

von 1.0 auf 1.1<br />

� Java war ursprünglich für kleine Anwendungen gedacht; wurde dann<br />

zur Universalsprache mit vielen Spezialbibliotheken ausgebaut<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 55


Dateitypen und Tools<br />

auch IDE mit<br />

GUI-Editor<br />

�<br />

�<br />

�<br />

Bibliotheken<br />

LIB<br />

LIB class<br />

jar<br />

mindestens<br />

eine Klasse<br />

enthält main<br />

Editor java Compiler class Virtual Machine<br />

Editor java Compiler<br />

class<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 56


Java Development Kit (JDK)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 57


Entwicklung mit JDK<br />

� JDK enthält alle nötigen Werkzeuge<br />

� Aufruf von der Kommandozeile (DOS-Box)<br />

� Vorgehensweise<br />

� MeineKlasse.java mit Notepad erstellen<br />

� JAVAC MeineKlasse.java<br />

• Compiler-Aufruf; erzeugt MeineKlasse.class<br />

� SET CLASSPATH=vollständigerPfadname oder auch<br />

SET CLASSPATH=.<br />

• damit die Java VM weiß, wo sie die Klassen suchen soll<br />

� JAVA MeineKlasse<br />

• Aufruf der Java Virtual Machine (Interpreter)<br />

• MeineKlasse muß eine Methode main enthalten<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 58


Entwickeln mit<br />

Eclipse<br />

�� Project View<br />

� zugehörige Dateien (Klassen)<br />

� Structure View (dateibezogen)<br />

� Source Klasse, Attribute,<br />

Methoden, Importe<br />

� Design Elemente der GUI-Oberfläche<br />

� Content View<br />

�� Source Text-Editor für mehrere Dateien<br />

� Design Quelltext, grafischer Editor<br />

� Doc Dokumentation wenn vorhanden<br />

� Message View<br />

� Meldungen von Compiler und VM<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 59


„Hello, World“<br />

public class hello { // Datei: hello.java<br />

public static void main(String[] args) {<br />

System.out.println ("Hello, World!");<br />

}<br />

}<br />

� jede .java-Datei enthält genau eine public Klasse<br />

� Klassenname = Dateiname; Groß-/Kleinschreibung beachten !<br />

�� weitere Klassen ohne Angabe von public sind möglich<br />

� die Java VM braucht ein Klasse mit einer Methode main als Start<br />

� es gibt keine freistehenden Funktionen/Methoden<br />

(in einer objektorientierten Programmiersprache)<br />

� in String[] args werden Kommandozeilenparameter übergeben<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 60


Ausgabe auf die Konsole<br />

public class System {<br />

public static PrintStream out;<br />

}<br />

public class PrintStream extends FilterOutputStream {<br />

public void println(String x) {...}<br />

public void println(Object x) {...}<br />

}<br />

� der println-Aufruf verwendet obige Klassen der Standardbibliothek<br />

System.out.println ("Hello, World!");<br />

� println ist überladen für alle einfachen Datentypen boolean, int, ...<br />

� jede Klasse, die von Object abgeleitet ist, hat eine Methode, die eine<br />

Textdarstellung des Objekts abliefert: String toString()<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 61


Konsole vs. GUI/GO (I)<br />

„Hello, World“ ist das Programm, das immer wieder als erstes Beispiel<br />

herangezogen wird:<br />

#include <br />

main ()<br />

{ cout


Konsole vs. GUI/GO (II)<br />

� Aus heutiger Sicht stellt sie die Situation wie folgt dar:<br />

�� Verschiedene Programme konkurrieren nicht nur um Speicherplatz und<br />

Prozessorleistung sondern auch um die Darstellungsfläche<br />

� Woher kann das Programm wissen, wo (in welchem Kontext) der String<br />

ausgegeben werden soll?<br />

� An welcher Position soll der Text ausgeben werden?<br />

Wenn der Text zentriert ausgeben werden soll, dann müssen zusätzlich<br />

gerätespezifische Control-Codes angegeben werden<br />

� Kann das gleiche Programm mehrfach gestartet werden und<br />

ablaufen ohne dass es sich gegenseitig stört?<br />

�� Wenn das Programm beendet wurde, ist dennoch die Ausgabe sichtbar.<br />

Die Ausgabe wird nicht aufgeräumt.<br />

� Das „Hello, World“-Programm wurde in einer Zeit geschaffen als man ein<br />

noch sehr einfaches Modell/Verständnis von Interaktion und Präsentation<br />

hatte.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 63


Die einfachste GUI-Applikation<br />

� Hauptfensterklasse abgeleitet von JFrame (extends)<br />

� Referenz auf einziges Objekt als Klassenvariable ( (static) )<br />

� wird von main-Funktion erzeugt<br />

� Konstruktor gibt Fensterereignisse frei (setvisible();...)<br />

� processWindowEvent ist zugehörige Behandlungsroutine<br />

� beendet Java VM mit System.exit();<br />

� Untergeordnetes Objekt von JPanel (Fläche, Armaturenbrett)<br />

�� wird mit add der contentPane (Scheibe, Fläche) zugeordnet<br />

� Initialisierung diverser Attribute der visuellen Komponenten<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 64


GUI-Applikation mit Eclipse<br />

� Applikationsklasse enthält eine main-Methode<br />

� diese wählt das Look & Feel<br />

� diese erzeugt das Applikationsobjekt<br />

� der Konstruktor des Applikationsobjekts erzeugt das Hauptfensterobjekt<br />

und macht es sichtbar<br />

� Fensterklasse ist abgeleitet von javax.swing.JFrame<br />

� erzeugt und verwendet ein Border-Layout<br />

�� gibt sich eine feste Fenstergröße<br />

ohne gibt es ein<br />

statisches Layout<br />

� überschreibt processWindowEvent, um <strong>beim</strong> Schließen des<br />

Fensters durch System.exit(0) die VM zu beenden<br />

nicht am Ende von main ! – warum?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 65


Allgemein<br />

� package (1. Anweisung in der Datei) ordnet eine Klasse einem Paket (=<br />

Gruppe von logisch zusammenhängenden Klassen) zu<br />

� Die Import Anweisung macht die entsprechende Klasse<br />

sichtbar/verfügbar<br />

� instanceof - testet, ob ein Objekt Instanz einer best. Klasse ist:<br />

... if (obj instanceof class) ...<br />

� int, float, double, boolean, … sind intrinsic (= elementarer<br />

Bestandteil), Wrapper-Klassen (Integer, Float, Double, Boolean, …)<br />

existieren etwa für Typumwandlungen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 66


Bibliotheken: Packages<br />

� Package ist ein Ordner im Dateisystem<br />

� enthält mehrere .java-Dateien und Subpackages (=Unterordner)<br />

� Zugehörigkeit zu Package package meinpackage;<br />

� Import-Anweisung macht andere Packages verfügbar<br />

� eine Klasse: import java.util.ArrayList;<br />

� alle Klassen: import java.util.*;<br />

� alle Klassen mit Kurzreferenz: import java.util;<br />

Kurzreferenz ist dann: util.ArrayList;<br />

� weltweit eindeutige Namen für wichtige Packages<br />

� package de.h-da.fbi.projekt.meinpackage;<br />

� spiegelt die Schachtelung der Ordner wider<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 67


Klassen<br />

public class NeueKlasse extends Basisklasse { ... }<br />

�� Konstruktor<br />

� Vorinitialisierungsliste gibt es nicht<br />

� super(...) ruft den Konstruktor der Basisklasse auf<br />

� Attribute können an der Deklarationsstelle<br />

oder im Konstruktor initialisiert werden<br />

Ableitung<br />

� alle Methoden sind standardmäßig virtuell<br />

�� Schlüsselwort final (="nicht-virtuell") verhindert<br />

Überschreiben<br />

� keine separaten Header-Dateien<br />

� jede Klasse kann zum Testen eine main-Methode haben<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 68


Mutter aller Klassen: class Object<br />

� viele Klassen sind (indirekt) von class Object abgeleitet<br />

public class Object<br />

{<br />

public String toString() {...}<br />

//liefert Textdarstellung des Objekts<br />

public boolean equals(Object obj) {...}<br />

// vergleicht Objekt-Inhalte<br />

protected Object clone() // dupliziert das Objekt<br />

throws CloneNotSupportedException {...}<br />

protected void finalize()// Aufruf vor der Garbage Collection<br />

throws Throwable {...}<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 69


Klassenhierarchie<br />

class NeueKlasse extends Basisklasse<br />

implements Interface1, Interface2<br />

� keine Mehrfachvererbung, nur Einfachvererbung<br />

� aber Implementierung mehrerer interfaces möglich<br />

� damit wird das Problem in verschiedenen Basisklassen eventuell<br />

doppelt vorhandener Elementvariablen umgangen; virtuelle<br />

Ableitung ist daher überflüssig<br />

� Besonderheiten<br />

�� eine Klasse muss mit abstract markiert werden, wenn sie<br />

abstract Methoden enthält<br />

� eine abstract Klasse kann nicht instantiiert werden!<br />

� eine Klasse, die als final markiert ist, kann nicht mehr als<br />

Basisklasse dienen!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 70


Objekte<br />

� Objekte werden immer dynamisch allokiert<br />

� <strong>new</strong> liefert einen Zeiger auf das neue Objekt<br />

� Klasse Objektreferenz = <strong>new</strong> Klasse (Parameter);<br />

� delete gibt es nicht<br />

� dynamisch allokierter Speicher wird automatisch vom Garbage<br />

Collector freigegeben, nachdem kein Zeiger mehr darauf zeigt<br />

� der Aufrufzeitpunkt des Garbage Collector ist undefiniert;<br />

das Laufzeitsystem macht das irgendwann<br />

� Destruktor gibt es nicht<br />

� stattdessen Methode protected void finalize();<br />

� Aufruf von dem Garbage Collector – d.h. unter Umständen nie !<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 71


Zur Lebensdauer von Objekten<br />

„Tricks“ im generierten Code<br />

� grundsätzlich existiert ein Objekt in Java so lange, wie eine Referenz<br />

darauf existiert !<br />

� manchmal auch ein bisschen länger,<br />

wie es dem Garbage Collector gerade gefällt<br />

� warum werden dann die Referenzen in Eclipse GUI-Applikationen nicht<br />

gespeichert ?<br />

� das Applikationsobjekt ist tatsächlich nur temporär und insofern<br />

ziemlich nutzlos – dort sollte man keine Attribute ansiedeln !<br />

• main ist auch sofort wieder zu Ende<br />

� die Klasse Frame verwaltet eine eigene Liste von Referenzen<br />

auf alle ihre Instanzen – dadurch bleiben diese am Leben<br />

• jede Instanz hat einen eigenen Thread – dadurch läuft die VM weiter<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 72


Datentypen<br />

� Primitive Typen<br />

plattformunabhängig definiert<br />

� byte (8 Bit), short (16 Bit), int (32 Bit), long (64 Bit),<br />

alle als vorzeichenbehaftete 2er-Komplementdarstellung<br />

� char (16 Bit vorzeichenlos, Unicode � Umlaute in Variablen erlaubt)<br />

� float (32 Bit), double (64 Bit); beide IEEE Standard 754<br />

� kein enum in Sinne von C++; stattdessen Klassen/Interfaces:<br />

enum TurtleT {LION, RABBIT, TURTLE, TIGER, MONKEY}<br />

�� Referenztypen<br />

� "Zeiger" für Klassen, Interfaces, Arrays<br />

� C++ macht keinen Unterschied zwischen primitiven Typen und Klassen!<br />

� neue primitive Typen werden in C++ als Klassen realisiert<br />

(CBruch, CComplex, CString)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 73


Initialisierung von Variablen<br />

� automatisch initialisiert werden<br />

� Klassenvariable ( = static) )<br />

� Instanzvariable ( = Attribute)<br />

� Array-Komponenten (wenn es sich um Grundtypen handelt)<br />

� Initialisierungswerte sind<br />

� 0 für Zahlentypen<br />

� false für boolean<br />

�� null für Objektreferenzen<br />

� lokale Variable werden nicht automatisch initialisiert!<br />

� Zugriff auf nicht initialisierte Variable bringt Fehler<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 74


Zeichenketten: String<br />

� Klasse String (ähnlich wie CString in MFC)<br />

� char* gibt es nicht !<br />

(Inhalts- und Addressoperator gibt es nicht)<br />

� Operand + zur Verkettung<br />

� akzeptiert Werte beliebiger Typen oder Objekte beliebiger<br />

Klassen als Operand – verwendet Methode toString()<br />

� Besonderheit: Operator + allokiert implizit einen neuen String!<br />

�� class Object hat die Methode toString()<br />

� liefert eine textliche Repräsentation des Objekts<br />

� jede abgeleitete Klasse sollte diese Methode sinnvoll<br />

überschreiben<br />

� nützlich auch zur Fehlersuche<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 75


Objektvariable: Zeiger versus Referenzen<br />

� Java Referenzen entsprechen C++ Zeigern:<br />

� Java Referenz kann null sein<br />

� man kann damit z.B. verkettete Listen schreiben<br />

� Zugriff auf Elemente des Objekts mit . statt -><br />

� ein Pendant zu C++ Referenzen gibt es nicht!<br />

� größere Sicherheit gegen Programmierfehler<br />

� es gibt keine Zeigerarithmetik<br />

(so kann man sich auch nicht verrechnen...)<br />

� man kann kein Objekt löschen, auf das noch Zeiger zeigen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 76


Arrays<br />

� sicher durch Indexprüfung zur Laufzeit<br />

� sind dynamisch allokierte Objekte<br />

� float[] vector = <strong>new</strong> float[3];<br />

� int punkt[] = {40, 50};<br />

� float[][] matrix = <strong>new</strong> float[3][3];<br />

� int[][] brett = <strong>new</strong> int[3][]; // Array mit 3 Referenzen<br />

brett[0][] = <strong>new</strong> int[10];<br />

brett[1][] = <strong>new</strong> int[8];<br />

brett[2][] = <strong>new</strong> int[4];<br />

�� int brett[3][3]; ist nicht möglich!<br />

� Array ist eigentlich 1-dimensional<br />

� array.clone()<br />

klont auch bei mehrdimensionalen Arrays nur eine Dimension<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 77


Beispiel Turtlegrafik<br />

� Die Bewegungen einer Schildkröte (Turtle) hinterlassen eine Spur.<br />

� Zunächst wird eine Linie gezogen von der letzten Position zur aktuellen<br />

Position.<br />

� Die Bewegungen nach links, rechts, oben oder unten werden mit Hilfe<br />

von Buttons gesteuert<br />

� Auf der Zeichenfläche ist der Punkt (0,0) links oben;<br />

die x-Werte nehmen nach rechts zu,<br />

die y-Werte wachsen nach unten<br />

� Machen Sie sich mit der Klassenbibliothek von Java und deren<br />

Dokumentation vertraut<br />

Betrachten Sie folgende Klassen: Graphics, ArrayList, Point, Color…<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 78


Verwenden Sie die Klasse Graphics<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 79


Überlegungen zur Turtlegrafik<br />

� Werden in der Anwendung keine Standarddialogbausteine verwendet,<br />

muss die Anwendung selber für sinnvollen Update sorgen - nur sie<br />

kann wissen, was wirklich geschehen soll -<br />

� Der Window-Manager kann Ausschnitte, die auf den Desktop (z.B.<br />

durch Verschieben, Verkleinern oder Iconifizieren anderer Fenster)<br />

sichtbar werden, nur sehr primitiv rekonstruieren:<br />

Bitmaps werden kopiert<br />

� die Anwendung muss den Inhalt verwalten und bei Bedarf aktualisieren<br />

– die betroffene Klasse muss die paint-Methode implementieren:<br />

public void paint (Graphics g)<br />

� Die Klasse ArrayList kann dabei sehr hilfreich sein:<br />

beliebige Objekte können bequem verwaltet werden<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 80


Die Klasse<br />

ArrayList<br />

Quelle:<br />

http://download.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 81


Die Klasse<br />

ArrayList<br />

Quelle:<br />

http://download.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 82


… und ein bisschen Kosmetik<br />

� Fenster zentrieren<br />

frame.setLocationRelativeTo(null); null<br />

� Handler für Fensterereignisse:<br />

protected void processWindowEvent(WindowEvent e) {<br />

}<br />

if (e.getID() == WindowEvent.WINDOW_CLOSING) {<br />

// … versuchen JOptionPane zu verwenden<br />

System.exit(0); // Java VM beenden<br />

}<br />

} else<br />

super.processWindowEvent(e); // und jetzt das<br />

Standardverhalten<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 83


Java-Sprachelemente:<br />

�Abläufe/Workflow<br />

�exception – throws try catch finally –<br />

�Iterator �Iterator<br />

�Casting<br />

�Instanceof<br />

�Generizität<br />

�Zusicherungen (Assertions)<br />

�Aufzählungstypen: �Aufzählungstypen: enum<br />

�Property-Dateien<br />

�Java-Archivdateien: jar<br />

�strukturierte Kommentare: javadoc<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling


Exception Handling<br />

� wie in C++, aber:<br />

� throw-Deklaration -Deklaration müssen im Funktionskopf angegeben werden<br />

„public void search () throws NotFoundException … “<br />

• der Compiler erzwingt es!<br />

� alle möglichen Ausnahmen müssen auch eingefangen werden<br />

� nur für Objekte von Klassen, die von Throwable abgeleitet sind<br />

• hat als direkte Unterklassen: Error und Exception<br />

�� try … catch (Exception e) … [finally]<br />

Die Anweisungen im finally-Block werden grundsätzlich ausgeführt<br />

� Exception-Konstruktoren haben i. a. String-Objekt als Parameter<br />

� kann mit e.getMessage() zurück gewonnen werden<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 85


iterator<br />

Ein Iterator ermöglicht, dass alle Elemente eines Collection-Objekts kontrolliert<br />

(Element für Element) durchlaufen wird. Der Iterator ist ein interface, welches von<br />

allen Collections (Set, HashSet, SortedSet, List, ArrayList) implementiert ist und die<br />

folgende Schnittstelle zu Verfügung stellt:<br />

public boolean hasNext() true, wenn noch ein Element existiert<br />

public Object next () liefert jeweils das nächste Element<br />

public void remove() entfernt, das zuletzt mit next<br />

angesprochene Element<br />

Beispiel:<br />

for (Iterator x = menge.iterator(); i.hasNext())<br />

System.out.println (x);<br />

oder (vereinfachte Schleife)<br />

for (Object x : menge) System.out.println (x);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 86


Typumwandlung/Casting (I)<br />

� Typumwandlung zwischen primitiven Typen ist wohldefiniert<br />

� nicht einfach Uminterpretation des Bitmusters<br />

� keine beliebigen Casts zwischen irgendwelchen Datentypen (Java<br />

ist da sehr streng!)<br />

� Typumwandlung zwischen Objektreferenzen wird zur Laufzeit<br />

überprüft<br />

�� nur die Umwandlung zwischen Basisklasse und abgeleiteter<br />

Klasse ist zulässig<br />

� Umwandlung einer Objekt-Instanz in ein spezifisches Objekt geht<br />

– wenn es sich tatsächlich um ein entsprechendes Objekt handelt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 87


Casting<br />

class zahl<br />

{ int z;<br />

zahl ()<br />

{ z = 0;<br />

System.out.println<br />

("Wert von z ist "+ z);<br />

}<br />

}<br />

public class demo<br />

{ positive p;<br />

public void init (){<br />

}<br />

}<br />

zahl z = (zahl)<strong>new</strong> positive(30);<br />

class positive extends zahl<br />

{ positive (int i)<br />

{ z = i;<br />

System.out.println<br />

("Wert von z ist "+z);<br />

}<br />

}<br />

// Casting geht nur entlang der Klassenhierarchie<br />

// p = (positive) z;// geht nicht, wenn z ein zahl-Objekt ist!<br />

p = <strong>new</strong> positive (20);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 88


instanceof<br />

� Die ArrayList allMyTickets beinhaltet unterschiedliche Tickets:<br />

FatalError, Exception, Warning, Hint.<br />

Es sollen Merkmale geprüft werden. instanceof liefert eine Aussage<br />

darüber, welche Klasse ein Objekt instanziiert:<br />

public class FatalError<br />

{public String showCrashed (){return “Crashed“;} }<br />

public class Exception<br />

{public String showSystemDown (){return “Down“;} }<br />

public class Warning<br />

{... public String showWarning (){return myWarning;} }<br />

public class Hint<br />

{... public String showHint (){return myHint;} }<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 89


instanceof<br />

for (int i = 0; i < allMyTickets.size(); i++)<br />

{<br />

}<br />

Object x = allMyTickets.get(i);<br />

if (x instanceof FatalError)<br />

System.out.println(( (FatalError)x).showCrashed());<br />

if (x instanceof Exception)<br />

System.out.println(((Excpetion)x).showSystemDown());<br />

if (x instanceof Warning)<br />

System.out.println(((Warning)x).showWarning());<br />

if (x instanceof Hint)<br />

System.out.println(((Hint)x).showHint());<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 90


Generizität – Generische Klasse<br />

� Idee: allgemein nutzbare Klasse, die gleichzeitig Typsicherheit<br />

gewährleistet (siehe auch ArrayList):<br />

public class GenericObject<br />

{<br />

}<br />

private T t1, t2;<br />

public T gett1 ()<br />

{ return t1; }<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 91


assert<br />

� Seit Java 1.4 bietet Java eine elegante Lösung für die Überprüfung von<br />

Annahmen/Bedingungen - sogenannter Assertions (Zusicherungen):<br />

Beispiel:<br />

...<br />

boolean ok = list.isEmpty();<br />

Exception<br />

assert ok; (oder: assert expr1 : string_expr2 )<br />

� Java überprüft während der Ausführung den Zustand der Variablen ok.<br />

Wird der Wert der Variablen false, wird ein AssertionError (Error<br />

extends Throwable) geworfen. Dies verringert die<br />

Wahrscheinlichkeit, dass ein Programmierfehler unentdeckt bleibt.<br />

� Das Programm muss mit javac .source 1.4 asserttest.java compiliert<br />

und mit java -ea assertest (enable assertions) ausgeführt werden.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 92


assert - Beispiel<br />

class Asserttest<br />

{<br />

public static double kehrwert (double x)<br />

{<br />

assert x != 0 : ">>> Division durch 0


Aufzählungstypen – Enumeration<br />

� Syntaktisch ähnelt die Deklaration eines Aufzählungstyps der einer<br />

Klasse:<br />

public enum TicketCategory {<br />

}<br />

Software, Hardware, Bedienung, Betriebssystem,<br />

Netzwerk<br />

� Jedes durch die Deklaration eines Aufzählungstyps festgelegten enum-<br />

Objektes besitzt automatisch die Instanzmethoden:<br />

� String toString(), boolean equals (Object o), int ordinal() und values()<br />

...<br />

for (TicketCategory tc : TicketCategory.values())<br />

System.out.println(tc + “ hat den Wert “ + tc.ordinal());<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 94


Interface<br />

Spezialfall einer abstrakten Klasse<br />

� ein Interface ist eine abstrakte Basisklasse ohne Elementvariablen,<br />

besteht also ausschließlich ausschließlich aus<br />

� abstrakten Methoden (abstract = entspricht virtuell in C++)<br />

� Konstantendefinitionen (public final static …)<br />

� lokalen Klassen<br />

� spezielle Form der Vererbung<br />

class Klasse implements Interface<br />

�� die Klasse muss alle Methoden des Interface implementieren<br />

� ein Programm hat eine Interfacereferenz und ruft deren<br />

Methoden auf<br />

� die Interfacereferenz zeigt dann auf Objekte von Klassen,<br />

die dieses Interface implementieren<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 95


Interfaces am Beispiel Turtlegrafik<br />

� In der Grafik sollen verschiedene Symbole/Spuren möglich sein<br />

� Festgelegt wird einerseits das Verhalten<br />

� es muss eine spezielle paint-Methode geben interface<br />

� …<br />

� Objektmerkmale, die allen gemeinsam sind,<br />

werden identifiziert und zusammengestellt<br />

abstract class<br />

� Vorteil:<br />

Der Objektverwaltung ist es egal, um welches Objekt es sich in einem<br />

konkreten Fall handelt (jedes Objekt weis alleine, was es tun muss)<br />

+ Erweiterbarkeit<br />

+ Pflege und Wartung<br />

+ bei der Verwaltung der Objekte sind spezielle Merkmale nicht relevant<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 96


Turtle, Lion, Rabbit<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 97


Aufzählungstyp<br />

enum TraceType {<br />

};<br />

Lion, Monkey, Rabbit, Tiger, Turtle<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 98


interface Trace<br />

interface Trace<br />

{<br />

}<br />

public void paint (Graphics g);<br />

public int getX();<br />

public int getY();<br />

KEIN Konstruktor!<br />

Jedes Objekt<br />

muss sich im<br />

angegebenen<br />

Kontext selbst<br />

darstellen<br />

diese Methode müssen<br />

alle Objekte besitzen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 99


abstract class genericTrace<br />

abstract class genericTrace<br />

{<br />

}<br />

Point position;<br />

kann in allen<br />

Subklassen<br />

verwendet werden<br />

Muss aufgrund von<br />

getX(), getY()<br />

interface<br />

implementieren<br />

es gibt keine<br />

Objekte/Instanzen<br />

dieser Klasse!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 100


class Rabbit extends<br />

genericTrace implements Trace<br />

class Rabbit extends genericTrace implements Trace<br />

{<br />

int radius;<br />

Rabbit (int x, int y, int r)<br />

{<br />

position = <strong>new</strong> Point (x,y);<br />

radius = r;<br />

}<br />

spezifische<br />

Attribute<br />

klassenspezifischer<br />

Konstruktor<br />

public void paint (Graphics g)<br />

{<br />

g.drawOval( position.x-radius/2, position.y-radius/2,<br />

radius, radius);<br />

}<br />

} objektspezifisches<br />

Verhalten<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 101


class Lion extends<br />

genericTrace implements Trace<br />

class Lion extends genericTrace implements Trace<br />

{<br />

int width, height;<br />

Lion (int x, int y, int w, int h)<br />

{<br />

position = <strong>new</strong> Point (x,y);<br />

width = w;<br />

height = h;<br />

}<br />

public void paint (Graphics g)<br />

spezifische<br />

Attribute<br />

klassenspezifischer<br />

Konstruktor<br />

{<br />

g.drawRect( position.x-width/2, position.y-height/2,<br />

width, height);<br />

}<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 102


SingletonPattern zu Objektverwaltung (1/2)<br />

public class TraceContainer<br />

{<br />

/** Verwaltung aller Objekte */<br />

public static ArrayList allTraces;<br />

public static int x = 0, y = 0;<br />

private static TraceContainer instance = null;<br />

/* private Default-Konstruktor, der nicht außerhalb dieser Klasse */<br />

private TraceContainer () {}<br />

/* Methode, liefert die einzige Instanz dieser Klasse zurück */<br />

public static ArrayList getInstance() {<br />

}<br />

if (instance == null) instance = <strong>new</strong> TraceContainer ();<br />

return instance;<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 103


SingletonPattern zur Objektverwaltung (2/2)<br />

public void add (TraceType animal, int x, int y) {<br />

Trace trace;<br />

trace = TraceFactory (animal, x, y);<br />

allTraces.add(trace);<br />

} // add<br />

public void paint (Graphics g) {<br />

for (int i = 0; i < allTraces.size(); i++)<br />

(allTraces.elementAt(i)).paint(g);<br />

} // paint<br />

/* Bei Bedarf weitere Methoden<br />

... Z.B. ein Factory Pattern<br />

*/<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 104


FactoryPattern zum Erzeugen der Spuren<br />

private Trace TraceFactory(TraceType animal, int posx, int posy) {<br />

Trace aNewTrace;<br />

int width = 5, height = 8;<br />

String anId = "T";<br />

switch (animal) {<br />

case Lion: aNewTrace = <strong>new</strong> Lion(posx, posy, width, height);<br />

break;<br />

case Tiger: aNewTrace = <strong>new</strong> Tiger(posx, posy, anId);<br />

break;<br />

case Monkey: Image img =<br />

Toolkit.getDefaultToolkit().createImage("cross.gif");<br />

aNewTrace = <strong>new</strong> Monkey(posx, posy, img);<br />

break;<br />

case Turtle:<br />

case Rabbit:<br />

default: aNewTrace = <strong>new</strong> Rabbit(posx, posy, 8);<br />

}<br />

return aNewTrace;<br />

}<br />

} //TraceContainer<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 105


Dateihandling: übliche Vorgehensweise<br />

Lesen von Datei (Schreiben entsprechend):<br />

Verbindung zur Datei herstellen fin = fopen ("name.txt", "r");<br />

// Datei und Zugriffsmodus!<br />

Lesen<br />

� zeilenweise fgets (100, str, fin);<br />

� byteweise fread(fin, 100, feld);<br />

� formatiert fscanf (fin, "%d %d %d", &x, &y, &z);<br />

Datei schließen, Verbindung beenden fclose (fin);<br />

Weitere Formen sind möglich, z.B.<br />

� Eingabe puffern<br />

�� in Stream schreiben<br />

�<br />

oder<br />

über Netz auf anderen Daten zugreifen<br />

�<br />

ABER:<br />

aus einem String lesen: sscanf (fin, "%d %d %d", &x, &y, &z);<br />

Die Lesebefehle sind nicht unabhängig von dem Objekt (z.B. „lies etwas, egal woher, Methode von Object“)<br />

� Java handhabt dies streng(er) objektorientiert!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 106


Ein- und Ausgabeströme<br />

Pipe<br />

Pipe<br />

Datei<br />

Zeichenkette Bytefeld<br />

Format Puffer<br />

Eingabefilter<br />

Verarbeitung<br />

Format Puffer<br />

Ausgabefilter<br />

Datei<br />

Zeichenkette Bytefeld<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 107


I/O unter Java:Ein Beispiel für Kapselung<br />

Objekt<br />

Einzelne Zugriffsoperationen<br />

Zugriff (lesend,schreibend)<br />

� Objekt<br />

� File (lokal,via Netz)<br />

� Stream<br />

� String<br />

� Zugriff<br />

� lesend/schreibend<br />

� Gepuffert<br />

� Klartext/binär/…<br />

�� Zugriffsoperation<br />

� Grundtyp<br />

� Objekt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 108


Kommunikation zwischen Programmen:<br />

Streams<br />

� Streams<br />

� Transparente Operationen<br />

� Kontinuierlicher Zugriff<br />

Daten/Objekte<br />

Schreiben Lesen<br />

Stream<br />

� Objektorientiert<br />

� interface Serializable erlaubt bequemes Lesen und Schreiben von Objekten<br />

� Objekte werden dadurch in einem internen Format gespeichert und gelesen.<br />

� java.io.Serializable ist ein sogenanntes "flag interface„, d.h. es enthält keine einzige<br />

Deklaration einer Methode, die man implementieren muss.<br />

� Die <strong>beim</strong> Serialisieren benutzte Methode writeObject wird standardmäßig vom<br />

Runtimesystem bereitgestellt.<br />

� eignet sich sehr gut für das temporäre Speichern von Objekten zwischen<br />

Programmläufen (� persistente Objekte/Applikationen)<br />

� Weitere Möglichkeit: java.io Externalizable<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 109


Auswirkung auf die Anwendungsklassen<br />

im Beispiel Turtlegraphik<br />

� Die Ergänzungen in unseren Anwendungsklassen sind sehr gering:<br />

� abstract class genericTrace implements Serializable<br />

. . .<br />

� class Rabbit extends genericTrace implements Trace,<br />

Serializable<br />

. . .<br />

� class Turtle extends genericTrace implements Trace,<br />

Serializable<br />

. . .<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 110


Serialisiertes Speichern<br />

public void speichern()<br />

}<br />

{<br />

// “import java.io.*;“ angeben!<br />

try<br />

{<br />

}<br />

Aufruf erfolgt bei<br />

Programmende<br />

FileOutputStream fos = <strong>new</strong> FileOutputStream ("stream.tmp");<br />

ObjectOutputStream oos = <strong>new</strong> ObjectOutputStream (fos);<br />

oos.writeObject (spuren);<br />

System.out.println("schreiben: " + spuren.size());<br />

catch (Exception e)<br />

{System.out.println("Exception (schreiben):"+e.getMessage()); }<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 111


Serialisiertes Laden<br />

public void laden()<br />

{<br />

//import java.io.*;<br />

try<br />

{<br />

FileInputStream fis = <strong>new</strong> FileInputStream ("stream.tmp");<br />

ObjectInputStream ois = <strong>new</strong> ObjectInputStream (fis);<br />

spuren = (ArrayList)ois.readObject ();<br />

System.out.println("lesen: "+spuren.size());<br />

}<br />

catch (Exception e)<br />

{System.out.println("Exception (laden):"+e.getMessage()); }<br />

}// laden<br />

Aufruf erfolgt im<br />

Konstruktor<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 112


Dateien unter Java lesen<br />

// Datei zeilenweise lesen<br />

// import java.io.*;<br />

File eingabedatei = <strong>new</strong> File (“eingabe.dat“);<br />

FileReader fr = <strong>new</strong> FileReader(eingabedatei);<br />

BufferedReader br = <strong>new</strong> BufferedReader (fr);<br />

line = br.readLine();<br />

while (line != null)<br />

{<br />

...<br />

line = br.readLine();<br />

}// while<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 113


Lesen aus einem jar oder via Internet<br />

� Um das Laden aus einem jar zu ermöglichen, wird statt des direkten<br />

Dateinamens die folgende Konstruktion eingesetzt:<br />

� URL filename = getClass().getResource(„myFile.dat");<br />

� Beispiel:<br />

� try {<br />

URL url = this.getClass().getResource("nicelogo.gif");<br />

myicon = <strong>new</strong> ImageIcon(url);<br />

myLabel.setIcon(iicon);<br />

}<br />

catch (Exception e){ }<br />

� try {<br />

InputStream is;<br />

URL url = his.getClass().getResource("parameter.prop");<br />

is = url.openStream();<br />

Properties p = <strong>new</strong> Properties();<br />

p.load(is);<br />

}<br />

catch (Exception e){ }<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 114


Vereinfachte Eingabe (ab Java Version 5.0)<br />

import java.util.Scanner;<br />

import java.io.*;<br />

...<br />

File f = <strong>new</strong> File("numbers.dat" );<br />

Scanner sc = <strong>new</strong> Scanner( f );<br />

while (sc.hasNextLong())<br />

{<br />

}<br />

long aLong = sc.nextLong();<br />

...<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 115


Datei schreiben<br />

// import java.io.*;<br />

// - in ASCII Datei schreiben --------<br />

FileWriter fw;<br />

String zeile = "Hello World";<br />

try<br />

{<br />

fw = <strong>new</strong> FileWriter (“strings.dat");<br />

fw.write (zeile);<br />

fw.write ("\n");<br />

fw.close();<br />

}<br />

catch (FileNotFoundException e) {}<br />

catch (IOException e) {}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 116


Property-Dateien<br />

� Um ein Programm einfacher konfigurieren bzw. (an sprachliche<br />

Anforderungen) anpassen zu können, bietet es sich an, Zeichenfolgen<br />

aus einer Konfigurationsdatei einzulesen. In Java wird dies mit der<br />

Klasse java.util.Properties unterstützt.<br />

� Dateien, oder allgemeiner Eingabe-Streams, in denen Properties<br />

definiert sind, können mit der Methode load() der Klasse<br />

java.util.Properties gelesen werden.<br />

�� In der Datei werden paarweise Property-Name und Property-Wert<br />

aufgeführt.<br />

� Kommentar beginnt mit dem Zeichen # oder ! Und steht in einer<br />

separaten Zeile.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 117


Property-Dateien<br />

# einfaches Beipiel<br />

bezeichner=H.-P. Wiedling, 2011<br />

// Properties lesen<br />

String copyright = ““;<br />

try<br />

{<br />

InputStream is;<br />

is = <strong>new</strong> URL<br />

(getDocumentBase(),"parameter.properties").openStream();<br />

// oder<br />

// InputStream is =<strong>new</strong> FileInputStream ("plan.prop");<br />

Properties p = <strong>new</strong> Properties();<br />

p.load( is );<br />

copyright = p.getProperty("bezeichner");<br />

}<br />

catch (Exception e )<br />

{<br />

System.out.println (e.getMessage());<br />

System.out.println ("plan.prop <strong>Fachbereich</strong> <strong>Informatik</strong>: nicht 3. gefunden?!");<br />

Semester Bachelor Studiengang<br />

}<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

...<br />

Property-Datei parameter.properties:<br />

Bezeichner, Trennzeichen (=, : oder Whitespace),<br />

Wert des Bezeichners<br />

Seite 118


... und als ResourceBundle ist die Datei<br />

einfach verfügbar<br />

import java.util.MissingResourceException;<br />

import java.util.ResourceBundle;<br />

public class Messages {<br />

private static final String BUNDLE_NAME = "parameter";<br />

private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle<br />

.getBundle(BUNDLE_NAME);<br />

private Messages() { }<br />

public static String getString(String key) {<br />

try<br />

{ return RESOURCE_BUNDLE.getString(key); }<br />

catch (MissingResourceException e)<br />

{ return '!' + key + '!'; }<br />

}<br />

}<br />

Aufruf:<br />

Messages.getString(„bezeichner")<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 119


Java-Archive (I)<br />

� jar ist ein Werkzeug, mit dem Java-Archivdateien erzeugt und verändert<br />

werden können. Eine jar-Datei ist eine ZIP-Datei;<br />

sie enthält i. d. R. kompakt mehrere Dateien.<br />

C:>jar<br />

Syntax: jar {ctxu}[vfm0Mi] [JAR-Datei] [Manifest-Datei] [-C dir] Dateien ...<br />

Optionen:<br />

-c neues Archiv erstellen<br />

-t Inhaltsverzeichnis für Archiv auflisten<br />

-x benannte (oder alle) Dateien aus dem Archiv extrahieren<br />

-u vorhandenes Archiv aktualisieren<br />

-v ausführliche Ausgabe für Standardausgabe generieren<br />

-f Namen der Archivdatei angeben<br />

-m Manifestinformationen aus angegebener Manifest-Datei einbeziehen<br />

-0 nur speichern; keine ZIP-Komprimierung verwenden<br />

-M keine Manifest-Datei für die Einträge erstellen<br />

-i Indexinformationen für die angegebenen JAR-Dateien generieren<br />

-C ins angegebene Verzeichnis wechseln und folgende Datei einbeziehen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 120


Java Archive (II)<br />

Falls eine Datei ein Verzeichnis ist, wird sie rekursiv verarbeitet.<br />

Der Name der Manifest-Datei und der Name der Archivdatei müssen in der gleichen<br />

Reihenfolge wie die Flags 'm' und 'f‚ angegeben werden.<br />

Beispiel 1:<br />

Archivieren von zwei Klassendateien in einem Archiv mit dem Namen<br />

classes.jar:<br />

jar cvf turtle.jar helloworld.class frame.class<br />

Beispiel 2:<br />

Verwenden der vorhandenen Manifest-Datei ‘manf‘ und archivieren aller Dateien im<br />

Verzeichnis mygui/ in 'classes.jar':<br />

jar cvfm turtle.jar manf -C mygui/<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 121


Java Archive: Manifest<br />

manf<br />

Main-Class: mygui/Main<br />

Sealed: true<br />

Main-Class: class-Datei, die main-Methode enthält<br />

Sealed: benötigte Pakete sind Bestandteil der Archivdatei<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 122


Archivdateien<br />

Archiv anlegen<br />

� jar cvfm turtle.jar manf mygui/*.class<br />

� c: create<br />

� v: verbose (d.h. Meldungen anzeigen)<br />

� f: Archiv, welches erzeugt wird<br />

� m: Manifestdatei<br />

Archiv ausführen<br />

�� java -jar turtle.jar<br />

eclipse<br />

� Unter eclipse werde unter dem Menüpunkt "Export/Java.." .jar<br />

erstellt. Dort werden auch weitere Einstellungen (z.B. Main-<br />

Class) vorgenommen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 123


Archive (jar)<br />

� Classpath:<br />

set path=%; C:\JBuilder2007\jre\bin<br />

set CLASSPATH=%;.<br />

� Manifest (Datei manf):<br />

Main-Class: mygui/Main<br />

Sealed: true<br />

� Erstellen:<br />

jar cvfm turtle.jar manf *.class<br />

erzeugt eine jar-Datei mit allen *.class Dateien; manf ist eine Datei, die<br />

Informationen enthält über Klasse mit der main-Methode (sog. Manifest)<br />

� jar-Datei ansehen<br />

jar tvf turtle.jar<br />

� Starten:<br />

java -jar turtle.jar<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 124


Zugriffsrechte<br />

� public, protected, private wie in C++<br />

� jedes Element hat sein eigenes Zugriffsrecht<br />

� Definition gilt (im Gegensatz zu C++) nicht für die nachfolgenden<br />

Elemente<br />

� ohne Angabe bedeutet:<br />

� private für Klassen<br />

� public für Interfaces<br />

�� für Attribute und Methoden<br />

• protected innerhalb des eigenen Packages<br />

• private außerhalb des eigenen Packages<br />

� zur Sicherheit immer angeben<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 125


(Auswahl von) Modifier (I)<br />

� void, int, long, normaler Rückgabewert;<br />

float, double,<br />

boolean, char,...<br />

spez. Obj.<br />

� Konstruktoren haben KEINEN Rückgabewert<br />

� private Methoden/Komponenten können nur<br />

klassenintern verwendet werden<br />

� protected Das Element ist nur innerhalb des Paketes zu<br />

erreichen, in dem es definiert ist sowie über<br />

entsprechende Subklassen<br />

� public Methoden/Komponenten/Klasse/Interface<br />

stehen für Aufrufe von außen (=überall) zur<br />

Verfügung.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 126


(Auswahl von) Modifier (II)<br />

� ohne Zugriff ist innerhalb des Paketes möglich<br />

(oft als "friendly" oder "package private "<br />

bezeichnet).<br />

� final Komponenten: Konstanten, die<br />

unmittelbar mit einem Wert versehen werden<br />

Bei Klassen verhindert das Schlüsselwort die<br />

weitere Verfeinerung der Klasse.<br />

Bei Methode: die Methode kann nicht<br />

überschrieben werden.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 127


(Auswahl von) Modifier (III)<br />

� static klassenweite Methoden/Komponenten, sie<br />

sind nicht an best. Objekte gebunden<br />

(das dann auch nicht zur Verfügung steht);<br />

sie werden so auch mit dem Klassennamen<br />

aufgerufen und nur einmal initialisiert, wenn<br />

das Programm geladen/initialisiert wird<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 128


(Auswahl von) Modifier (IV)<br />

� abstract Klassen die eine abstract Methode<br />

beinhalten müssen als abstract deklariert<br />

werden. Abstrakte Klassen enthalten<br />

nicht implementierte Methoden und<br />

können nicht instanziiert werden.<br />

Abstracte Methoden müssen auch<br />

implementiert werden, sie werden allerdings<br />

in Subklassen spezifisch überschrieben<br />

(vgl. virtual in C++)<br />

Wenn es nur abstract Methoden gibt, dann<br />

kann man die Klasse auch als interface<br />

deklarieren. Bei interfaces ist der<br />

Modifikator optional<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 129


Sichtbarkeit<br />

Public Protected Package Private<br />

Gl. Klasse Ja Ja Ja ja<br />

Klasse im gl. Paket Ja Ja Ja Nein<br />

Subklasse in<br />

anderem Paket<br />

Nicht Subklasse,<br />

and. Paket<br />

Ja Ja Nein Nein<br />

Ja Nein Nein Nein<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 130


Vorgehensweise bei Entwurf und Doku<br />

� Analyse der Benutzergruppen<br />

� Anwendungsfälle (Use Case Diagramm, UML)<br />

� Workflow (Geschäftsprozess)<br />

� zeitliche Verkettung einzelner Use Cases<br />

(�Flussdiagramm, PAP)<br />

� abstraktes Screen-Diagramm<br />

� Bedien- und Anzeigeelemente nur aufgelistet<br />

�� konkretes Screen-Diagramm<br />

� Detailliierte Layout-Skizze<br />

� Sequenzdiagramm (UML)<br />

� jeder Screen wird Objekt einer eigenen Klasse<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 131


Benutzergruppen charakterisieren<br />

� welche Leute sollen mit dem System arbeiten?<br />

� was sind ihre eigentlichen Aufgaben und Ziele ?<br />

� in welchem Zusammenhang nutzen sie das System ?<br />

� wie kann man sie im Hinblick auf das System charakterisieren ?<br />

� seltene / häufige / ständige Nutzer,<br />

Anfänger / Fortgeschrittene / Profis<br />

• bezüglich der Anwendung<br />

• bezüglich Rechner und Betriebssystem<br />

� interessiert / widerwillig ? lernfähig / starr ?<br />

im Stress ?<br />

Der DAU ist nicht blöd !<br />

Er hat oft einfach nur<br />

Wichtigeres zu tun<br />

� problematisch:<br />

Wie viel Kontextwissen (� inhaltliche Tiefe und Terminologie) ist<br />

erforderlich?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 132


Benutzerzentriertes<br />

Requirement Engineering<br />

� Ausgangspunkt muss der/die Benutzer/-in sein mit den Aufgaben,<br />

die er/sie bewältigen muss:<br />

� Benutzer beschreibt Aufgabe (umgangssprachlich, informell)<br />

� Interviewsituationen (Frage-Antwort-Spiel) werden in Form von<br />

Protokollen festgehalten<br />

� Aus dem Text ergibt sich ein Modell, das die reale Situation auf die<br />

benötigten Merkmale vereinfacht:<br />

Klassen, Methoden, Attribute, …<br />

� Eine Orientierungshilfe kann die Methode von Abbott sein:<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 133


Beispiel Fahrkartenautomat<br />

� kleine, große, alte, junge, mit Sehschwäche ...<br />

� wegfahren zu Termin / Besuch / Urlaub ...<br />

� ganz unterschiedliche Nutzungshäufigkeit<br />

� Einmal im Jahr, täglich; vertraute vs. Fremde Ziele<br />

� interessiert? Nein<br />

� Es geht nicht um den Fahrkartenautomat – es geht um die Reise!<br />

�� lernfähig? Manche<br />

� Das nächste Mal soll‘s besser klappen<br />

� Stress? aber sicher!<br />

� Die (Straßen-)Bahn droht abzufahren!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 134


Beispiel Stundenplanungssystem<br />

� Sekretärin: Eingabe von Wunschzetteln<br />

Ausdrucken von Plänen<br />

Beantworten von Anfragen<br />

� Prodekan: Lehrveranstaltungsplanung<br />

(wer macht was)<br />

� Stundenplaner: Stundenplanung<br />

(wann und wo)<br />

Anwendungswissen ist erforderlich!<br />

� charakterisieren Sie die Benutzergruppen !<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 135


Anwendungsbeispiel Ticketsystem (1/2)<br />

� Trouble-Ticket- bzw. Help-Desk-Systeme sind sehr gut geeignet, um<br />

den Fortgang der Bearbeitung gemeldeter Problembeschreibungen<br />

zu beobachten.<br />

� Kunden können die Bearbeitung direkt verfolgen und die<br />

Serviceorientierung eines Dienstleistungsunternehmens<br />

nachvollziehen. Außerdem kann eine Wissensbasis für die Bearbeiter<br />

aufgebaut werden.<br />

Quelle: http://de.wikipedia.org/wiki/Issue-Tracking-System (Stand:<br />

Mai 2010)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 136


Anwendungsbeispiel Ticketsystem (2/2)<br />

� Mit einem Ticketsystem werden<br />

�� also Problemsituationen erfasst und ein Vorschlag einer ersten<br />

Kategorisierung gemacht<br />

� anschließend erfolgt mit ihrer Hilfe eine Zuordnung zu einem<br />

Mitarbeiter<br />

� daneben auch festgehalten, in welchem Bearbeitungszustand des<br />

Tickets ist; Durch einen Kommentar werden nach Behebung des<br />

Fehlers die Ursache und der Test (kurz) erläutert und dieser<br />

ebenfalls vermerkt;<br />

� die Kategorisierung gegebenenfalls korrigiert<br />

� nach Test und Qualitätskontrolle (der Test wird von einer<br />

weiteren Person nachvollzogen – Stichwort „Vier-Augen-Prinzip“)<br />

wird das Ticket freigeben.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 137


Anwendungsfälle (Use Cases)<br />

� High-Level-Beschreibung eines Systems Wie findet man<br />

� skizziert die Benutzergruppen<br />

Use Cases?<br />

� skizziert, was diese mit dem System machen<br />

� das System wird als Black Box betrachtet<br />

� rückt den Menschen ins Blickfeld !<br />

� nicht Datenstrukturen und -flüsse<br />

� beschreibt nicht die Struktur des Systems !<br />

� Teil der Unified Modeling Language UML<br />

� wird durch andere Diagrammtypen verfeinert<br />

Man frage<br />

unvorbelastete<br />

Benutzer:<br />

"Was wollen Sie tun?"<br />

�siehe entsprechende<br />

Vorlesung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 138


Die Methode Abbott (1/3)<br />

� KISS – Keep it simple and stupid:<br />

Halte es einfach und leicht verständlich<br />

� Gehen Sie schrittweise vor und verfeinern Sie dabei Ihren Entwurf<br />

� Wenden Sie das Paradigma „code a little, test a little“ auf den<br />

gesamten Prozess an und setzen Sie „Peer-Review“ sein<br />

� Ausgangspunkt für eine umgangssprachliche Beschreibung der<br />

Aufgaben der Benutzer sein, die zu bewältigen sind:<br />

�� Benutzer beschreiben ihre Aufgabe (umgangssprachlich,<br />

informell)<br />

� Interviewsituationen (Frage-Antwort-Spiel) werden in Form von<br />

Protokollen festgehalten<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 139


Die Methode Abbott (2/3)<br />

� Aus dem Text ergibt sich ein Modell, das die reale Situation auf die<br />

benötigten Merkmale vereinfacht:<br />

� Klassen<br />

� Methoden<br />

� Attribute<br />

� Instanzen, …<br />

�� Ein Einstieg, eine Orientierungshilfe kann die Methode von Abbott<br />

sein:<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 140


Die Methode Abbott (3/3)<br />

� Abbott hat bereits 1983 gezeigt, dass sich eine verbale Spezifikation<br />

(� (� Erstellung von Use Cases) als Grundlage eines Entwurfs eignet.<br />

� Er empfiehlt ein Vorgehen, bei dem bestimmte Wortarten (Hauptund<br />

Zeitwörter) in der Spezifikation gesucht werden und aus ihnen<br />

der Entwurf abgeleitet wird.<br />

�� Abbott hat abstrakte Datenstrukturen und Operationen gebildet. Es<br />

hat sich gezeigt, dass dieses Verfahren auch als Grundlage für einen<br />

objektorientierten Entwurf verwendet werden kann.<br />

Man geht dabei etwa nach folgendem Schema vor:<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 141


Vom Problem zur Problemlösung (1/3)<br />

� Herausfiltern von Hauptwörtern<br />

Die Relevanz eines Hauptwortes hängt von seiner Art ab<br />

� Gattungsnamen („Ticket, Kunde, Sachbearbeiter, …“) spielen eine<br />

zentrale Rolle; jeder dieser Begriffe ist ein Kandidat für eine Klasse<br />

� Eigennamen dienen als Bezeichner für bestimmte Objekte („mein<br />

Ticket, …“). Sie können indirekt auch zur Klassenbildung führen<br />

(„Kategorie, Administrator , …“)<br />

� Mengen- und Größenangaben („MByte, Liter…“) sowie<br />

Materialbezeichnungen („Holz, …“) eignen sich oft nicht zur Bildung<br />

von Klassen; entsprechendes gilt für abstrakte Begriffe („Arbeit,<br />

Leistung, Schönheit, …“)<br />

� Zeitwörter, die als Hauptwörter verwendet werden, deuten auf<br />

Aktionen hin und können Methoden werden<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 142


Vom Problem zur Problemlösung (2/3)<br />

� Dies kann nur eine erste Orientierung sein.<br />

Falsche Granularität des Entwurfs (zu fein - zu grob) zwingt i. d. R. den<br />

Entwurf zu verbessern!<br />

� Suchen von Gemeinsamkeiten<br />

Die Antwort auf die Frage „Gleich oder verschieden“ geht oft aus der<br />

Aufgabe hervor. Wenn für zwei verwandte Begriffe feststeht, dass sie<br />

verschiedene Dinge bezeichnen, sollte geklärt werden in welcher<br />

Beziehung sie stehen. So entstehen „Ist-ein-Beziehungen“ und damit<br />

Klassenhierarchien („Jeder schwerwiegender Fehler ist auch ein<br />

Ticket“) oder Attribute („Jedes Ticket hat einen Zustand und eine<br />

Beschreibung“).<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 143


Vom Problem zur Problemlösung (3/3)<br />

� Auffinden von relevanten Zeitwörtern<br />

Zeitwörter bezeichnen Aktionen mit Objekten. Sie stehen immer in<br />

Verbindung mit Objekten bestimmter Klassen. Aus den Zeitwörtern<br />

können Methoden gebildet werden, die auf die entsprechenden<br />

Objekten angewendet werden:<br />

� „… Alle Tickets werden für den Administrator in einer Übersicht<br />

dargestellt; er ordnet Tickets einem Sachbearbeiter zu; wenn die<br />

Ticketbehandlung überprüft wurde, dann wird das Ticket<br />

freigegeben, …“<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 144


� Anwendungsbeispiel Ticketsystem (1/2)<br />

� Trouble-Ticket- bzw. Help-Desk-Systeme sind sehr gut geeignet, um<br />

den Fortgang der Bearbeitung gemeldeter Problembeschreibungen<br />

zu beobachten.<br />

� Kunden können die Bearbeitung direkt verfolgen und die<br />

Serviceorientierung eines Dienstleistungsunternehmens<br />

nachvollziehen. Außerdem kann eine Wissensbasis für die<br />

Bearbeiter (Sachbearbeiter, Administrator) aufgebaut werden.<br />

Quelle:<br />

http://de.wikipedia.org/wiki/Issue-Tracking-System (Stand: Mai 2010)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 145


� Anwendungsbeispiel Ticketsystem (2/2)<br />

� Mit Ticketsystemen werden also Problemsituationen erfasst und ein<br />

Vorschlag einer ersten Kategorisierung gemacht.<br />

� Mit Hilfe des Ticketsystems wird anschließend eine Zuordnung zum<br />

Mitarbeiter hergestellt. Daneben hält das Ticketsystem auch fest, in<br />

welchem Bearbeitungszustand des Tickets ist:<br />

• neu_erfasst, in_Bearbeitung, bearbeitet, getestet, freigegeben<br />

� Durch einen Kommentar werden nach Behebung des Fehlers die<br />

Ursache und der Test (kurz) erläutert und ebenfalls vermerkt; die<br />

Kategorie(n) werden gegebenenfalls korrigiert. Nach Test und<br />

Qualitätskontrolle (der Test wird von einer weiteren Person<br />

nachvollzogen – Stichwort „Vier-Augen-Prinzip“) wird das Ticket<br />

freigeben.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 146


Darstellung/Beschreibung eines Use Cases (1/2)<br />

� Die graphische Beschreibung eines<br />

Anwendungsfalls hält neben dem<br />

System die (Haupt-)Akteure<br />

und die von ihnen<br />

durch geführten<br />

Aktionen fest.<br />

Kunde/Client<br />

� Eine Aussage<br />

über die Struktur des Systems<br />

wird dabei nicht gemacht.<br />

erstellt<br />

neu<br />

sichtet<br />

Ergebnis<br />

prüft,<br />

gibt frei<br />

sichtet<br />

beschreibt<br />

Problem- Problemlösung<br />

korrigiert<br />

Kategorie<br />

ordnet<br />

Tickets<br />

zu<br />

Sachbearbeiter<br />

/ Consultant<br />

Administrator/Dispatcher<br />

� Neben einer einfachen graphischen Darstellung<br />

bietet sich eine tabellarische Beschreibung eines Anwendungsfalls an.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 147


Darstellung/Beschreibung eines Use Cases (2/3)<br />

� Name des Anwendungsfalles<br />

Wahl eines prägnanten, sinngebenden Namens (telling name)<br />

� Bereich<br />

Zu welchem Aufgabenteil gehört der Anwendungsfall<br />

� Ziele<br />

Was soll mit dem Anwendungsfall erreicht werden?<br />

� Beteiligte, Anwendungskontext<br />

Wer nutzt das System unter welchen Bedingungen/in welcher<br />

Umgebung für welches Ziel?<br />

�� Weitere Betroffene/Stakeholder<br />

Wer ist neben dem direkten Anwender betroffen? Welche Interessen<br />

gibt es?<br />

� Hauptakteur<br />

Wer ist der Hauptakteur? Was löst den Anwendungsfall aus?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 148


Darstellung/Beschreibung eines Use Cases (3/3)<br />

� Voraussetzung/Vorbedingung<br />

Welchen Ausgangszustand der Umgebung benötigt der<br />

Anwendungsfall?<br />

� Hauptablauf<br />

Wie sieht der wesentliche Ablauf in dem Anwendungsfall aus?<br />

� Nachbedingung im Erfolgsfall/im Fehlerfall<br />

Welchen Systemzustand garantiert der Anwendungsfall im<br />

Erfolgsfall und im Fehlerfall?<br />

� Ausnahmen, Fehlerfälle<br />

Welche Ausnahmen sind möglich?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 149


Ticketklassen unter Java (1/3)<br />

� Was macht ein Ticket aus?<br />

Festlegung von Getter und Setter-Methoden als Interface unter Java<br />

public interface TicketInterface {<br />

public String getClient ();<br />

public String getComment ();<br />

public String getEmail ();<br />

public String getDescription ();<br />

public String getConsultant ();<br />

public TicketState getTicketState ();<br />

public ArrayList<br />

getTicketCategory ();<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 150


Ticketklassen unter Java (2/3)<br />

}<br />

public void setClient (String client);<br />

public void setComment (String comment);<br />

public void setEmail (String email);<br />

public void setDescription ( String descript);<br />

public void setConsultant (String consult);<br />

public void setTicketState (TicketState ts);<br />

public void setTicketCategory<br />

(ArrayList categories);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 151


Ticketklassen unter Java (3/3)<br />

� TicketManagement: eine ArrayList zur Verwaltung der Tickets<br />

ArrayList allMyTickets;<br />

� Ticketkategorien<br />

public enum TicketCategory {<br />

Software, Hardware, Bedienung, Betriebssystem,<br />

Netzwerk<br />

}<br />

� Modellierung der Zustände<br />

public enum TicketState { neu_erfasst,<br />

in_Bearbeitung, bearbeitet, getestet,<br />

freigegeben }<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 152


class Ticket<br />

public class Ticket implements TicketInterface {<br />

private String<br />

client, comment, email, descript, consultant;<br />

private TicketState ts;<br />

private ArrayList categories;<br />

public Ticket (String client, String comment,<br />

String email,<br />

ArrayList categories)<br />

{ ... }<br />

public String toString () { return comment; }<br />

...<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 153


AWT – Swing – SWT: ein kurzer Vergleich<br />

� AWT implementiert eigene GUI-Elemente<br />

und Grafikoperationen in Java oder C<br />

� Swing setzt auf AWT auf mit weiteren<br />

reinen Javaimplementierungen<br />

Swing<br />

JFace<br />

SWT<br />

� SWT<br />

� plattformunabhängige Schnittstelle zu<br />

den GUI-Elementen des jeweiligen<br />

Windowing-Systems<br />

� reicht größtenteils einfach Funktionsjava.awt<br />

sun.awt<br />

operating<br />

system<br />

JNI *)<br />

� reicht größtenteils einfach Funktions-<br />

windowing<br />

system<br />

operating<br />

system<br />

aufrufe weiter *) JNI: Java Native Interface<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 154


Exkurs: Applets (I)<br />

� Bei Applets handelt es sich i. d. R. um unbekannten Code<br />

� Bei der Ausführung von Applets müssen aufgrund des verständlichen<br />

Sicherheitsbedürfnisses des Nutzers bzw. dessen Systems<br />

Sicherheitsbeschränkungen eingehalten werden.<br />

� Ein Applet darf<br />

� nicht auf das lokale Dateisystem zugreifen - es sei denn der Benutzer lässt<br />

es ausdrücklich zu<br />

� keine Verzeichnisse ansehen, Existenz von Dateien prüfen<br />

� keine Dateiattribute (Größe, Zugriffsrechte) prüfen<br />

� keine Dateien lesen, schreiben, löschen, umbenennen<br />

� keine Netzwerkverbindungen zu irgendeinem Computer aufbauen<br />

� die Ausführung nicht über exit() beenden<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 155


Exkurs: Applet (II)<br />

� Geeignet zur Einbettung in eine HTML-Seite<br />

� (meist nur für "kleine" Aufgaben – Downloadzeit bedenken)<br />

� spezialisierte Fensterklasse JApplet<br />

� Größe wird in der HTML-Seite festgelegt<br />

� ansonsten Bestückung mit Komponenten wie bei JFrame<br />

� Steuerung durch den Browser<br />

� init Initialisierung <strong>beim</strong> ersten Aufruf der HTML-Seite<br />

�� start Applet wird sichtbar gemacht (z.B. Animation starten)<br />

� stop Applet wird verborgen (z.B. Animation stoppen)<br />

� destroy das Applet wird entladen (Wechsel der HTML-Seite)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 156


Dokumentieren mit Java<br />

� In Java wird es der Entwicklerin/dem Entwickler sehr leicht gemacht,<br />

eine (Online-)Programmdokumentation im Stil der Java-Online<br />

Dokumentation zu erstellen, wenn man sich an die folgenden<br />

Konventionen hält:<br />

� Spezieller Kommentar zur Erläuterung der Klasse bzw. der<br />

Methoden/Komponenten steht zwischen /** und */;<br />

� spezielle Markierungen beginnen mit dem @-Zeichen und stehen<br />

dann innerhalb dieser Kommentare.<br />

� Die Sichtbarkeitsmodifikatoren (public, private, protected)<br />

müssen angegeben werden.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 157


javadoc<br />

� Hier eine Auswahl:<br />

�� @see name Hyperlink auf eine Klasse<br />

� @see name#methode Hyperlink auf eine Methode<br />

� @version text steht (nur) vor Klassendefinition<br />

� @author text steht (nur) vor Klassendefinition<br />

� @param name beschr. Parameterbeschreibung vor Methoden<br />

� @return beschr. steht (nur) vor Methoden<br />

� @exception Klassenname Beschreibung steht vor Methode<br />

�� Erzeugt wird die Dokumentation mit dem Befehl<br />

javadoc datei.java –version –author –windowtitle bsp<br />

� Nutzen Sie diese Dokumentationsmöglichkeiten in Ihrem Programmcode für<br />

die von Ihnen (weiter-)entwickelten Klassen im Praktikum!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 158


javadoc Beispiel<br />

Klassenübersicht<br />

Dokumentation zur<br />

gesamten Klasse<br />

Version und Autor<br />

Erläuterung<br />

des Konstruktors/<br />

der Methode und<br />

Sprung zur Methode<br />

Titel<br />

(aus javadoc Aufruf)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 159


Die JNLP-Datei: Deployment von Java-Code<br />

� Mithilfe von JNLP-Dateien kann die plattform-übergreifende zu Verfügung<br />

Stellung und Verteilung (Deployment) von Java-Applikation sehr komfortabel<br />

genutzt werden.<br />

� Man sollte sich allerdings dabei sowohl als Anbieter als auch als möglicher<br />

Nutzer der Applikation darüber bewusst sein, dass man mit dem Laden und<br />

anschließendem Ausführen der Applikation sämtliche Zugriffsrechte auf den<br />

Client hat und man damit clientseitig ein Sicherheitsrisiko eingeht.<br />

� Die Beschreibungsdatei für eine Anwendung ist in XML-Notation geschrieben<br />

und wird auf dem Webserver abgelegt, damit kann eine entsprechende<br />

Internetseite auf diese verweisen und immer die aktuellste Version anbieten<br />

(es ist darauf zu achten, dass diese Datei auf dem Webserver mit dem MIME-<br />

Type application/x-java-jnlp-file assoziiert ist; diese XML-Dateien<br />

haben i. d. R. die Endung .jnlp).<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 160


JNLP: Java Network Launch Protocol<br />

Zusätzlich zu der jar-Datei wird eine jnlp-Datei erstellt:<br />

<br />

<br />

<br />

Beisipiel einer JNLP-Datei in ENA<br />

Prof. Dr. H.-P. Wiedling<br />

<br />

Demonstration von JNLP für ENA<br />

<br />

<br />

<br />

<br />

<br />


JNLP-Sicherheitsaspekte<br />

� Wenn die Applikation signiert ist, können unter diesem Element die<br />

benötigten Sicherheitseinstellungen angefordert werden. Wenn dieses<br />

Element (und das entsprechende Unterelement) nicht angegeben ist, läuft<br />

die Applikation in der Applet-ähnlichen Sandbox, mit strengen<br />

Zugriffsrechten.<br />

� all-permissions<br />

� Wenn diese Option angegeben ist und die Applikation signiert ist, werden der<br />

Applikation alle Rechte eingeräumt.<br />

�� j2ee-application-client-permissions<br />

� Mit dieser Option möchte die Applikation die Zugriffsmöglichkeiten, die es als<br />

J2EE-Client benötigt. Damit darf die Applikation beispielsweise nicht auf<br />

lokale Ressourcen zugreifen, dafür aber auf alle Hosts auf allen Ports.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 162


JNLP erstellen<br />

� jar-Datei erstellen:<br />

jar cvfm turtle.jar manf *.java *.class<br />

� Verschlüsselung erstellen:<br />

keytool -genkey -keystore myKeys -alias turtle<br />

... es folgen Abfragen von Schlüsselinformationen<br />

(inkl Pw für Keystore und turtle) u.a. „keytool -list -keystore myKeys“<br />

� jar-Datei signieren:<br />

jarsigner -keystore myKeys turtle.jar turtle<br />

Quelle:<br />

http://java.sun.com/developer/technicalArticles/Programming/jnlp/ (überholt)<br />

http://download.oracle.com/javase/tutorial/deployment/webstart/deploying.html oder<br />

http://www.dpunkt.de/java/Programmieren_mit_Java/Deployment/9.html#id502<br />

auf pw für<br />

Keystore und<br />

Eintrag achten!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 163


Entwurf:<br />

�� Diagramme<br />

� Rapid Prototyping<br />

� Modelle und Metapher<br />

� Gestaltungskriterien<br />

� Screens (abstrakt, konkret)<br />

� Navigationsübersicht<br />

� Abläufe/Workflow<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 164


Ein kleines Beispiel<br />

� Überlegen Sie, wie ein Anwender den Dialog mit einem<br />

Geldautomaten wahrnimmt und auch beschreibt<br />

� Zugangsberechtigung kontrollieren<br />

(EC-Karte und Ihre 4stellige Geheimnummer)<br />

� Betrag angeben<br />

�� Betrag ausgeben<br />

� Automat wieder in den Ausgangszustand<br />

versetzen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 165


Notation des Sequenzdiagramms<br />

Objekt<br />

Methodenausführung<br />

Lebenslinie<br />

Meth.aufrufen<br />

eigene<br />

Methode<br />

aufrufen<br />

Bedingung<br />

siehe auch SWT-Skript<br />

Ablauf objektorientiert<br />

beschrieben<br />

Objekt<br />

erzeugen<br />

Objekt<br />

zerstören<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 166


Sequenzdiagramm "Geld holen"<br />

����<br />

���������<br />

���������<br />

����<br />

�����<br />

������������������<br />

������������<br />

������������<br />

E������� ��������<br />

��� ���� ������<br />

���������� ��������<br />

�� �����<br />

������ ������ ��������<br />

�������� ��������<br />

��������<br />

E������� ��������<br />

���� ���<br />

��� ������<br />

E������� ��������� ���������<br />

���� ��������<br />

���� ���������<br />

���������<br />

���������<br />

��������<br />

��������<br />

��������<br />

����������<br />

���������<br />

���������<br />

���<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 167


Sequenzdiagramm "Geld abheben"<br />

Ich:<br />

CBenutzer<br />

Geld<br />

holen<br />

EC-Karte einlesen<br />

Use Case wählen<br />

PIN-Nummer einlesen<br />

Betrag einlesen<br />

EC-Karte ausgeben<br />

EC-Karte entnehmen<br />

Geld entnehmen<br />

VolksbankAutomat1:<br />

CGeldautomat<br />

Geld ausgeben<br />

in diese<br />

Richtung<br />

kann man<br />

das innere<br />

Verhalten<br />

weitermodellieren<br />

Screens=<br />

Zustände<br />

Ruhestellung<br />

Hauptmenü<br />

PIN-Dialog<br />

...<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 168


Geldautomat als "Assistent“ (üblich)<br />

� "Assistenten" serialisieren die Abfrage mehrerer Eingabewerte vom<br />

Benutzer<br />

� Vereinfachung: Benutzer muss zu einem Zeitpunkt nur<br />

über eine Frage nachdenken<br />

� sinnvoll für selten benutzte Anwendungsfälle oder<br />

für unerfahrene Benutzer<br />

� langsam und schwerfällig für Profis<br />

� zum Vergleich der bekannte Geldautomat<br />

nicht als Assistent:<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 169


Szenario "Kontostand abfragen"<br />

Benutzer Automat<br />

führt EC-Karte ein<br />

wählt "Kontostand abfragen"<br />

gibt PIN-Nummer ein<br />

nimmt EC-Karte<br />

bietet Hauptmenü an<br />

erfragt PIN-Nummer<br />

gibt EC-Karte heraus<br />

zeigt Kontostand an<br />

geht in Ruhestellung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 170


Szenario "Geld holen"<br />

Benutzer Automat<br />

führt EC-Karte ein<br />

wählt "Auszahlung"<br />

gibt PIN-Nummer ein<br />

gibt Betrag ein<br />

nimmt EC-Karte<br />

nimmt Geld<br />

Sicht der Bank<br />

Sicht des Kunden<br />

bietet Hauptmenü an<br />

erfragt PIN-Nummer<br />

erfragt Betrag<br />

gibt EC-Karte heraus<br />

gibt Geld heraus<br />

geht in Ruhestellung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 171


Geldautomat: Use Case Diagramm<br />

Use Cases<br />

entsprechen<br />

oft der<br />

obersten<br />

Menüebene<br />

Kunde<br />

Geldautomat<br />

Kontostand<br />

abfragen<br />

Geld holen<br />

Schecks<br />

bestellen<br />

Geldvorrat<br />

prüfen<br />

Geld<br />

nachfüllen<br />

eingezogene<br />

Scheckkarten<br />

entnehmen<br />

eine Benutzergruppe sieht oft nicht die Funktionen der anderen<br />

Mitarbeiter<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 172


Sequenzdiagramme - Notation<br />

� stellen Objekte und deren Interaktion dar<br />

� Interaktion: eine Methode ruft eine andere Methode auf<br />

� Zeitachse von oben nach unten<br />

� Lebensdauer des Objekts durch "Lebenslinie" dargestellt<br />

� vgl. Flussdiagramm / Programmablaufplan<br />

� ältere Diagrammtypen, die nicht objektorientiert sind<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 173


Sequenzdiagramme - Bewertung<br />

� Diagramme für GUI-Entwurf in UML nur beschränkt geeignet:<br />

� UML konzentriert sich auf die Architektur von SW-Systemen<br />

� vernachlässigt den visuellen Aspekt<br />

� ein GUI wird zwar mit Klassen realisiert, anhand eines Klassen- oder<br />

Kollaborationsdiagramms kann man sich aber kein Bild von<br />

Aussehen und Benutzung machen !<br />

� Vorschlag: Screen-Diagramme<br />

� im Grunde abgewandelte Zustandsdiagramme<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 174


abstrakt und konkret<br />

Beispiel: Lehrangebote<br />

ansehen<br />

� abstrakte Elementliste<br />

� konkretes Layout<br />

(Stichwortliste, Halbsätze) (konkrete Anordnung, Festlegung<br />

auf Componenten)<br />

Sortierung wählen:<br />

Semester, Dozent, Import/Export<br />

<strong>Fachbereich</strong> wählen<br />

Vorschau<br />

Drucken<br />

Ausgabe in Datei<br />

Schließen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 175


Verbindung zum Sequenzdiagramm<br />

OnSortClick<br />

OnFbChange<br />

OnDiskClick<br />

OnPrintClick<br />

LvPlanungView:<br />

CLvPlanungAusgDlg<br />

OnPreviewClick<br />

OnExitClick<br />

SetSort(Sort)<br />

SetFb(Fb)<br />

Output(P)<br />

LvPlanungModel:<br />

CLvPlanungAusg<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 176


Komplexität beherrschen<br />

� Diagramme beanspruchen viel Platz<br />

� Problem <strong>beim</strong> Zeichnen<br />

� Problem <strong>beim</strong> Verstehen<br />

� sinnvolle Zerlegung in Teildiagramme ist wichtig<br />

� insbesondere auch hierarchische Gliederung<br />

� Abstraktion<br />

�� nicht einfach orientiert an der Papiergröße zerschneiden<br />

� aussagekräftige Bezeichnung für jedes Teildiagramm<br />

� analog zu sinnvollen Klassen- und Funktionsnamen<br />

gilt für alle,<br />

nicht nur für<br />

Zustandsdiagramme<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 177


Zustandsdiagramme: Idee und Notation<br />

� ein Objekt kann im Lauf der Zeit<br />

verschiedene Zustände annehmen<br />

� Haben einen Anfang und ein Ende<br />

� Zustandswechsel werden durch<br />

Ereignisse ausgelöst<br />

� unterschiedliche Folgezustände sind<br />

möglich abhängig von Bedingungen<br />

(Verzweigungen im Diagramm)<br />

�� Aktionen können ausgeführt werden<br />

� <strong>beim</strong> Übergang in den Folgezustand<br />

(notiert mit Ereignis/Aktion)<br />

� während des Verweilens in einem<br />

Zustand (notiert mit do/...)<br />

siehe auch OOAD-Skript!<br />

Objekt wird erzeugt<br />

durchläuft<br />

mehrere<br />

Zustände<br />

und wird vernichtet<br />

Zustand<br />

do/Aktion<br />

Ereignis[Bedingung]/Aktion<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 178


Beispiele: Tür und Lampe<br />

Tür<br />

Schließen(“rumms“)<br />

Übergangsaktion<br />

offen<br />

Öffnen<br />

geschlossen<br />

Einschalten<br />

Lampe<br />

aus<br />

an<br />

do/leuchten<br />

Ausschalten<br />

Zustandsaktion<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 179


Implementierung<br />

� Zustand: Kombination von Attributwerten des Objekts<br />

� Ereignis: empfangene Nachricht / Handler-Aufruf<br />

� Bedingung: wird im Handler ausgewertet<br />

� Zustandsübergang: Funktionskörper eines Handlers<br />

� Übergangsaktion: Methodenaufruf für anderes Objekt<br />

� Zustandsaktion: Methodenaufruf (in separatem Thread)<br />

speziell bei GUIs:<br />

� Screens / Dialoge sind Zustände des Objekts "Bedienoberfläche"<br />

� Hauptfenster hat Zeiger auf untergeordnete Fenster als Attribute<br />

� objektorientiert + ereignisorientiert<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 180


Diagramme – für wen?<br />

� Diagramme aus der Softwaretechnik sind nicht geeignet, um mit<br />

Auftraggebern zu kommunizieren<br />

� selbst konkrete Screen-Diagramme nicht !<br />

� allenfalls, wenn die Auftraggeber selbst <strong>Informatik</strong>er sind<br />

� zur Kommunikation mit Auftraggebern und Benutzern braucht man<br />

Prototypen<br />

�� visuell und funktional konkret, nicht erklärungsbedürftig<br />

� Diagramme helfen dem Entwickler <strong>beim</strong> Entwurf,<br />

dem Wartungsprogrammierer zum Verständnis<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 181


Manifest und Prinzipien der agilen<br />

Softwareentwicklung (kurzer Exkurs)<br />

� ...<br />

Durch die[se] Arbeit haben wir Folgendes schätzen gelernt:<br />

Individuen und Interaktionen mehr als Prozesse und Tools<br />

Funktionierende Software mehr als umfassende Dokumentation<br />

Zusammenarbeit mit Kunden mehr als Vertragsverhandlungen<br />

Reaktion auf Änderungen mehr als einen Plan zu befolgen<br />

...<br />

� We follow these principles:<br />

� Our highest priority is to satisfy the customer<br />

through early and continuous delivery of valuable software.<br />

� Welcome changing requirements, even late in development. Agile processes<br />

harness change for the customer's competitive advantage.<br />

� Deliver working software frequently, from a couple of weeks to a couple of<br />

months, with a preference to the shorter timescale.<br />

� Business people and developers must work together daily throughout the project.<br />

� http://www.agilemanifesto.org/ und<br />

http://www.agilemanifesto.org/principles.html<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 182


Einschub: Modelle eines Systems<br />

� Modelle sind vereinfachte Darstellungen<br />

einer Wirklichkeit<br />

� Paradebeispiel Atommodelle in der Chemie<br />

a) mentales Modell<br />

� Sicht des Benutzers;<br />

an der Anwendung orientiert<br />

b) augenscheinliches Modell<br />

hoffentlich identisch<br />

� wie sich das System nach außen darstellt<br />

c) Implementierungsmodell<br />

� Sicht des Entwicklers; technologisch orientiert<br />

kein kein Modell<br />

entspricht der<br />

„Realität"<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 183


Use Cases eines Buchs<br />

� der Leser? der gründliche Leser, der eilige Sucher, der Schenkende<br />

� Fachbuch = System zur Informationsspeicherung<br />

� von Anfang bis Ende lesen umblättern<br />

� Überblick bekommen Inhaltsverzeichnis<br />

� Information zu einem Thema suchen Inhaltsverzeichnis<br />

� Detailinformation / Stichwort suchen Index<br />

� Wieder Auffinden einer Stelle Lesezeichen<br />

�� weiterführende Information finden Literaturliste<br />

Literaturliste<br />

� Kaufentscheidung treffen Inhaltsverz., Klappentext, Leseprobe; Preis<br />

� vgl. Grundfunktionen eines Browsers<br />

� vgl. dagegen einen Roman<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 184


z.B. Dokument- statt Datei-Menü<br />

� das bekannte Datei-Menü ist nahe am<br />

Betriebssystem<br />

� für einige Funktionen muss man die Datei<br />

erst schließen<br />

� wie wollen Benutzer mit Dokumenten arbeiten ?<br />

� offenes Dokument umbenennen oder<br />

verschieben<br />

� Version orientiert: Meilensteine<br />

�� Änderungen vergessen statt<br />

Schließen und wieder Öffnen<br />

� ABER:<br />

das Beispiel ist problematisch, weil Benutzer<br />

Datei orientiertes Arbeiten gewohnt sind ...<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 185


Entwurf der Grobstruktur des Dialogsystems<br />

Von Use Cases zu Bildschirmmasken<br />

eine Möglichkeit<br />

� jeder Use Case wird in eine Bildschirmmaske abgebildet<br />

� Benennung des Use Case wird Titel des Screens<br />

"Screen"<br />

� ggfs. weitere untergeordnete Dialoge bei komplexen Use Cases<br />

� keine Funktionen oder Daten in einen Screen,<br />

die nicht unmittelbar zu diesem Use Case gehören !<br />

� Gruppierung der Screens nach Benutzergruppen<br />

� besser: Identifikation des Benutzers durch Anmeldung und<br />

Ausblendung der Use Cases anderer Benutzergruppen;<br />

jeder Benutzer bekommt nur Screens "seiner" Gruppe zu sehen<br />

� Hauptfenster enthält Übersicht der Use Cases<br />

� und verzweigt dorthin<br />

im primitivsten Fall eine Liste<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 186


(Rapid) Prototyping<br />

� ob ein Entwurf "funktioniert", erkennt man nicht mit Hilfe von<br />

Diagrammen<br />

� Begriff "funktionieren" unter Designern: "seinen Zweck erfüllen"<br />

� frühzeitiger Test mit Benutzern ist notwendig<br />

� erfordert weitgehend arbeitsfähigen Prototyp<br />

� Benutzertest braucht eigentlich mehr als nur die Oberfläche ...<br />

� Benutzer fragen will gekonnt sein ...<br />

�� mit geeigneten Tools ist die Erstellung einer Bedienoberfläche nicht<br />

aufwendiger als mit einem Zeichenwerkzeug<br />

� vgl. Photoshop / Director � Visual Basic / Visual C++ / Eclipse<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 187


Der erste Eindruck zählt …<br />

� (Rapid) Prototyping<br />

�� Fake (Schwindel, Betrug, Fälschung, etwas vortäuschen)<br />

� Mock Up (Fälschung, Schein, Imitation)<br />

Diese drei Begriffe beschreiben eine Idee:<br />

Um als Entwickler bereits in der frühen Phase einer<br />

Programmentwicklung mit dem Anwender Effekte an der<br />

Bedienoberfläche diskutieren zu können, entstehen unvollständige<br />

Prototypen, anhand derer das Look&Feel der<br />

Applikation und deren Wirkung auf den Anwender erörtert<br />

werden können.<br />

Verschiedene Softwareprototypen vermitteln in frühen<br />

Planungsphasen einen brauchbaren Eindruck für die gestellte<br />

Aufgabe.<br />

Kommunikationsprobleme zwischen IT-Experten und Kunden<br />

lassen sich mit Prototypen verringern.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 188


Der erste Eindruck zählt: Prototyping<br />

� Grob lassen sich Prototypen unterteilen in Demonstrations-,<br />

Analyse-, Architektur- und Designprototypen<br />

� Prototyp als Kommunikationsbasis für Entwickler und Anwender<br />

� Proof-of-Concept (POC) im Sinne einer Machbarkeitsstudie<br />

� GUI-Prototyping zielt darauf ab, den Anwender frühzeitig in den<br />

Entwicklungsprozess einzubeziehen<br />

�� Bewusst/Unbewusst entstehen Systemgrenzen bzw. Prototyp gibt<br />

Hinweise auf Strukturen<br />

ABER: Anwender ändert seine Meinung!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 189


Prototypen - vertikal<br />

� Vertikale Prototypen sollen helfen, Aussagen über die Architektur<br />

machen zu können; es ist darauf zuachten, dass der Ausschnitt der<br />

realisiert wird, nicht zu trivial ist!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 190


Prototypen - horizontal<br />

� Horizontale Prototypen decken den kompletten Satz der Funktionen<br />

in einer Anwendungsebene ab; die technische Korrektheit spielt eine<br />

untergeordnete Rolle<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 191


Direkte Manipulation (1/2)<br />

� Einfach erlernbar: intuitiv<br />

� Leichte Ausnutzung aller Möglichkeiten des Systems<br />

� Hohe subjektive Befriedigung<br />

� Keine komplizierte Kommandosprache<br />

� Reduzierung des kognitiven Overheads<br />

� Point-and-Click �� Remember-and-Type<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 192


Direkte Manipulation (2/2)<br />

Dabei ist zu beachten, dass<br />

� Aktionen umständlich werden können,<br />

� eine adäquate graphische Darstellung unter Umständen<br />

schwierig ist,<br />

� die Bedienung des Zeigegerätes für Experten zu langsam ist und<br />

sogar zur Ausbremsung des Arbeitsflusses führen kann,<br />

� sie aufwändig zu programmieren ist<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 193


Bildliche Darstellung (Icons)<br />

Dabei ist zu beachten<br />

� Bild schneller zugänglich als Text<br />

� Grafisches Zeigeinstrument anstelle Kommandoeingabe<br />

� Einfache Operationen:<br />

� Move, Size, Scroll, Open, Close, Iconify, Highlight, Drag-and-<br />

Drop, …<br />

� Direkte Manipulation: unmittelbare Wirkung und sofortige<br />

Anzeige des neuen Zustandes<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 194


Gestaltungskriterien (1/2)<br />

� Performanz:<br />

�� Speicherkapazität, Rechnerleistung, Netzleistung, Datenmenge<br />

in der Anwendung, Antwortzeiten<br />

� Wiederverwendbarkeit:<br />

� Nutzen bereits implementierter Bausteine, parametrisierte<br />

Standarddialoge, Produktivität<br />

� Konsistenz/Konformität:<br />

�� Vertrautheit, gleiches Verhalten in ähnlichen Situationen,<br />

keine sinnlosen Aktionen<br />

(z.B. kein Delete anbieten, wenn kein Objekt existiert)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 195


Gestaltungskriterien (2/2)<br />

� Realitätsnähe:<br />

� Vertraute Objekte bedeuten Komfort �� Reduktion der<br />

Komplexität<br />

� Mentale Modell:<br />

� Vorstellung des Benutzers vom System muss mit dem<br />

Systemverhalten zusammen passen<br />

� Einsatz von Metapher<br />

�� Mediengerecht:<br />

� Interaktion, Dynamik, Kombinierbarkeit,<br />

Informationsaufbereitung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 196


Gestaltungskriterien<br />

Performanz<br />

Mentales Mentales<br />

Modell<br />

Medien<br />

gerecht<br />

Wieder- Wiederverwendbarkeit<br />

Realitätsnähe<br />

Konsistenz<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 197


Layoutüberlegungen 1/2<br />

� Layoutentscheidungen müssen nachvollziehbar und begründet sein;<br />

Entscheidungen nicht aus dem Bauch heraus treffen!<br />

� Geeignete Ansatzpunkte bieten die Anforderungen durch die<br />

Aufgabenstellungen und die Benutzerprofile<br />

� Beachten Sie kulturelle Eigenarten:<br />

Bedeutung von Farben, Informationswahrnehmung<br />

� Achten Sie auf kognitive Fähigkeiten:<br />

Was bzw. wie viel kann man sich merken?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 198


Layoutüberlegungen 2/2<br />

� Hilfreich kann sein, bekannte Begrifflichkeiten und Metapher aus der<br />

Anwendungsdomäne gezielt einzusetzen<br />

� Akten durchlaufen einen bestimmten Prozess,<br />

� es gibt eine Ablage, das Vier-Augen-Prinzip ist bekannt, …<br />

dadurch wird die Akzeptanz, das Vertrauen und das intuitive<br />

Verständnis und die Bereitschaft, das System zu erlernen erhöht und<br />

gefördert.<br />

�� Ein vertrautes Mentales Modell hilft dem Nutzer, sich zurecht zu<br />

finden.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 199


Benutzerprofile - Ticketbeispiel<br />

� Kunde (Client):<br />

�� meldet/erfasst neues Ticket;<br />

� erhält Rückmeldung/Feedback<br />

(aus System und per Email nach erfolgreicher Bearbeitung)<br />

� Abteilungsleiter (Dispatcher)<br />

� verteilt/ordnet Ticket Sachbearbeiter zu und<br />

� überprüft/sichert Qualität/testet/erteilt Freigabe<br />

� Sachbearbeiter (Consultant)<br />

� bearbeitet (d.h. fügt Kommentar ein, ordnet Fehlerkategorie neu zu) und<br />

testet<br />

� Weitere Profile (Administrator, Hotline-Mitarbeiter oder 1st-,2nd und 3rd-Level-<br />

Supportmitarbeiter) lassen sich aus der Beschreibung nicht entnehmen<br />

� Es lassen sich auch keine Kontakte zwischen Kunden und Mitarbeiter oder<br />

Prioritäten erkennen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 200


Design/Layout: Use Case(s) beachten<br />

� Wie sind die Arbeitsabläufe? Sind alle Schritte/Aktionen klar ersichtlich?<br />

�� Was passiert vorher? Was passiert nachher?<br />

� Welche Benutzergruppe(n) nutzt/nutzen den Screen?<br />

� Welche Aufgaben sollen bearbeitet werden? Gibt es einen Standardablauf<br />

� Was geschieht bei dynamischen Veränderungen?<br />

� Die Größe des Screens wird verändert<br />

� Die Anzahl der Componenten verändert sich<br />

� Welches Feedback bekommt der Benutzer?<br />

� Wird der Benutzer geführt?<br />

� Gibt es Orientierungshilfe? Welche Schritte stehen noch an?<br />

� Können Entscheidungen/Interaktionen rückgängig gemacht werden?<br />

� Kann der Benutzer Fehler machen bzw. werden diese verhindert?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 201


Screens - Ticketbeispiel<br />

Screen „Anmeldung“ (login) als Kunde, Abteilungsleiter oder Sachbearbeiter:<br />

als Kunde/Client:<br />

1 Erfassung und Bearbeitungsfortgang<br />

• Ticket neu erfassen<br />

• (Bearbeitungszustand eigener Tickets betrachten/inspizieren)<br />

als Abteilungsleiter/Dispatcher:<br />

2 Monitoren (insgesamt) – Sachbearbeitern zuordnen<br />

• Bearbeitungszustand aller Tickets betrachten<br />

• (alle) neu erfassten Tickets anhand Beschreibung sichten und Mitarbeiter zu<br />

ordnen<br />

• Qualitätskontrolle und abschließende Freigabe<br />

als Sachbearbeiter/Consultant:<br />

3 Bearbeiten/Kommentieren und testen<br />

• zu gewiesene Tickets untersuchen/bearbeiten (Angabe d. Fehlerursache)<br />

Ticket mit Kommentar versehen<br />

• testen (Angabe des Testprotokolls) und damit Zustand ändern<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 202


Layout: Analyse � Design � Konstruktion<br />

� Analyse<br />

� Die fachlichen Anforderungen führen zu einem ersten groben<br />

Ablauf<br />

� abstrakte Screens<br />

� Use Cases geben eine Hinweis auf sinnvolle Begriffe/Bezeichner<br />

und Ablauffolgen/Workflows<br />

� Das Überlagern eines Screens mit Rasterlinien ist<br />

aufschlussreich und liefert wertvolle Hinweise zur Struktur und<br />

dem Aufbau des Screens<br />

� Die verschiedenen Bestandteile (Componenten, Container und<br />

LayoutManager) werden grafisch identifiziert<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 203


Layout: Analyse � Design � Konstruktion<br />

� Gestaltung<br />

�� Konkrete Auswahl der Container:<br />

Scrollen? Splitten? Was passiert <strong>beim</strong> Vergrößern/Verkleinern des Screens?<br />

� Auswahl und Festlegung des Farbklimas (� Style Guides entstehen)<br />

� Schrift-, Fenster- und Icongröße beeinflussen die Gesamtgröße<br />

� Was soll passieren, wenn sich die Componenten in Anzahl und Typ ändern?<br />

� Das User Interface führt den Nutzer … durch Zustandsanzeige, durch<br />

Feedback, durch Konsistenz, … durch Fokussteuerung, …<br />

� Das User Interface entlastet den Nutzer … durch Voreinstellung, durch<br />

Vorsorge zur Fehlervermeidung …<br />

� Das User Interface ist selbsterklärend … durch Tooltips, Statusbar, …<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 204


Layout: Analyse � Design � Konstruktion<br />

� Konstruktion<br />

� Konkretes Programmieren und Zusammenfügen von<br />

• Componenten (Dialogbausteine),<br />

• Container (hier: diverse Panel) und<br />

• LayoutManager<br />

� Anbindung an die Objekte in der Anwendung<br />

� MVC Architektur mit interface und/oder Adapterklassen<br />

�� Kodierung in Java/Swing<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 205


Navigationsübersicht: Screens und Abläufe<br />

Abteilungsleiter verteilt/ordnet zu, hat<br />

Termine und Auslastung im Auge (macht<br />

Qualitätssicherung)<br />

Anmeldung/ Login als<br />

Kunde, Mitarbeiter oder<br />

Abteilungsleiter<br />

Kunde macht<br />

Ersterfassung<br />

• Prozess vollständig<br />

und am Arbeitsablauf<br />

orientiert?<br />

Mitarbeiter • Screens voll-<br />

bearbeitet und testet ständig und nicht<br />

überfrachtet<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor (d.h. Studiengang<br />

aufgaben-<br />

Prof. Dr.-Ing. Hans-Peter angemessen)?<br />

Wiedling<br />

Seite 206


Navigationsübersicht<br />

Übersicht<br />

mit<br />

Workflow<br />

zurück<br />

Notation und Vereinfachungen:<br />

– Zustände als<br />

Skizzen/Screenshots<br />

– Übergänge i.a. mit Linksklick<br />

– R mit Rechtsklick<br />

– Rücksprung / Schließen<br />

Use<br />

Cases<br />

UML passt nur bedingt für GUI;<br />

Zustandsdiagramm weiterentwickelt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 207


Notation der Navigationsübersicht<br />

Anwendung<br />

• starten<br />

• beenden<br />

Aktionen<br />

• neues Hauptfenster<br />

• neuer Dialog/PopUp<br />

• Rücksprung<br />

Ereignisse<br />

• keine Angabe: linker Mausklick<br />

• rechter Mausklick R<br />

Zustände<br />

• Elementliste (abstrakter Screen) oder<br />

• Layout-Skizze (konkreter Screen) oder<br />

• Screenshot (konkret, Dokumentation)<br />

Bedingungen<br />

• mit Shift/Umschalttaste S<br />

• mit Ctrl/Strg-Taste C<br />

• mit Alt-Taste A<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 208


High Level: Workflow<br />

� ein Arbeitsablauf (Workflow) verkettet mehrere<br />

Anwendungsfälle verschiedener Benutzer (Mitarbeiter)<br />

� Beispiel:<br />

Bestellung verbuchen � Lieferung zusammenstellen<br />

� Lieferschein schreiben � Rechnung schreiben<br />

� Zahlungseingang verbuchen<br />

� Metapher: der Weg einer Akte durch eine Verwaltung<br />

� typischerweise wird der nächste Mitarbeiter vom System<br />

durch eine Botschaft informiert, wenn der vorige seine<br />

Teilaufgabe erledigt hat<br />

� kann mit Flussdiagramm / Programmablaufplan dargestellt werden<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 209


Low Level: Szenarien<br />

� Szenario: Ablauf hinter einem Anwendungsfall / Screen<br />

� Verfeinerung des Anwendungsfalls<br />

� verbale Beschreibung aus Sicht des Benutzers<br />

� jetzt unter Berücksichtigung wichtiger systeminterner Objekte<br />

� systeminterne Objekte sollten dem mentalen Modell des<br />

Benutzers entsprechen<br />

� formale Beschreibung mittels Sequenzdiagramm<br />

� Präzisierung der verbalen Beschreibung<br />

� Benutzerereignisse rufen Methoden der Fensterklasse auf<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 210


Fokussteuerung definieren<br />

2<br />

4<br />

6<br />

8<br />

� vollständiger Weg mit >>Tab


Focus unter Java verändern<br />

� Bezieht sich auf Instanzen der Klasse Component<br />

� Reihenfolge wird zunächst implizit durch das Erzeugen festgelegt<br />

� mit >>Tab>Shift>Tab


Layout/Fenstergestaltung<br />

• Anordnung<br />

• Gruppierung<br />

• Hervorheben<br />

• Größen/Sehwinkel<br />

• Ästhetik<br />

• Farbe<br />

• Physiologische Aspekte<br />

• Psychologische Aspekte<br />

• Schrift/Beschriftung/Text<br />

• Ausrichtung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 213


Gedanken zur Fenstergestaltung<br />

� Proportionen, Balance, (Symmetrie), Einfachheit<br />

�� nicht die ganze Fläche mit Komponenten pflastern;<br />

Freiflächen sind wichtige Gestaltungsmittel !<br />

� Führung der Augen von links oben nach rechts unten<br />

� Mehrspaltigkeit erleichtert das Lesen (vgl. Zeitung)<br />

� Fenster eher breit als hoch (analog zum Bildschirm und Sichtfeld)<br />

� Kanten der Komponenten bilden Fluchtlinien<br />

� Anzahl der Fluchtlinien minimieren, ohne jedoch Komponenten sinnlos<br />

zu vergrößern<br />

� einheitliche Schriftart, abgestimmte Farben (Farbklima)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 214


Prioritäten für Gruppierung<br />

� inhaltliche Gemeinsamkeiten (Funktionsgruppen)<br />

� aufgabenbezogene Folge von Arbeitsschritten<br />

� Benutzungshäufigkeit<br />

� aber nicht dynamisch verändern !<br />

�� alphabetische Anordnung, Nummerierung etc.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 215


Hinweise zur Gruppierung<br />

� Elemente im oberen Bereich einer Gruppe werden schneller<br />

entdeckt als im unteren<br />

� Komponenten in Gruppe besser spalten- als zeilenweise anordnen<br />

� Gruppenrahmen mit Überschriften erhöhen die Übersichtlichkeit<br />

� besser Freiflächen als Gruppenrahmen ohne Überschrift<br />

� 4-5 Gruppen, 4-5 Komponenten pro Gruppe<br />

� Gruppen sollten als solche erkennbar sein und sich von<br />

Nachbargruppen abgrenzen<br />

� Gruppen so ausrichten, dass nur wenige Fluchtlinien entstehen<br />

� Eigene Gestaltungsregeln in allen Gruppen konsistent anwenden<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 216


Natürliche Anordnung<br />

bottom<br />

left<br />

right<br />

top<br />

Border<br />

Border<br />

natural mapping<br />

das Herdplattenproblem<br />

Cursortasten<br />

� Wichtig: (Um-)Denken vermeiden! � Haben Sie eine Idee?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 217


Hervorheben von Komponenten<br />

� Hervorhebungen trennen Informationen, gewichten, erleichtern<br />

Suchen und Finden, lenken Aufmerksamkeit<br />

� Größe der hervorzuhebenden Komponente<br />

� abweichende Orientierung oder Form<br />

� Isolierung, Einzelstellung, Umrandung<br />

� Farben (wenige !), Hell-Dunkel-Kontrast, Inversdarstellung<br />

� fetter Schriftfont oder Großbuchstaben<br />

�� Blinken (aber sparsam und nur an einer Stelle)<br />

� nicht mehr als 10-20% aller Informationen hervorheben<br />

� gewählte Darstellungsart der Hervorhebung durchgängig benutzen<br />

beliebter<br />

Fehler, dies<br />

nicht zu tun<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 218


Minimal- und Maximalgrößen<br />

� physiologische Gegebenheiten des durchschnittlichen menschlichen<br />

Auges berücksichtigen<br />

� empirisch ermittelt und in Normen festgehalten<br />

� der Entwickler darf nicht das eigene Auge als Maßstab nehmen !<br />

� begrenzte Sehschärfe erfordert Mindestgröße<br />

� für ermüdungsfreies Lesen<br />

�� Schriftgröße mindestens 0.3 Grad Sehwinkel, besser 0.5 Grad<br />

� schnelle Fixation empfiehlt Maximalgröße<br />

� für schnelles Erfassen "auf einen Blick"<br />

� Komponentengruppe maximal 5 Grad Sehwinkel<br />

unabhängig<br />

von Systemkonfiguration<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 219


eine Bemerkung zum Sehwinkel<br />

Abstand<br />

1pt = 1/72 inch<br />

1 inch = 2,54 cm<br />

Höhe<br />

Beispiel: 8pt = 0,282cm<br />

Abstand: a = 50cm<br />

Sehwinkel: α = 0,3°<br />

cos α = 50 / Hypotenuse<br />

sin α = Höhe / Hypotenuse<br />

� Höhe = 50 * sin .3/cos .3<br />

Höhe = 0,262 cm<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

H<br />

Seite 220


Abbildungsmaßstab<br />

� Angabe von Schriftgrößen<br />

traditionell in "Punkt"<br />

� 1 pt = 1/72 Zoll; 1 Zoll = 1 inch = 2,54 cm<br />

� korrekt auf Papier, problematisch am Bildschirm<br />

� Abbildungsmaßstab systemabhängig<br />

� MacIntosh 72 dpi, Unix GUIs (Motif, KDE, ...) ?,<br />

Windows 96 dpi (kleine) / 120 dpi (große Schriften)<br />

� plattformübergreifend: Director und Java 72 dpi<br />

�� gemischte Bemaßung ist problematisch<br />

� HTML: Schriften in pt, sonstige Maße in Pixel<br />

� Windows: Schriften und Controls in pt,<br />

Fenster in Pixel<br />

unterschiedliche<br />

Monitorgröße u.<br />

Grafikauflösung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 221


Ästhetik<br />

� Ästhetik ist nicht einfach Geschmackssache<br />

� unterliegt jedoch zeitbedingten Sehgewohnheiten<br />

� wichtiger Aspekt moderner Produkte<br />

kein ergonomisches Thema mehr<br />

� um so bedeutender, je ausgereifter und vergleichbarer<br />

die Grundfunktion konkurrierender Produkte ist<br />

� wird von Ingenieuren gerne wegdiskutiert<br />

bzw. nicht richtig eingeschätzt<br />

�� regelmäßiges Face Lifting <strong>beim</strong> SW-Upgrade<br />

� z.B. Windows und MS Office<br />

� suggeriert Wertigkeit und Modernität<br />

� läuft Kontinuität und Konsistenz zuwider<br />

vergleiche<br />

Autos,<br />

U-Elektronik,<br />

Parfume,<br />

Geschirr,<br />

...<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 222


Farbe - Was ist Farbe ?<br />

� Physikalische Sicht<br />

�� Spektralfarben = "Regenbogenfarben"<br />

• eine Frequenz; Wellenlänge in nm<br />

� Rest: Überlagerung mehrerer Freq.<br />

� Physiologische Sicht<br />

520<br />

nicht<br />

darstellbare<br />

Farben<br />

500<br />

480<br />

Wellenlänge<br />

550 nm<br />

� dieselbe Farbempfindung kann durch 380<br />

verschiedene Mischungen von mind. 3 Farben erzeugt werden<br />

� Darstellung in der Farbtafel<br />

� Spektralfarben auf Bogen, Rot-Blau-Mischung auf Purpurgerade<br />

� Ordnungsprinzip: Mischfarben liegen auf Verbindungsgeraden<br />

� Dreieck umschließt mögliche Mischfarben aus 3 Primärvalenzen<br />

� berücksichtigt nicht die Luminanz (Helligkeit, Farbintensität)<br />

780<br />

"unbunt"<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 223


Farbmodell RGB<br />

� Mischung von farbigem Licht<br />

� Grundfarben Rot, Grün, Blau<br />

� additive Farbmischung<br />

� Projektion der Primärvalenzen auf dieselbe Fläche<br />

� Einsatzgebiete<br />

� Wiedergabe über Monitor<br />

• Primärvalenzen durch Leuchtstoffe bestimmt<br />

�� Aufnahme mit Scanner oder Kamera<br />

• Primärvalenzen durch Farbteiler/Farbfilter bestimmt<br />

� 3D-Farbraum mit kartesischen Koordinaten<br />

� Mischung entspricht vektorieller Addition<br />

Grün<br />

Blau<br />

Rot<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 224


Farbmodell CMYK<br />

� Mischung von Farbstoffen (Farbfiltern)<br />

�� Grundfarben Cyan, Magenta, Yellow, blacK<br />

� subtraktive Farbmischung<br />

� Beleuchtung mit weißem Licht<br />

• Cyan schluckt R transparent für B und G<br />

• Magenta schluckt G transparent für R und B<br />

• Yellow schluckt B transparent für R und G<br />

� Mischung von CMY ergibt (fast) Schwarz<br />

• Schwarz als 4. Grundfarbe wegen Unsauberkeit<br />

� Einsatzgebiet: Wiedergabe über Drucker<br />

Cyan<br />

� typische Probleme: geringere Farbsättigung als Bildschirm;<br />

schlechtere Dosierbarkeit = weniger Farbabstufungen;<br />

starke Abhängigkeit von Papierqualität<br />

weißes<br />

Licht<br />

Yellow<br />

Magenta<br />

Papier<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 225


Farbmodell HLS<br />

� anwendungsorientiert,<br />

zielgerichtet<br />

manipulierbar<br />

� Farbart Hue<br />

� Helligkeit Luminance<br />

� Sättigung Saturation<br />

H<br />

S L S<br />

L<br />

H<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

0.75<br />

0.5<br />

0.25<br />

Seite 226


<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 227


Orange wirkt unterschiedlich hell/dunkel bzw. mehr/weniger gesättigt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 228


Physiologische Aspekte –<br />

Informationsverarbeitung durch das menschl.<br />

Auge<br />

� höhere Auflösung für Helligkeit als für Farbe<br />

� Kanten u. Formen werden besser anhand der Helligkeit erkannt<br />

(wird bei Videokompression ausgenutzt)<br />

� unterschiedliche Auflösung für verschiedene Farben<br />

� besonders schlecht: Blau<br />

� farbabhängige Helligkeitsempfindung<br />

�� grün wirkt heller, blau dunkler<br />

� kleine Flächen wirken stärker gesättigt als große<br />

� Farb- und Helligkeitsempfinden wird auch von der Umgebung<br />

beeinflusst, nicht nur vom Monitor!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 229


Psychologische Aspekte<br />

� im allgemeinen kulturspezifisch; bei uns:<br />

� weiß neutral<br />

� rot Anhalten, Gefahr, Fehler, Alarm, Hitze<br />

� orange Warnung, Achtung, Aufmerksamkeit<br />

� grün Losfahren, OK, Verfügbarkeit, Wachstum<br />

� blau Kälte, Ferne, Hintergrund<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 230


Farbkombinationen<br />

� Vordergrund- und Textfarben<br />

� Weiß, Schwarz, mittel- bis langwellige Farben (Rot, Gelb, Grün)<br />

� kein Blau<br />

� Hintergrundfarben<br />

� hell (Positivdarstellung), schwach gesättigt (Pastelltöne)<br />

� kurzwellige (Blau, Cyan) und unbunte Farben (helles Grau)<br />

� kein gesättigtes Rot oder Braun<br />

�� kritische Farbkombinationen<br />

� vermeiden: Rot/Grün, Gelb/Blau, Rot/Blau<br />

� Gelb/Weiß wird leicht verwechselt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 231


Heller oder dunkler Hintergrund ?<br />

� Dunkel auf Hell ? freundlich<br />

� Papiermetapher<br />

� Monitor-Flimmern unangenehm bei großen hellen Flächen<br />

� Hell auf Dunkel ? finster<br />

� Farben leuchten intensiver auf dunklem Untergrund<br />

� dunkler Hintergrund zur Hervorhebung von Bildern<br />

� weiß überstrahlt leicht, weil Iris weit geöffnet ist<br />

�� mittlere Hintergrundhelligkeit<br />

� angenehm für das Auge: entspricht der Umgebungshelligkeit<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 232


Farbschema / Farbklima<br />

� ±5 verschiedene Farben<br />

+ schwarz + weiß<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 233


Im Zweifelsfall<br />

� eher weniger Farbe als mehr<br />

� eher weniger Farbsättigung als mehr<br />

� Codierung und Unterscheidung eher<br />

mittels Layout und Form als mittels Farbe<br />

�� Farben visuell überprüfen, nicht "berechnen"<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 234


Farbcodierung<br />

� Farbe dient als "Skala" eines physikalischen Wertes<br />

� vgl. Landkarte, Wetterkarte<br />

� suggestive Zuordnung von Farbcode zu Bedeutung<br />

� unterschiedliche Farbarten wirken "ungeordnet"<br />

� besser: Abstufungen nur in Helligkeit und/oder Sättigung, nicht in<br />

Farbart (Hue)<br />

� Hervorhebung durch Intensivierung:<br />

"aktiv", "selektiert" � höhere Helligkeit oder Sättigung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 235


Schriftarten<br />

� mit Serifen Times<br />

� "Führungslinien" für das Auge<br />

� erfordern hohe Druck-Auflösung; am<br />

Bildschirm nur unvollkommen / unschön darstellbar<br />

� serifenlos Helvetica, Arial<br />

� schlechter lesbar; bei geringer Auflösung jedoch zu bevorzugen<br />

� Bildschirmschrift MS Sans Serif, Fixedsys<br />

�� serifenlos, auf Pixelraster optimiert<br />

(vorteilhaft für kleine Schrift)<br />

� nur in ausgewählten Größen verfügbar<br />

� Druckerschrift<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 236


Gut lesbare Bildschirm-Schrift<br />

� serifenlos für Bildschirm (Serifen nur für Druck)<br />

� Proportionalschrift, Groß-/Kleinschreibung<br />

Problem: niedrige Auflösung<br />

� nicht unterstrichen, nicht blinkend, keinesfalls kursiv<br />

� horizontal ausgerichtet, linksbündig, kein Blocksatz<br />

� begrenzte Spaltenbreite (vgl. Zeitungsspalten)<br />

�� Schrifthöhe mindestens 0.3° Sehwinkel<br />

� besser 0.5°: ca. 8 pt bei 17", 800x600, 50 cm Abstand<br />

� deutlicher Kontrast zum Hintergrund<br />

� Text- und Hintergrundfarbe beachten<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 237


Beschriftung mittels Label<br />

� Label deutlich dem Steuerelement zuordnen<br />

� minimaler Abstand = 1 Zeichenbreite<br />

� aber kein Doppelpunkt zwischen Label und Steuerelement<br />

� Label-Text kurz, aussagekräftig, eindeutig, präzise, allgemein<br />

bekannt, informativ, aber keine Abkürzung<br />

� vorzugsweise nur ein Wort<br />

� Label-Text nicht breiter als 5° Sehwinkel (= 1 Fixation)<br />

� ca. 100 Pixel bei 17", 800x600, 50 cm Abstand<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 238


Ausrichtung von Beschriftungen<br />

� einzeilige Steuerelemente:<br />

Label links; horizontal zentriert<br />

� mehrzeilige Steuerelemente:<br />

Label links oberhalb<br />

einzeilig<br />

mehrzeilig<br />

� mehrere verschieden lange Labels:<br />

etwa gleich: linksbündig sehr unterschiedlich: rechtsbündig<br />

minimal<br />

mittel<br />

maximal<br />

Tabulator<br />

Makro<br />

Einblendezeit<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 239


Eingabe von Text<br />

� Kommandos<br />

� Auswahl aus Textliste<br />

� Freitexteingabe<br />

� generell: mit Enter abschließen<br />

� Kurzformen für Kommandos und Auswahlworte anbieten<br />

� Auto-Vervollständigen in Combo-Boxen<br />

�� mnemonisch günstiger als Tastaturkürzel optimal !<br />

� beliebige Groß-/Kleinschreibung zulassen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 240


Gestalten eines Eingabefensters<br />

Was ist hier<br />

schlecht ?<br />

Verbessern Sie den<br />

Entwurf !<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 241


Umsetzung der gestalterischen Anforderungen mit<br />

Java/Swing<br />

� Container<br />

� Dynamisches vs. Statisches Layout<br />

• Layout Manager<br />

� Dialogbausteine (Controls, Componenten)<br />

� (non-)modale Dialoge<br />

� Entwurfsmuster (MVC, ...)<br />

� Ereignisbehandlung/Eventhandling<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 242


Top Level Container<br />

� JFrame, JDialog, JApplet, JWindow<br />

� haben eine contentPane,<br />

die andere Panels oder<br />

Komponenten trägt<br />

� sind Wurzel eines<br />

Objektbaums<br />

�� können eine Menüleiste (JMenuBar) haben<br />

� wir arbeiten i.a. nur mit der contentPane und nutzen weitere<br />

Panels/Panes zur räumlichen Gliederung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 243


Fenster, Container, Dialoge: JFrame … (1/2)<br />

� eigene Hauptfenster-Klasse deklarieren<br />

� public class MainWindow extends JFrame {...}<br />

� Fensterobjekt erzeugen<br />

� MainWindow myFrame = <strong>new</strong> MainWindow();<br />

� Layout (im Konstruktor) neu berechnen<br />

� ohne Layout-Manager:<br />

myFrame.setSize(<strong>new</strong> Dimension (…));<br />

myFrame.validate();<br />

� mit Layout-Manager:<br />

myFrame.pack();<br />

� Fenster sichtbar machen<br />

myFrame.setVisible(true);<br />

Hauptfenster<br />

von Applikationen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 244


Fenster, Container, Dialoge: JFrame … (2/2)<br />

� Fenstertitel und –icon (z.B. im Konstruktor ) einsetzen:<br />

�� this.setTitle("Fenstername");<br />

� Image desktopIcon =<br />

Toolkit.getDefaultToolkit().getImage("C:\\..\\aIcon.gif");<br />

this.setIconImage(desktopIcon);<br />

� Fenster im Desktop zentrieren:<br />

� frame.setLocationRelativeTo(null); oder<br />

� Dimension screenSize =<br />

Toolkit.getDefaultToolkit().getScreenSize();<br />

Dimension frameSize = myFrame.getSize();<br />

if (frameSize.height > screenSize.height)<br />

{ frameSize.height = screenSize.height; }<br />

if (frameSize.width > screenSize.width)<br />

{ frameSize.width = screenSize.width; }<br />

frame.setLocation((screenSize.width - frameSize.width) / 2,<br />

(screenSize.height - frameSize.height) / 2);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 245


Modale und non-modale Dialoge<br />

� Ein Dialog ist modal, wenn er die ganze Aufmerksamkeit des<br />

Benutzer auf sich zieht. Die geschieht dadurch, dass die<br />

Interaktionen mit den anderen Teilen verhindert/blockiert werden.<br />

Die anderen Interaktionen werden erst wieder erlaubt wenn, der<br />

modale Dialog vollständig bearbeitet und abgeschlossen ist.<br />

� Ein non-modaler Dialog fügt sich in den Gesamtdialog ein und kann<br />

gleichberechtigt wie jeder andere benutzt werden.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 246


Dialoge<br />

� ein Dialog ist ein separates Fenster, das über dem Hauptfenster<br />

(oder einem anderen Dialog) schwebt/liegt<br />

� wird oft zur Ein-/Ausgabe von Parametergruppen verwendet<br />

� frei positionierbar, nicht bildschirmfüllend<br />

� wird von seinem Hauptfenster minimiert<br />

� modale Dialoge blockieren das Hauptfenster, solange sie aktiv sind<br />

� Moduslose/non-modale Dialoge erlauben die Aktivierung des<br />

Hauptfensters<br />

� Beispiel: Editieren während "Suchdialog" in Textverarbeitung<br />

� MessageBox ist einfache Form eines modalen Dialogs<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 247


JDialog<br />

� für beide Arten: modal und non-modal<br />

�� JDialog (Frame owner, boolean modal)<br />

� Als owner sowohl JDialog als auch JFrame möglich<br />

� show() macht den Dialog sichtbar<br />

� blockiert in modalen Dialogen<br />

� terminiert sofort in moduslosen Dialogen<br />

(� Wie greifen Sie auf Werte zu?!)<br />

� validate() oder pack() notwendig um Layout neu zu<br />

berechnen<br />

� hide()/dispose() macht den Dialog unsichtbar<br />

� hebt die Blockierung von show() in modalen Dialogen auf<br />

� zerstört nicht das Dialogobjekt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 248


JOptionPane: Standard-Dialoge<br />

� gängige modale Einfach-Dialoge<br />

� Aufruf durch verschiedene static Methoden von JOptionPane:<br />

showMessageDialog, showInputDialog, showConfirmDialog<br />

� diverse Icons zur Anreicherung per Konstante wählbar<br />

� Button-Kombinationen sind ebenfalls per Konstante wählbar<br />

� Auswahl des Benutzers wird Ergebnis der Methodenaufrufe<br />

� vergleichbar mit MessageBox unter Windows<br />

�� Bemerkung: etwas vergleichbares fehlt in AWT<br />

� weitestgehende Konfigurationsmöglichkeit<br />

mit Hilfe von showOptionDialog<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 249


Spezielle Dialoge<br />

� JFileChooser<br />

� zur Auswahl einer Datei (vollständiger Pfad)<br />

� Varianten "Öffnen" und "Speichern unter"<br />

� gewählter Pfad als Ergebnis von getSelectedFile()<br />

� OK oder Cancel als Ergebnis von showOpenDialog(...)<br />

� JColorChooser<br />

�� zur Auswahl einer Farbe<br />

� static Methode showDialog (parent, title, color) liefert als<br />

Ergebnis ein Color-Objekt<br />

� Color-Objekt ist null bei Cancel<br />

leider uneinheitlich!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 250


Räumliche Gliederung<br />

� Komponenten werden gruppiert und plaziert<br />

durch Zuordnung zu Panels und Panes<br />

� Panes haben spezifische Sonderfunktionen<br />

� komplexe Layouts sind möglich durch<br />

Schachtelung von Panels und Panes (� Objektbaum)<br />

� jedes Panel/Pane kann einen anderen Layout-Manager haben<br />

� keine spezielle Ereignisbehandlung nötig<br />

Panel<br />

Tafel, Platte,<br />

(vertieftes) Feld<br />

Pane<br />

(Fenster)Scheibe<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 251


Ein Beispiel zum<br />

Objektbaum<br />

...<br />

JPanel p1 = <strong>new</strong> JPanel ();<br />

JPanel p2 = <strong>new</strong> JPanel (<strong>new</strong> BorderLayout() );<br />

JButton b1 = <strong>new</strong> JButton ("Flip");<br />

JButton b2 = <strong>new</strong> JButton ("Flop");<br />

JButton b3 = <strong>new</strong> JButton ("Toggle");<br />

p1.setBackground(Color.cyan);<br />

p2.setBackground(Color.blue);<br />

p2.add (b1, BorderLayout.NORTH);<br />

p2.add (b2, BorderLayout.SOUTH);<br />

p1.add (p2);<br />

...<br />

p2.add (b3);<br />

contentPane.add (p1);<br />

...<br />

JButton<br />

JPanel<br />

JFrame<br />

JPanel<br />

JPanel<br />

JButton JButton<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 252


JPanel: einfache Fläche<br />

// ein Panel ist ein Container:<br />

JPanel p = getJContentPane();<br />

JButton jb;<br />

for (int i = 0; i < p.getComponentCount(); i++)<br />

{<br />

if ( p.getComponent(i) instanceof JButton )<br />

{<br />

jb = (JButton)p.getComponent(i);<br />

� Fläche, die andere Komponenten trägt<br />

// jb manipulieren<br />

�� bekanntes Beispiel: contentPane<br />

}// if<br />

� JPanel meinPanel =<br />

}// for<br />

<strong>new</strong> JPanel();<br />

...<br />

� Layout-Manager zuordnen oder weglassen<br />

� default ist FlowLayout<br />

� meinPanel.setLayout(<strong>new</strong> BorderLayout());// oder null<br />

� Komponenten zuordnen<br />

��<br />

meinPanel.add(aComponent);<br />

� Umrandung (Border) definieren<br />

� auch Freiflächen und Abstände sind als EmptyBorder realisierbar<br />

� Erstellung durch Eclipse komfortabel unterstützt �<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 253


Rand und Abstand mit Border<br />

� Diverse Klassen abgeleitet von AbstractBorder<br />

Interface<br />

� LineBorder, EtchedBorder, BevelBorder, EmptyBorder,<br />

MatteBorder, TitledBorder, CompoundBorder<br />

� Implementierung als<br />

� benanntes Objekt<br />

• EtchedBorder meinBorder = <strong>new</strong> EtchedBorder();<br />

meinPanel.setBorder(meinBorder);<br />

� anonymes Objekt<br />

• meinPanel.setBorder(<strong>new</strong> EtchedBorder());<br />

� gemeinsam verwendetes anonymes Objekt<br />

• meinPanel.setBorder(BorderFactory.createEtchedBorder());<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 254


1-aus-n Auswahl<br />

Anzeige und Interaktion mit dem Ticketzustand<br />

�� in einem modalen Dialog<br />

� Ergebnis wird vom Fensterobjekt (JDialog) erfragt<br />

� Entscheidung für eine Darstellungsart<br />

� ComboBox, Menue, RadioButtonGroup, … oder ganz anders (wie)!?<br />

� Entscheidungsgrundlage<br />

� Gewohnheit der Nutzer (vertraut mit best. Controls), Einbettung in<br />

Gesamtablauf, Anzahl Klicks, ...<br />

�Anzeige aller Alternativen, freie Auswahl, kein Platzproblem, ein Klick<br />

�Control Control mit Anwendungsobjekt(en) verbinden,<br />

� gegenseitigen Ausschluss sicherstellen<br />

� Interaktion mit entsprechenden Events realisieren<br />

� Wertänderungen könnten auch direkt am Objekt ausgeführt werden � wie?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 255


JRadioButton, ButtonGroup (1/3)<br />

JPanel radioButtonPanel;<br />

radioButtonPanel = <strong>new</strong> JPanel();<br />

radioButtonPanel.setBackground(<strong>new</strong> Color(250, 250, 0));<br />

Border border = <strong>new</strong> TitledBorder ("TicketStates");<br />

radioButtonPanel.setBorder(border);<br />

radioButtonPanel.setLayout(<strong>new</strong> GridLayout(0, 1));<br />

JRadioButton rb;<br />

int actionCommand = 0;<br />

…<br />

Separates Panel mit<br />

• Hintergrundfarbe,<br />

• Rahmen und<br />

• GridLayout<br />

erstellen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 256


JRadioButton, ButtonGroup (2/3)<br />

int actionCommend = 0;<br />

for (TicketState t : TicketState.values()) {<br />

rb = <strong>new</strong> JRadioButton(t.name());<br />

rb.addActionListener(this);<br />

rb.setActionCommand(Integer.toString(actionCommand));<br />

actionCommand++;<br />

rb.setOpaque(false);<br />

group.add(rb);<br />

if (t.equals(TicketState.neu_erfasst))<br />

rb.setSelected(true);<br />

radioButtonPanel.add(rb);<br />

}<br />

return radioButtonPanel;<br />

•Listener registrieren<br />

•Index mitgeben<br />

•Damit die Farbe des<br />

Panels sichtbar wird<br />

•In die Gruppe einfügen<br />

•Default setzen<br />

•Im Layout einfügen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 257


JRadioButton, ButtonGroup (3/3)<br />

...<br />

private TicketState selectedTicketState // Objektattribut<br />

...<br />

public void actionPerformed(ActionEvent arg0) {<br />

// so möglichst variabel<br />

String actionCommand = arg0.getActionCommand();<br />

selectedTicketState =<br />

TicketState.values()[Integer.valueOf(actionCommand)];<br />

}<br />

Eventhandling: letzte<br />

Zustandsänderung wird festgehalten<br />

bzw. könnte auch direkt im<br />

Ticketobjekt verändert werden<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 258


JScrollPane: verschiebbare Sicht<br />

� verschiebbare Sicht auf eine (größere) Komponente<br />

� JScrollPane zwischen Panel und Komponente schalten<br />

� textArea = <strong>new</strong> JTextArea(5, 30);<br />

JScrollPane scrollPane = <strong>new</strong> JScrollPane(textArea);<br />

contentPane.add(scrollPane);<br />

� JList, JTextComponent, JTree, JTable sind dafür vorbereitet<br />

� implementieren Interface Scrollable; damit wird die "Skalierung"<br />

der ScrollBars definiert:<br />

getScrollableBlockIncrement,<br />

getScrollableUnitIncrement,<br />

getPreferredScrollableViewportSize, ...<br />

� andere Klassen können dieses ebenfalls implementieren<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 259


JSplitPane: zweigeteilt<br />

� zwei Panes durch verschiebbare Trennlinie geteilt<br />

� Erzeugen<br />

� JSplitPane splitPane = <strong>new</strong> JSplitPane(<br />

JSplitPane.HORIZONTAL_SPLIT, pane1, pane2);<br />

� Verschiebung durch Mausklick aktivieren<br />

� splitPane.setOneTouchExpandable(true);<br />

� Trennlinie positionieren<br />

�� splitPane.setDividerLocation(150); // 150 Pixel<br />

splitPane.setDividerLocation(0.25); // 25%<br />

� Mindestgröße für den Inhalt festlegen<br />

� pane1.setMinimumSize(<strong>new</strong> Dimension(100, 50));<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 260


JTabbedPane: Karteikarten<br />

� organisiert mehrere Panes "hintereinander" und<br />

mittels Karteikartenreiter umschaltbar<br />

� sehr gut: Reiter in der 2. Reihe behalten ihre Position<br />

(wechseln nicht die Reihe wie unter Windows)<br />

� Erzeugen<br />

� JTabbedPane tabbedPane = <strong>new</strong> JTabbedPane();<br />

� Karteikarte einfügen und beschriften<br />

�� tabbedPane.addTab("Titel", icon, pane1, "Tooltip");<br />

� Karteikarte aktivieren<br />

� tabbedPane.setSelectedIndex(int)<br />

tabbedPane.setSelectedComponent(Component)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 261


eigentlich keine Pane, sondern<br />

ein Layout-Manager<br />

CardLayout: reiterlose Karteikarten<br />

� Anwendung ähnlich wie JTabbedPane, aber Umschaltung kann/muss selbst<br />

programmiert werden<br />

� Erzeugen<br />

� CardLayout cardLayout = <strong>new</strong> CardLayout();<br />

JPanel cardPanel = <strong>new</strong> JPanel();<br />

cardPanel.setLayout(cardLayout );<br />

� Karteikarte einfügen<br />

� cardPanel.add(pane1, "Text1");// Text muss eindeutig sein<br />

�� Karteikarte aktivieren<br />

� cardLayout.show(cardPanel, "Text1");// oder sequentiell:<br />

cardLayout.first(cardPanel);<br />

cardLayout.next(cardPanel);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 262


Dynamische und statische Layouts<br />

� statisches Layout: ���� Definition von Koordinaten<br />

� die Größe und Position der einzelnen Komponenten ist in einem<br />

absoluten Koordinatensystem (z.B. Pixel) festgelegt<br />

� Bildschirmmaske ist für eine bestimmte Gesamtgröße gemacht<br />

� unter Windows gewisse Anpassung über Bildschirmschriftgröße<br />

� dynamisches Layout: ���� Definition von Regeln<br />

� die Größe und Position der einzelnen Komponenten kann von der<br />

Größe bzw. Auflösung des Bildschirms und von der Fenstergröße<br />

abhängen<br />

� kann plattform- bzw. bildschirmunabhängig gemacht werden<br />

� aber: schwieriger zu entwickeln<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 263


Vorgehensweise <strong>beim</strong> Entwurf<br />

� Java unterstützt dynamische Layout: Layout-Managern<br />

� Eclipse setzt von vornherein einen solchen ein<br />

� wir bauen als Vorstufe zunächst statische Layouts<br />

� Vorteile:<br />

� man entwirft visuell und konzentriert sich auf die Oberfläche;<br />

Gestaltung wird nicht durch Realisierungsprobleme eingeengt<br />

�� man bekommt mit wenig Aufwand einen Prototypen und hat<br />

weniger Hemmungen, diesen mehrfach zu ändern<br />

� wenn der Entwurf schließlich steht, dann wird ein dynamisches<br />

Layout konstruiert<br />

Wir haben diesen<br />

bisher<br />

ausgeschaltet!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 264


Vorgehensweise mit und ohne Layout<br />

� bisher:<br />

Größe und Position von Komponenten in der Entwicklungsphase<br />

festgelegt<br />

� jetzt:<br />

Position (und/oder Größe) der Komponenten ändert sich zur Laufzeit<br />

� a) abhängig von der Fenstergröße<br />

� kann sich an der Grafikkartenauflösung<br />

orientieren<br />

zweckmäßiger Einsatz<br />

ist nicht trivial<br />

� b) abhängig von der Größe der Komponente<br />

� jede Komponente hat eine Wunschgröße (preferred size)<br />

� z.B. abhängig von der Schriftgröße<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 265


Wo macht es Sinn ?<br />

� abhängig von Fenstergröße:<br />

alle Komponenten mit Scrollbalken<br />

� z.B. JList, JTree, JTable; evtl. auch JTextArea<br />

� Scrollbalken können verschwinden<br />

� mehr Inhalt wird sichtbar<br />

� allenfalls abhängig von Schriftgröße:<br />

Buttons, Checkboxen, Labels, Ränder<br />

�� Größenverhältnis visueller Objekte<br />

ist wesentlich für den Gesamteindruck !<br />

(Schrift/Komponente, Komponente/Freifläche)<br />

sorgfältig überlegen,<br />

welche Komponenten<br />

dynamisch werden sollen<br />

sofern man<br />

die Schriftgröße<br />

überhaupt<br />

variabel gestaltet<br />

� Buttons abhängig von Fenstergröße belegen nur sinnlos Fläche<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 266


Parameter dynamischer Layouts<br />

� Fenstergröße<br />

� großes Fenster ermöglicht Darstellung von mehr Information<br />

und bessere Gestaltung mit Hilfe von Freiflächen<br />

� begrenzt durch Bildschirmgröße und -auflösung<br />

� Schriftgröße<br />

� idealerweise vom Benutzer wählbar entsprechend individueller<br />

Sehkraft (vgl. Browserschriftgröße und Windows Grafiktreiber)<br />

�� sollte bei hochauflösenden Bildschirmen vergrößert werden<br />

� Extremfall Touchscreen: dicker Finger statt spitzer Maus<br />

� Textlänge<br />

� abhängig von der Sprache<br />

“Speichern unter“<br />

“Save as“<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 267


Layout-Manager in Swing<br />

� Java unterstützt dynamisches Layout durch<br />

verschiedene Layout-Manager-Klassen<br />

� gibt es nicht unter Windows / MFC;<br />

könnte man sich aber selbst schreiben<br />

� weil einfach einsetzbar, werden sie in Java eher zu oft verwendet<br />

� ein Layout-Manager-Objekt wird einem Fenster / Panel / Pane<br />

zugeordnet und verwaltet dessen Komponenten<br />

�� Layout wird neu berechnet, wenn sich<br />

a) die Fenstergröße ändert oder<br />

b) die Wunschgröße (preferred size) einer Komponente ändert<br />

� Layout-Manager können geschachtelt werden<br />

� Freiflächen mittels leerem Rand oder unsichtbaren Komponenten<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 268


Überblick<br />

� Nutzen Sie die Layout-Manager für das von Ihnen entwickelte User<br />

Interface im Praktikum!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 269


"Fließtext": FlowLayout<br />

� für einfache Reihe von Komponenten<br />

� Standard bei JPanel<br />

� Komponenten behalten eigene Größe (PreferredSize)<br />

� Panel zu schmal � Zeilenumbruch<br />

� Panel zu groß � Gruppe oben zentriert (oder links-<br />

/rechtsbündig)<br />

� wichtige Attribute:<br />

�� setAlignment: CENTER, LEFT, RIGHT<br />

� setHgap, setVgap: Lücke zwischen Komponenten<br />

• Hinweis: auch vor/über erster und hinter/unter letzter Komponente<br />

(wirkt wie Rand, allerdings nicht bei Zeilenumbruch)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 270


FlowLayout Programmfragment<br />

JPanel panel = <strong>new</strong> JPanel();<br />

FlowLayout fl = <strong>new</strong> FlowLayout();<br />

fl.setAlignment(FlowLayout.LEFT); // Ausrichtung<br />

fl.setHgap(9); // horizontale Lücke<br />

fl.setVgap(12); // vertikale Lücke<br />

panel.setLayout(fl);<br />

// oder gleich:<br />

panel.setLayout(<strong>new</strong> FlowLayout (FlowLayout.LEFT, 9, 12));<br />

// (Alignment, Hgap, Vgap)<br />

panel.add(jButton1); // usw.: Komponenten hinzufügen<br />

Window.pack(); // bewirkt Berechnung des Layouts<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 271


Zeile oder Spalte: BoxLayout<br />

� senkrechte oder waagrechte Reihe setAlignmentX<br />

� Ausrichtung jeder Komponente individuell wählbar<br />

setAlignmentX/Y (1.0=linksbündig ... 0.0=rechtsbündig)<br />

� Achtung: Default-Alignment ist unterschiedlich je nach Klasse !<br />

� leere Komponenten als Platzhalter für Freiflächen<br />

� RigidArea: Freifläche fester Größe (eine Dimension kann 0 sein)<br />

ohne: mit:<br />

�� Glue: Freifläche, die den "Rest" füllt<br />

ohne: mit:<br />

� Filler: Freifläche mit Minimum-, Preferred- und MaximumSize<br />

(ähnlich wie RigidArea, aber variabler)<br />

� Strut: wird nicht empfohlen; besser RigidArea verwenden<br />

setAlignmentX<br />

(0.5)<br />

Glue hält nicht<br />

zusammen, sondern<br />

drückt auseinander<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 272


BoxLayout Programmfragment<br />

JPanel panel = <strong>new</strong> JPanel();<br />

BoxLayout bl = <strong>new</strong> BoxLayout(panel, BoxLayout.Y_AXIS);<br />

panel.setLayout(bl); // oder gleich:<br />

panel.setLayout(<strong>new</strong> BoxLayout(panel, BoxLayout.X_AXIS));<br />

// (Container, Alignment)<br />

// Alignment der Komponente definieren (wichtig!):<br />

jButton1.setAlignmentX(Component.CENTER_ALIGNMENT);<br />

panel.add(jButton1); // Komponenten + Abstände hinzufügen<br />

panel.add(Box.createRigidArea(<strong>new</strong> Dimension(5,0)))<br />

panel.add(jButton2);<br />

panel.add(Box.createHorizontalGlue());<br />

panel.add(jButton3);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 273


Mitte maximal: BorderLayout<br />

� maximiert mittlere Kompo-<br />

nente fensterabhängig;<br />

reiht andere Komponenten am Rand<br />

� Layout-Strategie: CENTER maximal<br />

WEST / EAST möglichst schmal<br />

NORTH / SOUTH möglichst niedrig<br />

� häufig ist außer CENTER nur ein weiteres Feld belegt<br />

� Felder enthalten oft andere Layout-Manager<br />

� optional mit Hgap / Vgap: Lücken zwischen den Feldern<br />

� Standard-Layout von JFrame.contentPane<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 274


BorderLayout Programmfragment<br />

JPanel panel = <strong>new</strong> JPanel();<br />

BorderLayout bl = <strong>new</strong> BorderLayout(); // Hgap=Vgap=0<br />

panel.setLayout(bl); // oder gleich:<br />

panel.setLayout(<strong>new</strong> BorderLayout(9, 12)); // (Hgap, Vgap)<br />

panel.add(jButton1, BorderLayout.NORTH);<br />

panel.add(jButton2, BorderLayout.CENTER);<br />

panel.add(jButton3, BorderLayout.WEST);<br />

panel.add(jButton4, BorderLayout.SOUTH);<br />

panel.add(jButton5, BorderLayout.EAST);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 275


Gleiche Tabellenzellen: GridLayout<br />

� 2-dim. Raster für Komponenten<br />

� Komponenten werden auf<br />

Rastermaß gestreckt<br />

� Anzahl der Zeilen und/oder Anzahl der Spalten<br />

muss festgelegt werden<br />

� Konstruktorparameter oder setRows / setColumns<br />

� 0 definiert variable Anzahl<br />

(entweder für Zeilen oder für Spalten)<br />

� optional mit Hgap / Vgap: Lücken zwischen den Feldern<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 276


GridLayout Programmfragment<br />

JPanel panel = <strong>new</strong> JPanel();<br />

GridLayout gl = <strong>new</strong> GridLayout (3,2); // Hgap=Vgap=0<br />

panel.setLayout(gl); // oder gleich:<br />

panel.setLayout(<strong>new</strong> GridLayout (0, 2, 9, 12));<br />

// (Rows, Columns, Hgap, Vgap)<br />

0: variable Zeilenzahl<br />

panel.add(jButton1); // Komponenten zeilenweise ...<br />

panel.add(jButton2); // von links oben ...<br />

panel.add(jButton3); // ... nach rechts unten ...<br />

panel.add(jButton4); // hinzufügen<br />

panel.add(jButton5);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 277


Universell: GridBagLayout<br />

� sehr flexibles Raster-Layout<br />

� freie Adressierung der Rasterposition<br />

� Komponenten können gestreckt werden<br />

� Komp. können sich über mehrere Zeilen<br />

und/oder Spalten erstrecken<br />

� Andockkante in größerem Rasterfeld wählbar<br />

� rasterfeldbezogene Füllattribute<br />

�� x- und y-"Gewichte" bestimmen Verteilung von Restplatz<br />

� parameterloser Konstruktor, keine wichtigen Attribute<br />

0<br />

1<br />

2<br />

0 1 2<br />

� aber jede Komponente bekommt ein eigenes<br />

GridBagConstraints-Objekt (reine Datenstruktur) zugeordnet<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 278


GridBagLayout Programmfragment<br />

JPanel panel = <strong>new</strong> JPanel();<br />

GridBagLayout gbl = <strong>new</strong> GridBagLayout();<br />

panel.setLayout(gbl);<br />

GridBagConstraints gc = <strong>new</strong> GridBagConstraints();<br />

gc.fill = GridBagConstraints.HORIZONTAL;<br />

gc.gridx = 0; gc.gridy = 0;<br />

gbl.setConstraints(jButton1, gc);<br />

panel.add(jButton1);<br />

gc.weightx = 0.5;<br />

gc.gridx = 1; gc.gridy = 2;<br />

gbl.setConstraints(jButton2, gc);<br />

panel.add(jButton2);<br />

wird darin geklont (=kopiert) !<br />

! nicht dokumentiert; muß<br />

man im Quellcode nachlesen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 279


GridBagConstraints (1)<br />

� int gridx, int gridy<br />

werden immer einer<br />

Komponente zugeordnet<br />

� addressiert Spalte und Zeile für die Komponente<br />

(Zelle oben links angeben, wenn mehrere Zellen belegt werden)<br />

� int gridwidth, int gridheight (default 1)<br />

� Anzahl der von der Komponente belegten Spalten und Zeilen<br />

� Sonderfall REMAINDER belegt den Rest einer Spalte bzw. Zeile<br />

� fill = NONE (default), HORIZONTAL, VERTICAL, BOTH<br />

�� gibt an, ob und wie die Komponente gestreckt werden soll,<br />

um die ganze Zelle zu füllen<br />

� int ipadx, int ipady (default=0)<br />

� vergrößert die Minimalgröße der Komponente um 2*ipad<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 280


GridBagConstraints (2)<br />

� Insets insets (default <strong>new</strong> Insets (0,0,0,0))<br />

� definiert einen Mindestrand um die Komponente für T, L, B, R<br />

� anchor = CENTER (default), NORTH, NORTHEAST, EAST,<br />

SOUTHEAST, SOUTH, SOUTHWEST, WEST, NORTHWEST<br />

� definiert den Andockpunkt, falls Komponente kleiner als Zelle ist<br />

� double weightx, double weighty<br />

(default=0.0; Wertebereich 0.0 ... 1.0)<br />

�� prozentuale Verteilung von freiem Platz auf Spalten bzw. Zeilen<br />

(max. weightx innerhalb Spalte bzw. max. weighty innerhalb Zeile<br />

gilt bei Konflikt zwischen mehreren Zellen)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 281


Layout-Raster skizzieren<br />

Fenstergröße<br />

S<br />

Fehler<br />

Icongröße<br />

S F(Rest) S F(Rest)<br />

F(0.5)<br />

F<br />

Abstände/Ränder<br />

=f(Schriftgröße)<br />

max(I,S)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

F(0.5) Prof. Dr.-Ing. Hans-Peter Wiedling<br />

klicken Sie um die Skizze aufzubauen<br />

S<br />

F<br />

Schriftgröße<br />

+Textlänge<br />

S<br />

Seite 282


Beispiel mit geschachtelten Layouts<br />

WEST:<br />

entfällt<br />

kaum einzuhalten<br />

NORTH: 1 horizontale Box<br />

CENTER:<br />

GridLayout<br />

1 Zeile, 2 Spalten<br />

SOUTH: 3 horizontale Boxen in 1 vertikalen Box<br />

erfordert Feinjustage mittels preferredSize<br />

Grid- und Box- in BorderLayout<br />

offenes Problem:<br />

variable Breite<br />

EAST:<br />

vertikale<br />

Box<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 283


esser mit GridBagLayout<br />

alle Zellen in Zeilen 0,2,3,4: fill=HORIZONTAL<br />

gridwidth=2<br />

fill=BOTH<br />

horizontale Box; gridwidth=3<br />

gridwidth=2<br />

fill=BOTH<br />

Grid;<br />

fill=<br />

HOR.<br />

Spalte: 0 1 2 3 4<br />

größte preferredSize setzt sich durch<br />

Zeile<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

0<br />

1<br />

3<br />

4<br />

2<br />

Seite 284


Vorgehensweise <strong>beim</strong> Layout<br />

� notwendige Komponenten aus Use Cases ermitteln<br />

� Komponenten freihändig gruppieren und positionieren<br />

� Flucht- und Symmetrielinien identifizieren / definieren<br />

� Anzahl der Fluchtlinien klein halten<br />

� Fluchtlinien können gezeichnete Linien<br />

ersetzen: "gutes Design braucht keine (gezeichneten) Linien"<br />

� Rasterzeilen und -spalten bemaßen<br />

das Auge ist da<br />

sehr empfindlich !<br />

�� dyn. Layout: abhängig von Schrift-, Fenster- und Icongröße<br />

• bei mehrsprachigen Anwendungen auch abhängig von Textlänge<br />

• im allgemeinsten Fall sind alle Maße variabel!<br />

� (statisches Layout: absolute Zahlen in Pixel)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 285<br />

Analyse - Gestaltung - Konstruktion


Auswahl anwendungsfallorientiert<br />

� möglichst viel Platz für eine Komponente<br />

� BorderLayout: im CENTER<br />

� GridBagLayout: constraint.fill = GridBagConstraints.BOTH<br />

� ein paar Komponenten kompakt in einer Zeile oder Spalte<br />

in deren jeweils eigener Standardgröße:<br />

� auf JPanel mit FlowLayout (nur Zeile) oder BoxLayout<br />

� ein paar Komponenten gleicher Größe:<br />

�� GridLayout (evtl. nur 1 Zeile oder 1 Spalte)<br />

� komplexes Layout mit vielen Komponenten<br />

� GridBagLayout oder mehrere geschachtelte Panels<br />

� feste und variable Zellengrößen frei kombinierbar<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 286


Komponentengröße beeinflussen<br />

Achtung: Abhängigkeit von Schriftgröße wird durch explizites Setzen zerstört !<br />

� setMinimumSize, setPreferredSize, setMaximumSize<br />

� nach Änderung revalidate und repaint aufrufen<br />

Führungselement<br />

� gleiche Größe für mehrere Komponenten:<br />

jComp2.setPreferredSize (jComp1.getPreferredSize());<br />

� manche Layout-Manager respektieren manche Attribute:<br />

BorderLayout<br />

Minimum Preferred Maximum<br />

BoxLayout X X<br />

FlowLayout X<br />

GridBagLayout X<br />

GridLayout<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 287


Bemerkung zur Schriftgröße<br />

� Änderung der Schriftgröße<br />

erfordert neues Font-Objekt<br />

� Methode setFontSize fehlt<br />

� Zuordnung des Font-Objekts zu<br />

allen betroffenen Komponenten<br />

mit setFont<br />

oder<br />

�� setFont(null) für alle<br />

� dann erben sie vom Parent<br />

� nur contentPane bekommt<br />

gewünschtes Font-Objekt<br />

zugeordnet<br />

� Problem bei Optimierung der<br />

Größe von Buttons mittels<br />

setPreferredSize:<br />

� die Größe ist damit festgelegt<br />

und orientiert sich nicht mehr<br />

an Schriftgröße und Textinhalt<br />

�� Bug <strong>beim</strong> Erben des Font:<br />

� JComboBox bestimmt ihre<br />

preferredSize nicht neu<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 288


Screen zur Erfassung einer Problembeschreibung<br />

... für unser<br />

Ticketsystem<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 289


Screen zur Erfassung einer Problembeschreibung<br />

Ziel zunächst:<br />

•Aufbau des<br />

Screens<br />

identifizieren<br />

•Container<br />

benennen<br />

•LayoutManager<br />

auswählen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 290


Layout – Analyse: Rasterlinien einzeichnen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 291


Layout – Analyse: Bestandteile identifizieren<br />

Im WEST-<br />

Bereich:<br />

JPanel<br />

(clientPanel)<br />

mitGridLayout<br />

mit JLabel und<br />

JTextField<br />

ContentPane<br />

mit<br />

BoderLayout<br />

Im EAST-<br />

Bereich:<br />

JPanel<br />

(catPanel) mit<br />

GridLayout mit<br />

JLabel,<br />

5 CheckBoxen<br />

und 2 JButton<br />

Im CENTER-Bereich: JPanel (descrPanel)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

mit FlowLayout mit JLabel und<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

JScrollPane und TextArea<br />

Seite 292


Layout–Kodierung: Programmcode in Java<br />

// Panel:<br />

private JPanel jContentPane // steht zu Verfügung<br />

private JPanel clientPanel;<br />

private JPanel descrPanel;<br />

private JPanel catPanel;<br />

// CheckBox:<br />

private JCheckBox software = <strong>new</strong> JCheckBox("Software");<br />

private JCheckBox hardware= <strong>new</strong> JCheckBox("Hardware");<br />

private JCheckBox bedienung= <strong>new</strong> JCheckBox("Bedienung");<br />

private JCheckBox betriebssystem= <strong>new</strong><br />

JCheckBox("Betriebssystem");<br />

private JCheckBox netzwerk= <strong>new</strong> JCheckBox("Netzwerk");<br />

// text. Beschreibung<br />

private JTextArea description;;<br />

// Button:<br />

private JButton abbrechen = <strong>new</strong> JButton ("Abbruch");<br />

private JButton erfassen = <strong>new</strong> JButton ("Erfassen");<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 293


clientPanel und descrPanel erstellen<br />

clientPanel = <strong>new</strong> JPanel (<strong>new</strong> GridLayout (0,1));<br />

clientPanel.add(<strong>new</strong> JLabel ("Kunde"));<br />

clientPanel.add(<strong>new</strong> JTextField ("Kunde"));<br />

clientPanel.add(<strong>new</strong> JLabel ("Email"));<br />

clientPanel.add(<strong>new</strong> JTextField ("@kunde.com"));<br />

this.jContentPane.add(clientPanel, BorderLayout.WEST);<br />

descrPanel = <strong>new</strong> JPanel ();<br />

descrPanel.setLayout (<strong>new</strong><br />

BoxLayout(descrPanel,BoxLayout.Y_AXIS));<br />

JLabel describLbl = <strong>new</strong> JLabel ("Beschreibung");<br />

describLbl.setAlignmentX(Component.LEFT_ALIGNMENT);<br />

descrPanel.add(describLbl);<br />

description = <strong>new</strong> JTextArea (5, 8);<br />

descrPanel.add(<strong>new</strong> JScrollPane( description ));<br />

this.jContentPane.add(descrPanel, BorderLayout.CENTER);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 294


catPanel erstellen<br />

catPanel = <strong>new</strong> JPanel (<strong>new</strong> GridLayout (0,1));<br />

software.setSelected(true);<br />

catPanel.add(<strong>new</strong> JLabel("Kategorie(n)"));<br />

catPanel.add(software);<br />

catPanel.add(hardware);<br />

catPanel.add(bedienung);<br />

catPanel.add(betriebssystem);<br />

catPanel.add(netzwerk);<br />

catPanel.add(Box.createRigidArea(<strong>new</strong> Dimension(0, 10)));<br />

erfassen = <strong>new</strong> JButton ("Erfassen");<br />

catPanel.add(erfassen);<br />

abbrechen = <strong>new</strong> JButton ("Abbruch");<br />

catPanel.add(abbrechen);<br />

this.jContentPane.add(catPanel, BorderLayout.EAST);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 295


Aufgabe<br />

Skizzieren Sie das Layout-Raster und wählen Sie geeignete Layout-Manager !<br />

� Notepad Editor:Datei -> Seite einrichten � Windows Taschenrechner<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 296


Dialogbausteine<br />

� Ein Dialog besteht aus 2 Komponenten:<br />

� Layout/Präsentation<br />

Dialogelement und Dialogablauf (grafische Darstellung von Dialogelemente,<br />

Einbettung in das Gesamtsystem)<br />

� Logik/Semantik<br />

anwendungsabhängige Bearbeitung der Eingabe (Methode, die wir angeben,<br />

um ein von Benutzer initiiertes Ereignis zu bearbeiten)<br />

� Komplexe Dialoge werden anhand der Dialogbausteine wie in einem<br />

Baukasten zusammengesetzt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 297


Logische Eingabeklasse<br />

� Ein wichtiges Element grafischer Oberflächen zur Generalisierung eines<br />

Ansatzes ist die Modellierung einer Schnittstelle nach log. Gesichtspunkten<br />

(mit dem Ziel der Wiederverwendbarkeit, Entlastung der<br />

Applikationsentwicklung, Konsistenz, …)<br />

� Man kann dabei im Wesentlichen zwei Arten von Interaktionsgruppen<br />

unterscheiden:<br />

� Aufgaben zur diskreten Eingabe<br />

�� Aufgabe zur dynamischen Steuerung<br />

� Typischerweise kann man bei einer eingabeorientierten Ausgabe die<br />

folgenden elementaren Dialoge unterscheiden:<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 298


Klassifikation diskrete Eingabe<br />

Logischer Dialog Kommentar Realisierungbeispiel<br />

�� 1-aus-n Auswahl diskrete sehr begrenzte JMenu, JComboBox,<br />

Auswahl (z.B. Kommando) JButtonGroup (JRadioButtons),<br />

JButton<br />

� n-aus-m Auswahl diskrete (sehr) begrenzte JToggleButton, JCheckbox,<br />

Auswahl (z.B. Parameter) JList, JButtons<br />

� Punkteingabe i. A. Punkt in Problem- JTextField,<br />

koordinaten Mausklick (anwendungsspez.)<br />

� Obj. Auswahl Identifikation JTextField,<br />

Mausklick (anwendungsspez.)<br />

� Text Name, Kommentar, ... JOptionPane, JTextField,<br />

Kommando JTextArea<br />

� Wert Skalar,<br />

(z.B. Temperatur) …<br />

JTextField, JSlider, JScrollbar<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 299


Klassifikation dynamische Steuerung (I)<br />

� Hier steuert der Benutzer das Verhalten von sichtbaren Elementen in einer<br />

dynamischen und direkt gekoppelten Art und Weise.<br />

� Charakteristisch für die dynamische Steuerung ist eine sehr enge Kopplung<br />

zwischen Eingabe und Ausgabe, um dem Benutzer eine kontinuierliches<br />

Feedback zu geben:<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 300


Klassifikation dynamische Steuerung (II)<br />

Logischer Dialog Kommentar Realisierungsbeispiel<br />

�� Dehnen Objekt skalieren Gummiband, Rechteck<br />

� Zeichnen Freiformkurven Stift, Pinsel<br />

� Manipulieren Drehen, Verschieben, “Drag&Drop“<br />

Ablegen, Löschen,<br />

Papierkorb, Scrollbar<br />

� Formen Kurven Stützstellen, Kurve<br />

(z.B. Beziér, NURBS)<br />

Viele dieser Techniken werden weitgehend durch standardisierte<br />

Interaktionselemente realisiert. Sie spiegeln die Schnittstellenmetapher<br />

direkt-manipulativer Anwendungen etwa aus dem Bürobereich wider und<br />

werden in vielen unterschiedlichen Anwendungen eingesetzt.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 301


GUI- und Anwendungsobjekte<br />

Wichtig in allen Fällen ist die Rückkopplung aller benutzergesteuerten Aktionen:<br />

�� anwendungsunabhängig<br />

durch aktuelle Position des (Text-/Maus-)Cursors und<br />

� anwendungsabhängig<br />

durch Zugriff auf die Modelldaten<br />

� Einerseits wird die konsequente Trennung zwischen Applikation und grafischer<br />

Oberfläche angestrebt<br />

�� Andererseits muss die Kontrolle zwischen Dialogteilen und<br />

Anwendungsprogrammteilen gegeben sein<br />

� Neben der Übersicht über die Dialogbausteine werden wir sowohl die Kopplung<br />

zwischen Anwendung und GO als auch die Ereignisbehandlung betrachten<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 302


Bausteine grafischer Bedienoberflächen<br />

� Begriffe uneinheitlich<br />

�� Windows: Control/Steuerelement<br />

� Java: Component<br />

� Motif: Widget<br />

Window Gadget:<br />

Gadget: Ding(s), Teilchen, Vorrichtung, Dingsbums<br />

� Widget: Fensterobjekt<br />

� WIMP-System := { Window, Icon, Menu, Pointing Device }<br />

� visuelle Klassen<br />

�� Objekte aktualisieren/zeichnen sich selbst auf den Bildschirm<br />

� Erscheinungsbild und Verhalten über Attribute einstellbar<br />

� Ereignisbehandlung<br />

• teilweise im Zusammenspiel mit übergeordnetem Fenster<br />

� große Auswahl in Bibliotheken, Eigenkreation möglich<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 303


Swing Components<br />

Schaltflächen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Textfelder Auswahl 1 aus n<br />

Seite 304


Klassenhierarchie<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 305


Schaltflächen: Charakterisierung<br />

� Buttons dienen dem<br />

Auslösen einer Aktion<br />

� meist beschriftet,<br />

manchmal mit Bild<br />

� können zu Buttonleisten<br />

aneinandergereiht werden<br />

� Gruppen von RadioButtons<br />

� Toolbars<br />

�� können inaktiv (disabled) sein<br />

� haben Boole'schen Zustand<br />

� temporär (d.h. nur Feedback) bei JButton<br />

AbstractButton<br />

JButton JToggleButton<br />

Aktion<br />

JCheckBox JRadioButton<br />

� permanent bei den anderen (durch Gruppierung auch 1-aus-n)<br />

Zustand<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 306


JButton löst nur Aktion aus<br />

� Schaltfläche mit Icon und/oder Text<br />

high level event<br />

� Ereignisse: actionPerformed(ActionEvent) // <strong>beim</strong> Anklicken<br />

� I/O: keine<br />

� Methoden:<br />

� setEnabled(boolean);<br />

� setVisible(boolean);<br />

�� setActionCommand(String);<br />

// wird Attribut von ActionEvent<br />

� getRootPane().setDefaultButton(JButtonX);<br />

// übergeordnete Pane: JButtonX erhält Event<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 307


ImageIcon: statische Bilder<br />

auch für großes Hintergrundbild<br />

� Buttons, Labels, Listen etc. können Icons darstellen<br />

� Bilddateiformat GIF oder JPEG<br />

� am einfachsten mit Bildbearbeitungsprogramm erstellen<br />

und in Datei ablegen<br />

� GIF auch mit transparentem Hintergrund ("freigestellt")<br />

ImageIcon Bild = <strong>new</strong> ImageIcon("Verzeichnis/Bild.gif");<br />

JLabel Label = <strong>new</strong> JLabel();<br />

Label.setIcon(Bild);<br />

nicht nur in Buttons!<br />

ImageIcon Bilder[] = { <strong>new</strong> ImageIcon("Verzeichnis/Bild0.gif"),<br />

<strong>new</strong> ImageIcon("Verzeichnis/Bild1.gif")};<br />

JComboBox ComboBox = <strong>new</strong> JComboBox(Bilder);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 308


Buttons und Bilder: Icons<br />

JButton jButton1 = <strong>new</strong> JButton();<br />

JButton jButton2 = <strong>new</strong> JButton();<br />

...<br />

ImageIcon ii = <strong>new</strong> ImageIcon ("contact.gif");<br />

jButton1.setPreferredSize(<br />

<strong>new</strong> Dimension(ii.getIconWidth(), ii.getIconHeight() ));<br />

jButton1.setIcon (ii);<br />

...<br />

jButton2.setText("Kontakt");<br />

contentPane.add (jButton1, ...);<br />

contentPane.add (jButton2, ...)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 309


JToggleButton: Zustand + Aktion<br />

� wie JButton, aber mit Zustandsanzeige "gedrückt"<br />

� Ereignisse: actionPerformed(ActionEvent) // <strong>beim</strong> Anklicken<br />

itemStateChanged(ItemEvent)// bei Zustandswechsel<br />

� I/O: isSelected() // boolean<br />

ItemEvent.getStateChange() // SELECTED / DESELECTED<br />

� Methoden:<br />

� setSelected(boolean);<br />

� setEnabled(boolean);<br />

� setVisible(boolean);<br />

� setActionCommand(String); //wird Attribut von ActionEvent<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 310


JCheckBox: Wahrheitswert<br />

� wie JToggleButton, aber mit Zustandsanzeige "Häkchen"<br />

� Ereignisse: actionPerformed(ActionEvent) // <strong>beim</strong> Anklicken<br />

itemStateChanged(ItemEvent) // bei Zustandswechsel<br />

� I/O: isSelected() // boolean<br />

ItemEvent.getStateChange() // SELECTED / DESELECTED<br />

� Methoden:<br />

� setSelected(boolean);<br />

� setEnabled(boolean);<br />

� setVisible(boolean);<br />

� setActionCommand(String);// wird Attribut von ActionEvent<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 311


JRadioButton<br />

� wie JCheckBox, tritt aber typischerweise in Gruppen auf<br />

�� Gruppe mit gegenseitiger Auslösung:<br />

ButtonGroup grp = <strong>new</strong> ButtonGroup();<br />

grp.add(jRadioButton1);<br />

grp.add(jRadioButton2);<br />

ButtonModel bm = grp.getSelection();<br />

� Ereignisse: actionPerformed(ActionEvent) // <strong>beim</strong> Anklicken<br />

� Merkmal: ActionEvent.getActionCommand() // String<br />

� Methoden bei JRadioButton:<br />

�� setActionCommand(String); // wird Attribut von ActionEvent<br />

� setSelected(boolean);<br />

� setMnemonic(KeyEvent.VK_B); // virt. Key Code (hier für „B“)<br />

� setSelected(true);<br />

� etc.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 312


JMenuBar, JMenu: Hauptmenü<br />

� Platzsparende Form der Gruppierung mehrerer Buttons<br />

� normale Schaltflächen, aber auch Checkboxen und Radiobuttons<br />

� vorzugsweise für "globale" Funktionen<br />

� ermöglicht hierarchische Gliederung durch Kaskadierung<br />

• durch Überstreichen gut geeignet zum Erforschen einer unbekannten<br />

Anwendung<br />

� u. U. umständlich zu bedienen, besonders bei Kaskadierung<br />

�� am oberen Rand von JFrame, JDialog, JApplet<br />

JMenuBar meinMenu = <strong>new</strong> JMenuBar();<br />

this.setJMenuBar(meinMenu);<br />

� Ereignisbehandlung über ActionListener der MenuItems wie bei Buttons<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 313


Aufbau eines Menüs<br />

� Objekte erzeugen<br />

JMenu jMenu2 = <strong>new</strong> JMenu();<br />

JMenuItem jMenuItem21 = <strong>new</strong> JMenuItem();<br />

in Eclipse durch eigene Variante<br />

des Visual Editors unterstützt<br />

� Attribute setzen // weitere siehe Buttons<br />

jMenuItem21.setText ("Ausschneiden");<br />

jMenuItem21.setEnabled (false);<br />

� Objekte verknüpfen<br />

jMenuBar1.add (jMenu2);<br />

jMenu2.add (jMenuItem21);<br />

jMenuBar1.add (Box.createHorizontalGlue());//nächstes rechts<br />

jMenu2.addSeparator (); // Trennlinie<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 314


JPopupMenu: Kontextmenü<br />

� verborgenes Menü<br />

� belegt keine Bildschirmfläche, aber Benutzer muß suchen!<br />

� typischerweise für objektbezogene Funktionen<br />

� verschiedene Objekttypen haben verschiedene Kontextmenüs<br />

� Menüaufbau wie <strong>beim</strong> Hauptmenü:<br />

JPopupMenu jPopupMenu1 = <strong>new</strong> JPopupMenu();<br />

JMenuItem jMenuItemP1 = <strong>new</strong> JMenuItem();<br />

jMenuItemP1.setText ("Ausschneiden");<br />

jPopupMenu1.add (jMenuItemP1);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 315


Kontextmenü-Ereignisbehandlung<br />

� Aufruf aus MouseListener des<br />

sensitiven Objekts<br />

void mouseReleased(MouseEvent e)<br />

{<br />

}<br />

unter Windows und Motif<br />

mit rechtem Mausklick;<br />

für andere OS zusätzlich<br />

mousePressed<br />

if (e.isPopupTrigger())<br />

jPopupMenu1.show(e.getComponent(), e.getX(), e.getY());<br />

� Zugriff auf zugehöriges Objekt und MenuItem<br />

void actionPerformed(ActionEvent e) {<br />

JMenuItem aktItem = (JMenuItem)e.getSource();<br />

JPopupMenu aktPopup = (JPopupMenu)aktItem.getParent();<br />

JObject geklicktesObjekt = aktPopup.getInvoker();<br />

// irgendetwas wird damit gemacht ...<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 316


Toolbars<br />

� Menüs werden häufig ergänzt durch Toolbars<br />

� schnellerer Zugriff für Fortgeschrittene<br />

� der Toolbar enthält eine häufig verwendete Teilmenge der Menü-<br />

Funktionen<br />

� als Gruppe von Buttons, meist mit Icons gekennzeichnet<br />

� kann vom Rand des Fensters "abgerissen" werden (hoch/quer)<br />

� oft vom Benutzer selbst konfigurierbar<br />

�� Icons sind fast nie selbsterklärend: sie müssen erlernt werden!<br />

� eine gute Hilfe dazu sind Tooltips (d.h. Texte, die nur erscheinen,<br />

wenn die Maus auf dem Button verweilt)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 317


JToolBar<br />

� Objekte erzeugen<br />

JToolBar jToolBar1 = <strong>new</strong> JToolBar();<br />

JButton jButton1 = <strong>new</strong> JButton();<br />

� Attribute setzen<br />

jButton1.setIcon (<strong>new</strong> ImageIcon("Icons/img_cd.gif"));<br />

jButton1.setToolTipText ("CD abspielen");<br />

� Objekte verknüpfen<br />

(die contentPane muß ein BorderLayout haben)<br />

contentPane.setLayout(<strong>new</strong> BorderLayout());// i.d.R. default<br />

contentPane.add(jToolBar1, BorderLayout.NORTH);<br />

jToolBar1.add (jButton1, null);<br />

jToolBar1.addSeparator (); // Abstand einfügen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 318


Textfelder: Charakterisierung<br />

� Textfelder dienen der Ein-<br />

und Ausgabe von Text<br />

� sie integrieren einfache oder<br />

komplexe Editorfunktionen<br />

� Cursor<br />

� Selektion<br />

JTextComponent<br />

JTextfield JTextArea<br />

JEditorPane<br />

� Kopieren, Einfügen<br />

JPasswordField JTextPane<br />

� mehrzeilige Textfelder<br />

können Scrollen, wenn die<br />

einzeilig mehrzeilig Editor für<br />

Fläche nicht ausreicht<br />

Text, HTML<br />

� können inaktiv (disabled) sein behandeln wir nicht<br />

und RTF mit<br />

Formatierung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 319


JTextField: einzeilige I/O + Aktion<br />

� für Ein- oder Ausgabe von kurzen Texten oder Zahlenwerten, oft mit<br />

anschließender Aktion<br />

� Ereignis: actionPerformed(ActionEvent) // bei Return<br />

� Methoden:<br />

� getText(), setText(String) // Zugriff auf gesamten Inhalt<br />

� select(int, int), selectAll() // markiert (selektiert) Text<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 320


JTextArea: mehrzeilige I/O<br />

� für Ein- oder Ausgabe von mehrzeiligen Texten<br />

beliebiger, aber<br />

einheitlicher Font<br />

� kann scrollen, wenn innerhalb einer JScrollPane plaziert:<br />

contentPane.add(jScrollPane, null);<br />

jScrollPane.getViewport().add(jTextArea, null);<br />

� Ereignis: actionPerformed(ActionEvent) // bei Return<br />

� Methoden:<br />

�� getText(), setText(String); // Zugriff auf gesamten Inhalt<br />

� append(String); // hängt Text am Ende an<br />

� insert(String, int); // fügt Text an Position ein<br />

� replaceRange(String, int, int); // ersetzt einen Textbereich<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 321


Wertebereichsüberprüfung<br />

� "action validated"<br />

� Überprüfung des eingegebenen Werts, nachdem "Return"<br />

gedrückt wurde<br />

• Zwischenzustände bei der Eingabe spielen keine Rolle<br />

• bequem zu Editieren<br />

� im actionPerformed-Handler vor der Weiterverarbeitung<br />

- So machen Sie es im Rahmen des Praktikums! -<br />

� Weiter Möglichkeiten werden wir im Rahmen der<br />

Ereignisbehandlung betrachten<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 322


Auswahllisten: JComboBox, JList<br />

� Lineare, ungegliederte Liste<br />

� oft besser als Textfeld mit Gültigkeitsüberprüfung<br />

� Einfachauswahl oder Mehrfachauswahl<br />

� Vorteile gegenüber Gruppe aus Radiobuttons:<br />

� große Zahl von Listenelementen ist möglich<br />

ABER: Überschaubarkeit und Suchaufwand für den Benutzer sind<br />

zu bedenken<br />

�� Listenelemente können zur Laufzeit geändert bzw.<br />

datenabhängig geladen werden<br />

� JComboBox als platzsparende Variante<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 323


JList: sichtbare Liste<br />

� Einfach- oder Mehrfachauswahl<br />

� Strings oder Icons als Elemente<br />

(� ListCellRenderer für anwendungsspezifische Darstellung)<br />

� Listenelemente aus Object[] oder DefaultListModel<br />

• Konstantenliste am besten über String Werte[]={...};<br />

� kann scrollen, wenn innerhalb einer JScrollPane plaziert<br />

� Ereignis:<br />

(dynamisch)<br />

�� boolean valueChanged(ListSelectionEvent)// Auswahländerung<br />

� I/O: int, Object oder Array // Index oder ausgewähltes Objekt<br />

� Methoden:<br />

String<br />

� boolean getValueIsAdjusting()// wird Auswahl noch geändert?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 324


JList: Auswahlmodus und Selektion<br />

� Auswahl des Auswahlmodus<br />

jL.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);<br />

� SINGLE_SELECTION<br />

� int getSelectedIndex()<br />

� Object getSelectedValue()<br />

� SINGLE_INTERVAL_SELECTION<br />

� int getMinSelectionIndex()<br />

� int getMaxSelectionIndex()<br />

� MULTIPLE_INTERVAL_SELECTION<br />

� int[] getSelectedIndices()<br />

� Object[] getSelectedValues()<br />

Auswahl mit Festhalten<br />

der Umschalt-Taste<br />

Auswahl mit Festhalten<br />

der Strg-Taste<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 325


JComboBox: ausklappbare Liste<br />

� nicht editierbar: Auswahl 1-aus-n, auch Icons statt Text oder<br />

� editierbar: wie Textfeld mit Vorgaben<br />

� ComboBox.setEditable(true); // false ist Standard<br />

� statische oder dynamische Liste wie bei JList<br />

� Ereignis: actionPerformed(ActionEvent) // Auswahl oder Return<br />

� I/O: int oder Object (� String, ImageIcon oder ... )<br />

� Methoden:<br />

�� setSelectedIndex(int), int getSelectedIndex() // Index<br />

� ComboBox.getSelectedItem().toString() // Text<br />

� (ImageIcon)(ComboBox.getSelectedItem()) // Bild<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 326


Dynamische Listen (I)<br />

� Änderung der Listenelemente zur Laufzeit<br />

erfordert Objekt der Klasse DefaultListModel<br />

fast identisch für<br />

JList und JComboBox<br />

� dieses enthält die Daten und informiert JList bzw. JComboBox<br />

über Änderungen<br />

DefaultListModel Daten = <strong>new</strong> DefaultListModel();<br />

JList Listbox = <strong>new</strong> JList(Daten);<br />

JScrollPane ScrollPane = <strong>new</strong> JScrollPane();<br />

ScrollPane.getViewport().add(Listbox, null);<br />

contentPane.add(ScrollPane, null);<br />

Daten.addElement("neuer Eintrag");<br />

bzw. DefaultComboBoxModel<br />

Daten.removeElementAt(0); // oder removeElement(Object)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 327


Dynamische Listen (II)<br />

1.: Registrieren<br />

DefaultListModel List3 = <strong>new</strong><br />

DefaultListModel();<br />

JList jList3 = <strong>new</strong><br />

JList(List3);<br />

...<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 328


Dynamische Listen (III)<br />

2.: Neues Element zur<br />

Liste hinzufügen<br />

//(z.B. in der Ereignisbehandlung eines Textfeldes):<br />

List3.addElement(jTextField1.getText());<br />

// das neue (letzte) Element selektieren:<br />

jList3.setSelectedIndex(List3.size()-1);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 329


Dynamische Listen - Prinzip<br />

View<br />

JList Objekt<br />

Registrierung<br />

( <strong>new</strong> JList(...) )<br />

...<br />

Benachrichtigung<br />

( addElement ... )<br />

Model<br />

DefaultListModel Objekt<br />

„2“<br />

„Beispiel“<br />

„Dienstag<br />

“<br />

...<br />

Durch Model- und View- Objekte<br />

wird die Applikation weitgehend<br />

entlastet!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 330


JComboBox<br />

private JComboBox comboSelect = <strong>new</strong> JComboBox( );<br />

...<br />

comboPanel.setBackground(<strong>new</strong> Color(250, 250, 0));<br />

• Objekte werden der<br />

for (TicketState t : TicketState.values())<br />

ComboBox per<br />

addItem hinzugefügt<br />

comboSelect.addItem(t);<br />

oder mit<br />

comboPanel.add(comboSelect);<br />

• removeItemAt (i)<br />

entfernt<br />

comboSelect.addActionListener(<strong>new</strong> • ActionListener wird<br />

java.awt.event.ActionListener() { registriert<br />

public void actionPerformed(ActionEvent e) {<br />

comboBox_actionPerformed(e);<br />

}<br />

});<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 331


JComboBox mit DefaultComboBoxModel<br />

private DefaultComboBoxModel daten = <strong>new</strong> DefaultComboBoxModel();<br />

private JComboBox comboSelect = <strong>new</strong> JComboBox(daten);<br />

...<br />

comboPanel.setBackground (<strong>new</strong> Color(250, 250, 0));<br />

for (TicketState t : TicketState.values())<br />

daten.addElement(t);<br />

comboPanel.add(comboSelect);<br />

comboSelect.addActionListener( <strong>new</strong><br />

java.awt.event.ActionListener() {<br />

public void actionPerformed(ActionEvent e) {<br />

comboBox_actionPerformed(e);<br />

}<br />

});<br />

• Objekte werden einer<br />

Modelklasseninstanz<br />

per addElement<br />

zugeordnet<br />

(Vorteil:<br />

Daten sind veränderbar)<br />

• ActionListener wird<br />

registriert<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 332


JList mit DefaultListModel<br />

DefaultListModel daten = <strong>new</strong> DefaultListModel();<br />

JList listSelect = <strong>new</strong> JList(daten);<br />

listPanel.setBackground(<strong>new</strong> Color(250, 250, 0));<br />

for (TicketState t : TicketState.values()) daten.addElement(t);<br />

listPanel.add(listSelect);<br />

listSelect.addListSelectionListener(<strong>new</strong> ListSelectionListener() {<br />

public void valueChanged(ListSelectionEvent evt) {<br />

// When the user release the mouse button and completes the<br />

// selection getValueIsAdjusting() becomes false<br />

if (!evt.getValueIsAdjusting()) {<br />

JList list = (JList) evt.getSource();<br />

Object[] selected = list.getSelectedValues();<br />

// Iterate all selected items<br />

for (int i = 0; i < selected.length; i++) {<br />

Object sel = selected[i];<br />

System.out.println(sel);<br />

}// for<br />

}// if<br />

}// valueChanged<br />

});<br />

• Objekte werden einer<br />

Modelklasseninstanz<br />

per addElement<br />

zugeordnet (Vorteil:<br />

Daten sind veränderbar)<br />

• ListSelectionListener<br />

wird registriert<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 333


Interface ListCellRenderer:<br />

� … und für das Darstellen gibt es auch Interfaces:<br />

Das Interface ListCellRenderer besitzt nur die folgende Methode:<br />

� public Component getListCellRendererComponent<br />

(<br />

JList list, Componente/Liste<br />

Object value, darzustellendes Objekt aus dem Model;<br />

entspricht: list.getModel().getElementAt(index)<br />

int index, Position in der Liste<br />

boolean isSelected, Element ausgewählt<br />

boolean cellHasFocus Element hat Focus<br />

)<br />

� Der Rückgabewert ist eine Componente (JLabel), die dargestellt wird.<br />

� Wird mit der Methode list.setCellRenderer(<strong>new</strong> MyRenderer());<br />

JList-Instanz gesetzt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 334


JSlider: diskrete Werte mit Einrasten<br />

� nur grobe Einstellmöglichkeit per Maus<br />

� wahlweise mit "Einrasten" bei Ticks<br />

� spezielle Beschriftung mittels Hashtable (Assoziativtabelle,<br />

Schlüssel/Wert-Paare)<br />

� Ereignis: stateChanged(ChangeEvent)<br />

� I/O: void setValue(int); int getValue()<br />

�� Eigenschaften:<br />

setMinimum(-20); setMaximum(80);<br />

setMinorTickSpacing(5); setMajorTickSpacing(20);<br />

setPaintLabels(true); setPaintTicks(true);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 335


JProgressBar: reine Anzeige<br />

� zur Anzeige länger dauernder Abläufe<br />

� beruhigt den Benutzer<br />

� Alternative: Klasse ProgressMonitor macht Dialog auf<br />

� Ereignis: keines (darstellungsorientiert)<br />

� Output: void setValue(int)<br />

� Eigenschaften:<br />

setMinimum(-20); setMaximum(80);<br />

setOrientation(JProgressBar.VERTICAL);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 336


JScrollBar: meist für Fenster<br />

� grobe Einstellmöglichkeit per Maus<br />

� Feineinstellung mit<br />

� Unit Increment (Klicken auf Buttons) und<br />

� Block Increment (Klicken auf Leiste)<br />

� Ereignis: adjustmentValueChanged(AdjustmentEvent)<br />

� I/O: void setValue(int); int getValue()<br />

�� Eigenschaften:<br />

setMaximum(90); setMinimum(-20);<br />

setBlockIncrement(20); setUnitIncrement(2);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 337


Architektur: Model-View-Control<br />

� Data Model:<br />

zugrunde liegende Anwendungsfunktionen und -datenstrukturen<br />

„WAS wird angezeigt“<br />

� View:<br />

Präsentation der Daten – GUI Componente<br />

„WIE wird etwas angezeigt“<br />

� Control:<br />

Reaktion (Prüfung und Weiterleitung) auf Eingaben oder Modelländerungen<br />

� Das Ziel ist, jede Komponente getrennt zu entwickeln, testen und<br />

u.U. auch im Gesamtsystem auszutauschen (lose Kopplung der Objekte)<br />

� Manchmal findet ein Observer-Pattern (oder das Publisher-Subscriber-<br />

Framework) Anwendung: Beim Start meldet sich Observer <strong>beim</strong><br />

beobachtenden Objekt an; beobachtenden Objekt informiert Beobachter.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 338


MVC – Model View Control<br />

Model/Document<br />

MyModel/<br />

MyDocument<br />

Applikation<br />

Object<br />

View Control<br />

MyView MyControl<br />

GO Objekte<br />

Ereignisbehandlung<br />

(Callbacks)<br />

Klassenhierarchie<br />

Anwendung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 339


Arbeitsweise von MVC<br />

(1)<br />

(2)<br />

View<br />

Control<br />

Model<br />

(3)<br />

(4)<br />

(1) View empfängt ein Dialogereignis vom Benutzer und ruft<br />

eine entsprechende Funktion von Control zur Umsetzung<br />

des Ereignisses auf.<br />

(2) Control manipuliert das Model entsprechend der<br />

Operation mit passenden Funktionen, die das Model<br />

anbietet.<br />

(3) Control löst Änderungen in der Darstellung von<br />

View aus, die sich als Folge der abgewickelten<br />

Operation ergeben haben.<br />

(4) View holt sich nach Bedarf weitere Daten von Model,<br />

um sie zu präsentieren.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 340


Umsetzung: Model-View-Control<br />

� View (als Buttons, Checkboxen, …) und<br />

Control (als Listener) sind in den Komponenten festgelegt<br />

� Konsequenz für die Realisierung:<br />

� Anwendungsfunktionalität und Graphische Oberfläche sind getrennt!<br />

� Anwendungsfunktionen sind nicht unmittelbar als Code in den Methoden<br />

zur Ereignisbehandlung eingebaut und<br />

� die Anwendungsfunktionen können vollständig separat in eigenen<br />

Klassen formuliert werden; Zugriff erfolgt über definierte Schnittstellen<br />

�� Vorschlag: Modell als Interface vereinbaren<br />

Modell oder View kann variiert werden!<br />

� Es bieten sich Default-Klassen (Container) für die Anwendung an (z.B.<br />

ArrayList, …)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 341


Beispiel: JTable<br />

� Verwenden Sie JTable oder JTree in<br />

Ihrem Programmcode im Praktikum!<br />

Statische<br />

Tabelle<br />

Dynamische<br />

Tabelle<br />

(sollte Ihr<br />

Favorit sein)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 342


Model-View-Control Architektur<br />

� konsequente Trennung zwischen<br />

Datenhaltung und Sicht auf die Daten<br />

� z.B. Datenhaltung: ArrayList von Arrays<br />

� z.B. Sicht: 2-dim. Tabelle mit Spaltenüberschriften<br />

� aufwendiger zu handhaben, aber flexibler<br />

� Standard-Datenmodell für einfache Fälle<br />

� View-Klasse erwartet von der Model-Klasse,<br />

dass sie bestimmte Methoden implementieren/bereitstellen<br />

ArrayList<br />

Arrays<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 343


DynamischeTabelle<br />

extends AbstractTableModel (I)<br />

class DynamischeTabelle extends AbstractTableModel<br />

{<br />

final int AnzahlSpalten; // feste Breite<br />

ArrayList tabelle = <strong>new</strong> ArrayList(); // Menge mit Anwendungsobjekten<br />

public DynamischeTabelle (int AnzahlSpalten, ArrayList tabelle ) {<br />

}<br />

this.AnzahlSpalten = AnzahlSpalten;<br />

this.tablle = tabelle;<br />

public Class getColumnClass (int columnIndex) {<br />

}<br />

try { // Spalte 5 wird als Boolean interpretiert:<br />

}<br />

if (columnIndex==4) return Class.forName("java.lang.Boolean");<br />

else return Class.forName("java.lang.Object");<br />

catch (ClassNotFoundException ce) {<br />

}<br />

System.out.println(ce.getMessage()); return null;<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 344


DynamischeTabelle<br />

extends AbstractTableModel(II)<br />

public boolean isCellEditable (int rowIndex, int columnIndex)<br />

{<br />

// nur Spalte 5 soll editierbar sein:<br />

return (columnIndex == 4);<br />

}<br />

public int getRowCount ()<br />

{<br />

return tabelle.size();<br />

}<br />

public int getColumnCount ()<br />

{<br />

return anzahlSpalten;<br />

}<br />

public Object getValueAt (int row, int column)<br />

{<br />

Object[] tabellenzeile = (Object[])tabelle.get(row);<br />

return tabellenzeile[column];<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 345


DynamischeTabelle<br />

extends AbstractTableModel(III)<br />

public void setValueAt (Object aValue, int rowIndex, int columnIndex)<br />

{<br />

Object[] tabellenzeile;<br />

if (rowIndex < tabelle.size())<br />

tabellenzeile = (Object[])tabelle.get(rowIndex); // Zeile existiert schon<br />

else if (rowIndex == tabelle.size()) {<br />

tabellenzeile = <strong>new</strong> Object[AnzahlSpalten]; // neue Zeile allokieren ...<br />

tabelle.add(tabellenzeile); // und an DisplayList hängen<br />

fireTableRowsInserted(rowIndex, rowIndex); // über Änderung informieren<br />

}<br />

else<br />

throw <strong>new</strong> ArrayIndexOutOfBoundsException(<br />

"DynamischeTabelle erlaubt nur anhängen");<br />

tabellenzeile[columnIndex] = aValue; // neuen Wert eintragen<br />

fireTableCellUpdated(rowIndex, columnIndex); // über Änderung informieren<br />

}<br />

public String getColumnName (int i) // liefert Spaltenüberschrift<br />

{<br />

return “Entity";<br />

}<br />

} // DynamischeTabelle<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 346


JTable<br />

� Details siehe auch:<br />

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#renderer<br />

bzw.<br />

http://download.oracle.com/javase/tutorial/uiswing/components/table.html#renderer<br />

� Swing Tutorial:<br />

http://java.sun.com/docs/books/tutorial/uiswing/components/dialog.html#create<br />

bzw.<br />

http://download.oracle.com/javase/tutorial/uiswing/components/index.html<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 347


Tabellen<br />

� Schneller Überblick auf viele Merkmale gleichartiger Objekte<br />

� Neben dem reinen Markieren/Auswählen gibt es noch weitere<br />

nützliche Eigenschaften:<br />

Typprüfungen/-einhaltungen <strong>beim</strong> Editieren<br />

� für String, Integer, Float/Double, Boolean<br />

� aber auch für 1-aus-n und n-aus-m Auswahl bei den einzelnen<br />

Merkmalen in den Tabellenzellen bieten sich sehr geeignete<br />

Konstrukte an:<br />

• In TableCellRenderer werden Darstellungsmerkmale ausgedrückt<br />

• Im AbstractCellEditor wird die Übergabe/Empfang der Merkmale an<br />

das Model beschrieben<br />

� Die Objekte in der Tabelle können sortiert und/oder gefiltert werden.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 348


Sichere Typen in Tabellenzellen<br />

� Allgemein kann die Methode getValueAt(rowIndex, columnIndex).getClass();<br />

die spezifische Klasse liefern<br />

� String (Class.forName("java.lang.String")) und Integer<br />

(Class.forName("java.lang.Integer"))<br />

erfordern keine weiteren Einstellungen<br />

� Für Class.forName("java.lang.Boolean")<br />

sollte eine JCheckBox als CellRenderer eingesetzt werden:<br />

jTable2.setDefaultEditor(Class.forName("java.lang.Boolean"),<br />

<strong>new</strong> DefaultCellEditor(<strong>new</strong> JCheckBox()));<br />

� Für Class.forName("java.lang.JComboCox")<br />

sollte ein JComboBox –Objekt eingerichtet werde<br />

� Class.forName("java.lang.JList")<br />

benötigt einen CellRenderer und einen CellTableEditor<br />

� Der geschickte Einsatz macht Tabellen sicherer, flexibel und reduziert letztendlich den<br />

Programmieraufwand<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 349


JTable: Model und View für 1-aus-n Auswahl<br />

TicketState<br />

anzeigen<br />

TicketState<br />

ändern<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 350


Klasse, Editor und Renderer bereit stellen<br />

public Class getColumnClass(int columnIndex) {<br />

return getValueAt(0, columnIndex).getClass(); }<br />

� Editor für TicketState erstellen und einfügen:<br />

TableColumn col =<br />

jTable.getColumnModel().getColumn(3);<br />

JComboBox comboBox = <strong>new</strong> JComboBox();<br />

for (TicketState ts : TicketState.values())<br />

comboBox.addItem(ts);<br />

Weder für Renderer<br />

noch für CellEditor<br />

sind spez. Klassen<br />

erforderlich<br />

stateColumn.setCellEditor(<strong>new</strong> DefaultCellEditor(comboBox));<br />

�� Tool Tips für TicketState setzen:<br />

DefaultTableCellRenderer renderer = <strong>new</strong> DefaultTableCellRenderer();<br />

renderer.setToolTipText(„Anklicken, um Zustand zu ändern");<br />

stateColumn.setCellRenderer(renderer);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 351


1-aus-n Auswahl: JComboBox in JTable<br />

� Setter-Abschnitt in der Ableitung vom DefaultTableModel:<br />

...<br />

TicketState state = (TicketState)aValue;<br />

Tabellenzeile.setTicketState(state);<br />

...<br />

� Getter-Abschnitt in der Ableitung vom DefaultTableModel:<br />

...<br />

obj = Tabellenzeile.getTicketState();<br />

...<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 352


JTable: Model und View für n-aus-m Auswahl<br />

TicketCategory<br />

anzeigen<br />

TicketCategory ändern (hier:<br />

MULTIPLE_INTERVAL_SELECTION)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 353


CellEditor, Renderer<br />

� Spezifischen CellEditor<br />

class MeinListEditor extends AbstractCellEditor<br />

implements TableCellEditor<br />

� realisieren:<br />

Übernahme der Werte ins Model beschreiben<br />

� Spezifischen Renderer<br />

class MeinCellRenderer extends JList /* z.B. */<br />

implements TableCellRenderer<br />

� realisieren:<br />

Aussehen der Componente (Größe, Hervorheben <strong>beim</strong> Selektieren,<br />

…) beschreiben<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 354


n-aus-m Auswahl: JList in JTable<br />

Auch hier wird ein spez. Editor und CellRenderer zugeordnet und in die<br />

Tabelle reingefügt:<br />

...<br />

TableColumn col =<br />

jTable.getColumnModel().getColumn(5);<br />

col.setCellEditor(<strong>new</strong> MeinListEditor());<br />

col.setCellRenderer(<strong>new</strong> MeinCellRenderer());<br />

...<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 355


ListEditor (1/2)<br />

class MeinListEditor extends AbstractCellEditor implements<br />

TableCellEditor {<br />

}<br />

JList mlist;<br />

public MeinListEditor() { mlist = <strong>new</strong> JList(); }<br />

public Object[] getCellEditorValue() {<br />

int j = 0;<br />

Object werte[] = mlist.getSelectedValues();<br />

for (Integer i : mlist.getSelectedIndices())<br />

System.out.println(" (MeinListCellEditor) ausgewählt:<br />

" + i + " " + werte[j++]);<br />

return mlist.getSelectedValues();<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 356


ListEditor (2/2)<br />

// Zelle wird editiert<br />

public Component getTableCellEditorComponent<br />

(JTable table, Object value, boolean isSelected,<br />

int row, int column) {<br />

mlist.setListData((Object[]) value);<br />

return mlist;<br />

} // getTableCellEditorComponent<br />

}// MeinListEditor<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 357


CellRenderer (1/2)<br />

class MeinCellRenderer extends JList implements<br />

TableCellRenderer {<br />

public MeinCellRenderer() { super(); }<br />

public Component getTableCellRendererComponent<br />

(JTable mtable, Object value,<br />

boolean isSelected, boolean hasFocus,<br />

int rowIndex, int vColIndex) {<br />

// Hervorheben bei Auswahl<br />

if (isSelected)<br />

setBackground(mtable.getSelectionBackground());<br />

else<br />

setBackground(Color.white);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 358


CellRenderer (2/2)<br />

// Höhe der Liste für die Tabellenzeile berechnen<br />

int rowHight =<br />

mtable.getRowHeight()+mtable.getRowMargin()+1;<br />

String[] mlist = (String[]) value;<br />

int fold = mlist.length;<br />

if (mtable.getRowHeight(rowIndex)!= fold*rowHight)<br />

mtable.setRowHeight(rowIndex, fold * rowHight);<br />

setListData((String[]) value);<br />

return this;<br />

}<br />

}// MeinCellRenderer<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 359


n-aus-m Auswahl: JList in JTable<br />

� Getter-Abschnitt in der Ableitung vom DefaultTableModel:<br />

String[] sArray;<br />

sArray = <strong>new</strong> String[TicketCategory.values().length];<br />

int i = 0;<br />

for (TicketCategory tc : TicketCategory.values())<br />

sArray[i++] = tc.name();<br />

obj = sArray;<br />

return obj;<br />

� Setter-Abschnitt in der Ableitung vom DefaultTableModel:<br />

Object[] selCategroies = (Object[]) aValue;<br />

for (Object aCategory : selCategroies)<br />

System.out.println(" " + aCategory);<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 360


Sortieren und Filtern in Tabellen (1/2)<br />

� Tabellenzeilen können in Java elegant sortiert werden.<br />

� Ein Instanz der Klasse TableRowSorter sowie deren<br />

Identifikation als Sortierer der Tabelle sorgt für entsprechende<br />

Sortierungen<br />

� TableRowSorter sorter =<br />

<strong>new</strong> TableRowSorter(table.getModel());<br />

table.setRowSorter(sorter);<br />

Exkurs<br />

� TableRowSorter benutzt java.util.Comparator Objekt zum Sortieren<br />

der Zeilen. Die Klass, die das Interface implementiert, muss die<br />

Methode compare zum Vergleich von zwei Objekten anbieten.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 361


Sortieren und Filtern in Tabellen (2/2)<br />

� Durch das Sortieren oder Filtern wird die Reihenfolge<br />

der Zeilen verändert!<br />

Exkurs<br />

� Die „View-Koordinaten“ müssen auf die „Model“-Koordinaten transformiert<br />

werden.<br />

� JTable bietet Methoden an, um von „Model“-Koordinaten auf die „View“-<br />

Koordinaten zu transformieren:<br />

� convertColumnIndexToView und convertRowIndexToView und<br />

� Methoden die von „View“-Koordinaten nach „Model“-Koordinates konvertieren:<br />

�� convertColumnIndexToModel und convertRowIndexToModel.<br />

Hinweis: Achten Sie bei der Verwendung eines Sorters/Filters also darauf, dass<br />

die Tabellenzeilen verschoben sind und auf die tatsächlichen Indices vor<br />

Änderungen transformiert werden müssen..<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 362


Beispiele - MVC<br />

� TurtleGrafik: Objekte verwalten und darstellen<br />

(interface und abstract class)<br />

� JComboBox/JList: DefaultListModel verwenden<br />

� JTextField: extends PlainDocument<br />

�� JTable: extends AbstractTableModel<br />

� JTree: DefaultMutableTreeNode und DefaultTreeModel<br />

verwenden<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 363


JTree<br />

� für hierarchische Gliederung von Einträgen<br />

�� Kapitelstruktur in einem Buch<br />

� Organisationsformen<br />

(Unternehmen, Institutionen)<br />

� Produktbeschreibungen<br />

� Klassenhierarchien<br />

� contentPane im GUI<br />

� HTML/XML Dokumente<br />

weisen diese Struktur auf<br />

� statisch (fester Inhalt) oder<br />

dynamisch (änderbar zur Laufzeit)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 364


JTree<br />

� Ereignis: valueChanged(TreeSelectionEvent e)<br />

// aus TreeSelectionListener<br />

� Zugriff auf selektierten Eintrag:<br />

e.getPath().getLastPathComponent().toString() // Text<br />

TreePath<br />

Object<br />

� TreePath jTree.getSelectionPath() // TreePath � Object[]<br />

� � (DefaultMutableTreeNode) // cast von Object<br />

(jTree.getSelectionPath().getLastPathComponent())<br />

� boolean isSelectionEmpty()<br />

� Siehe Klasse TreePath!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 365


DefaultMutableTreeNode<br />

� Standard-Knotentyp von JTree<br />

� für statische und dynamische JTrees<br />

� hat 1 übergeordneten Knoten (parent)<br />

� Ausnahme: Wurzelknoten hat keinen parent<br />

� hat ein Array von untergeordneten Knoten (childs)<br />

� werden senkrecht unter ihrem parent dargestellt<br />

� jedem Knoten kann ein beliebiges Object zugeordnet werden<br />

(im einfachsten Fall auch ein String)<br />

� bietet Enumerations (einfache Iteratoren) zum Durchwandern des<br />

Unterbaums<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 366


DefaultTreeModel<br />

� notwendig für dynamische JTrees<br />

�� einfügen, löschen, verschieben von Einträgen<br />

� informiert JTree über Änderung an seinen Einträgen<br />

� Einträge auch editierbar<br />

DefaultMutableTreeNode root = <strong>new</strong> DefaultMutableTreeNode ("Text");<br />

DefaultTreeModel treemodel = <strong>new</strong> DefaultTreeModel( root );<br />

JTree jDynTree = <strong>new</strong> JTree( treemodel );<br />

...<br />

treemodel.insertNodeInto(<strong>new</strong>Node, parent, parent.getChildCount());<br />

treemodel.removeNodeFromParent(selected);<br />

...<br />

void jDynTree_valueChanged(TreeSelectionEvent e) {<br />

jTextField1.setText(e.getPath().getLastPathComponent().toString());<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 367


DefaultTreeModel und<br />

DefaultMutableTreeNode (1/2)<br />

Einfügen:<br />

void jButtonInsert_actionPerformed(ActionEvent e)<br />

{<br />

if (jDynTree.isSelectionEmpty())<br />

JOptionPane.showMessageDialog<br />

(this, "Bitte selektieren Sie zuerst einen Knoten!");<br />

else<br />

{<br />

DefaultMutableTreeNode <strong>new</strong>Node = <strong>new</strong><br />

DefaultMutableTreeNode(jTextField1.getText());<br />

DefaultMutableTreeNode parent = (DefaultMutableTreeNode)<br />

(jDynTree.getSelectionPath().getLastPathComponent());<br />

// neuen Knoten am Ende der Child-Liste anhängen:<br />

treeModel.insertNodeInto(<strong>new</strong>Node, parent,parent.getChildCount());<br />

}<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 368


DefaultTreeModel und<br />

DefaultMutableTreeNode (2/2)<br />

Löschen:<br />

void jButtonDelete_actionPerformed(ActionEvent e)<br />

{<br />

if (jDynTree.isSelectionEmpty())<br />

JOptionPane.showMessageDialog<br />

(this, "Bitte selektieren Sie zuerst einen Knoten!");<br />

else<br />

{<br />

DefaultMutableTreeNode selected = (DefaultMutableTreeNode)<br />

(jDynTree.getSelectionPath().getLastPathComponent());<br />

if (selected==treeModel.getRoot())<br />

JOptionPane.showMessageDialog<br />

(this, "Der Wurzelknoten kann nicht gelöscht werden.");<br />

else<br />

treeModel.removeNodeFromParent(selected);<br />

}<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 369


Editierbare Bäume<br />

DefaultMutableTreeNode dynRoot;<br />

DefaultTreeModel treeModel;<br />

JTree jTree1;<br />

Treeview ()<br />

{<br />

dynRoot = <strong>new</strong> DefaultMutableTreeNode ("Spline"); // Wurzel<br />

treeModel = <strong>new</strong> DefaultTreeModel(dynRoot);<br />

jTree1 = <strong>new</strong> JTree(treeModel);<br />

jTree1.setEditable(true);<br />

TreeIcons tcr; // eigene Klasse<br />

tcr = <strong>new</strong> TreeIcons ();<br />

jTree1.setCellRenderer(tcr);<br />

}<br />

...<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 370


TreeIcon reagiert auf Veränderungen<br />

class TreeIcons implements TreeCellRenderer<br />

{<br />

TreeIcons ()<br />

{}<br />

public Component getTreeCellRendererComponent<br />

(JTree tree, Object value, boolean selected, boolean<br />

expanded, boolean leaf, int row, boolean hasFocus)<br />

{<br />

System.out.println<br />

("getTreeCellRendererComponent " + value.toString());<br />

return <strong>new</strong> JLabel(value.toString());<br />

}<br />

}<br />

anwendungs-<br />

spez.<br />

Verhalten<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 371


Klassenhierarchie zu JMenu<br />

Flächen<br />

Knoten<br />

alle MenuItems<br />

sind Buttons<br />

Blätter<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 372


„Konsoledialoge“<br />

� Das Programm durchläuft nacheinander verschiedene Zustände.<br />

Jede Eingabe wird mit der Return-Taste bestätigt oder<br />

mit der Escape-Taste abgebrochen.<br />

� Der Programmablauf gleicht einem Frage-Anwort-Spiel, in dem der<br />

Computer die führende Rolle übernimmt. Der Benutzer kann nur die<br />

Frage des Computers beantworten oder den Programmablauf ganz<br />

abbrechen und im Fehlerfall wieder komplett von vorne beginnen.<br />

� Man kann sich leicht vorstellen, dass diese Vorgehensweise in<br />

komplexeren Programmen für den Benutzer sehr problematisch wird:<br />

� der Benutzer reagiert auf die Fragen des Computers;<br />

� der Benutzer wird eine ablehnende Haltung einnehmen, wenn er das<br />

Programm nicht als Arbeitserleichterung empfindet!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 373


Ereignisgesteuerte Programmierung<br />

� Bei Programmen mit grafisch-interaktiven Benutzungsoberflächen<br />

kann die Reihenfolge der Eingabe beliebig variiert und Werte auch<br />

nachträglich geändert werden;<br />

Neuberechnungen oder Berechnungsvariationen sind einfach<br />

möglich.<br />

� Aus der Sicht der Entwicklerin/des Entwicklers bedeutet diese Art<br />

des Benutzerdialogs zusätzliche Überlegungen.<br />

� Der Benutzer entscheidet, was er als nächstes tut.<br />

Die Aufgabe des Programms besteht nun darin, Benutzereingaben<br />

wahrzunehmen und zu interpretieren.<br />

Für das Programm sind Benutzereingaben Ereignisse, auf die es in<br />

geeigneter Weise reagieren muss.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 374


Ereignisbegriff<br />

Events := Ereignisse,<br />

die i. d. R. vom Benutzer direkt oder indirekt ausgelöst werden und<br />

eine Eingabe darstellen, auf die das Programm auf eine bestimmte<br />

Art und Weise reagieren muss (Berechnung neu durchführen,<br />

Darstellung aktualisieren, Fenster verschieben ...)<br />

� Ereignisse sind weder Klassen, noch Objekte, noch Methoden !<br />

� Objekte von Event-Klassen sind Parametersätze, die zur<br />

Behandlung von Ereignissen als Zusatzinformation übergeben<br />

werden (nicht zu verwechseln mit den Ereignissen selbst)<br />

� Ereignisse müssen vom Programm behandelt werden<br />

� die Behandlung erfolgt durch Ausführung eines "Handlers"<br />

(= Funktion/Methode)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 375


Eventhandling<br />

Beispiele:<br />

�� Eingabe über Tastatur (� (� KeyEvent)<br />

� Mausklick (� MouseEvent, MouseMotionEvent)<br />

� Menueauswahl, Scrollbalken bewegen, Buttons anklicken<br />

(� ActionEvent)<br />

� Fenster verschieben, vergrößern, verkleinern, schließen, iconifizieren (�<br />

WindowEvent)<br />

� Dateiauswahl (�komplexer, zusammengesetzter Dialog)<br />

� ...<br />

�� Der Benutzer erwartet bestimmtes (Standard-)Verhalten!<br />

� Das Fenstersystem (Windowmanager, Betriebssystem) verteilt die Eingabe dazu<br />

an die betreffende Anwendung<br />

� die Anwendung reagiert anwendungsspezifisch (unterschiedlich Anwendungen<br />

reagieren unterschiedlich z. B. auf einen Mausklick)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 376


Eventhandling<br />

Events<br />

Fenstersystem,<br />

Windowmanager<br />

Prüfung der<br />

Events und<br />

Verteilung an<br />

Anwendung<br />

Reaktion/Behandlung<br />

von Eventtyp 1<br />

Reaktion/Behandlung<br />

von Eventtyp i<br />

Reaktion/Behandlung<br />

von Eventtyp n<br />

Anwendung 2<br />

Anwendung 1<br />

� In diesem Zusammenhang spricht man auch davon, dass der<br />

Programmablauf benutzergesteuert (user driven) ist.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 377


Zuordnung von Handlern<br />

� Ereignisse werden vom Betriebssystem erkannt oder erzeugt und an<br />

die Anwendung weitergeleitet<br />

� Maus/Tastatur � Betriebssystem � Anwendung<br />

� Basisklassen aus Bibliothek � eigene abgeleitete Klassen<br />

� letztlich sollen Methoden in der Anwendung aufgerufen werden<br />

� dabei werden i. a. ereignisspezifische Parameter übergeben<br />

(Mauskoordinaten, Tastencode, ButtonID, ...)<br />

�� Zuordnung: Systemereignis �� Handler<br />

� vom Wesen her: Tabelle mit Funktionszeigern<br />

(siehe Eventliste in der Design-Ansicht von Eclipse)<br />

� bisher kein Standard; jede Bibliothek macht es anders<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 378


ei Komponenten<br />

� "normale" Programmierung<br />

�� Zuordnung Ereignis �� Handler wird zur Compile-Zeit festgelegt<br />

� erlaubt konstante Arrays von Funktionszeigern oder<br />

virtuelle Funktionen (basieren ebenfalls auf konstanter vtable)<br />

� Komponententechnik (Java Beans, ActiveX Controls)<br />

� Komponente ist visuelles Steuerelement<br />

� stellt Eigenschaften, Methoden und Ereignisse bereit<br />

�� kann mit der umgebenden Anwendung kommunizieren<br />

� liegt als fertig kompilierte jar- vor<br />

� Zuordnung Ereignis � Handler wird zur Laufzeit festgelegt<br />

� erfordert dynamische Liste von Funktionszeigern oder Objekten;<br />

in Java: mit Methode add...Listener(Listenerobjekt)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 379


Listener<br />

� benötigt werden eigentlich Zeiger auf Funktionen<br />

� Dies gibt es nicht in Java (rein objektorientiert)!<br />

streng OO,<br />

flexibel und<br />

unübersichtlich<br />

� Stattdessen:<br />

Objekte von Klassen, die eine passende (Handler-) Methode haben<br />

� Methoden werden spezifiziert als interface "...Listener"<br />

� beliebige Klassen können dieses Interface implementieren,<br />

d.h. sich um die (Handler-)Methode ergänzen<br />

�� Referenzen auf Objekte dieser Klassen werden anstelle von<br />

Zeigern auf Funktionen übergeben ("als Listener registriert")<br />

� manche Listener-Interfaces definieren nur eine einzige Methode<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 380


Delegation<br />

� die Ereignisbehandlung wird abgeordnet/übertragen<br />

Ereignisquelle<br />

Benachrichtigung (2) Registrierung (1)<br />

Eventlistener<br />

Verweis auf<br />

Eventlistener<br />

implements XXXListener<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 381


Delegation<br />

� Bei dieser Technik registrieren sich Objekte direkt bei der Quelle eines<br />

bestimmten Ereignisses. Daraufhin werden diese Objekte „automatisch“ über das<br />

Auftreten dieses Ereignisses informiert.<br />

� Damit ein Objekt über den Eintritt eines Ereignisses unterrichtet werden kann,<br />

muss eine Verbindung zwischen der Quelle des Ereignisses und den<br />

Komponenten , die auf das Ereignis reagieren, geschaffen werden (Registrierung).<br />

Die Quelle speichert einen Verweis auf die Komponente, die informiert werden<br />

möchte.<br />

� Tritt das Ereignis ein, wird die Komponente über den Eintritt unterrichtet<br />

(Benachrichtigung). Da die Reaktion auf das Ereignis nicht direkt in der<br />

Komponente stattfindet, in der es eingetreten ist, spricht man von einem<br />

Delegatiosmodell.<br />

Bemerkung:<br />

� Nur ein Objekt, das das zu einem Ereignis zugehörigen Interface implementiert,<br />

kann über das Delegationsmodell auf ein Ereignis reagieren!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 382


Ereignisklassen – ein Ausschnitt<br />

ActionEvent<br />

EventObject<br />

AWTEvent<br />

AdjustmentEvent ComponentEvent ItemEvent<br />

ContainerEvent FocusEvent InputEvent WindowEvent<br />

MouseEvent<br />

...<br />

KeyEvent<br />

PaintEvent<br />

TextEvent<br />

ListSelectionEvent<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 383


Ereignisklassen (I)<br />

� ActionEvent:<br />

Ein ActionEvent definiert die Auslösung eines bestimmten Ereignisses,<br />

durch das eine andere Aktion angestoßen wird (z.B. Druck eines<br />

Buttons).<br />

� Adjustment Event:<br />

Ein AdjustmentEvent zeigt an, dass in einer Komponente ein<br />

Einstellvorgang vorgenommen wurde. Das ist der Fall, bei denen ein<br />

Wert zwischen zwei vorgegebenen Werten eingestellt werden kann (z.B.<br />

Scrollbar).<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 384


Ereignisklassen (II)<br />

� ComponentEvent:<br />

Dieses Event wird ausgelöst, wenn in einer Komponente eine<br />

Operation ausgeführt wird. Darunter fallen das Verändern der Größe,<br />

das Anzeigen, Entfernen von Komponenten am Bildschirm und<br />

Eingabeereignisse (z.B. Maus, Key)<br />

� ListSelectionEvent:<br />

Ein ListSelectionEvent wird in Komponenten ausgelöst, bei denen<br />

aus einer bestimmten Menge ausgewählt werden kann (z.B. JList,<br />

JTable).<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 385


Aktivitäten und Eventklassen<br />

Aktivität des Benutzers Swing-Eventklasse<br />

Klick auf Button, Return in Textfeld, Menüauswahl ActionEvent<br />

Tabellen- oder Listenauswahl wird geändert ListSelectionEvent<br />

Benutzer schließt das Hauptfenster WindowEvent<br />

Benutzer drückt Maustaste über Komponente MouseEvent<br />

Benutzer bewegt Maus über Komponente MouseEvent<br />

(MouseMotionListener)<br />

Komponente wird sichtbar ComponentEvent<br />

Komponente bekommt den Tastaturfokus FocusEvent<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

semantic<br />

low level<br />

Seite 386


Eventhandling – <strong>beim</strong> Ticketsystem<br />

class TicketJDialog extends JDialog implements ActionListener<br />

{<br />

JLabel zustand = <strong>new</strong> JLabel ();<br />

JTextArea ta = <strong>new</strong> JTextArea(10,10);<br />

JComboBox cb;<br />

Ticket t;<br />

TicketJDialog (JFrame aJFrame, Ticket aTicket, String[] consultant)<br />

{<br />

this.setSize(300, 200);<br />

this.setTitle("ConsultantAssign");<br />

this.getContentPane().setLayout(<strong>new</strong> GridLayout (1,3));<br />

this.t = aTicket;<br />

cb = <strong>new</strong> JComboBox (consultant);<br />

cb.addActionListener(this);<br />

this.getContentPane().add(cb);<br />

ta.setText(“Endloschleife");<br />

this.getContentPane().add(ta);<br />

zustand.setText(aTicket.state.toString());<br />

this.getContentPane().add(zustand);<br />

} // Konstruktor<br />

public void actionPerformed (ActionEvent ae)<br />

{<br />

t.state = TicketState.in_Bearbeitung;<br />

zustand.setText ("in Bearbeitung");<br />

}<br />

} // TicketDialog<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 387


Beispiel: ActionEvent<br />

Methoden<br />

� public String getActionCommand()<br />

� int getModifiers() // CTRL, ALT, Shift<br />

� String paramString()<br />

� public Object getSource()//ererbt von der Klasse EventObject<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 388


Beispiel: ListSelectionEvent<br />

Methoden<br />

� int getFirstIndex()<br />

� int getLastIndex()<br />

� boolean getValueIsAdjusting() // true, wenn mehrere<br />

Änderungen gemacht werden,<br />

d.h. Maus wird über Liste<br />

gezogen<br />

� String toString()<br />

�� public Object getSource()//ererbt von der Klasse EventObject<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 389


Beispiel: MouseEvent<br />

Methoden<br />

� int getClickCount()<br />

� Point getPoint()<br />

� int getX()<br />

� int getY()<br />

� boolean isPopupTrigger()<br />

� String paramString()<br />

� void translatePoint (int x, int y)<br />

� public Object getSource()//ererbt von der Klasse EventObject<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 390


� Anonyme innere Klasse<br />

� eine ganze Klasse zu schreiben, wenn man eigentlich nur eine<br />

Methode braucht, wäre ebenfalls unpraktisch<br />

� Lösung:<br />

eine anonyme Klasse, von der nur ein einziges, ebenfalls anonymes<br />

Objekt erzeugt wird<br />

� ergibt eine zusätzliche Datei Klasse$n.class<br />

jButton1.addActionListener(<strong>new</strong> ActionListener() {<br />

public void actionPerformed(ActionEvent e) {<br />

// entsprechende Aktionen ausführen<br />

}<br />

});<br />

� hat vollen Zugriff auf alle Variablen der umschließenden Klasse<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 391


(Anonyme) innere Klassen<br />

� Problem: keine Mehrfachvererbung, keine Freunde<br />

�� MeinFrame abgeleitet von JFrame<br />

� MeinListener abgeleitet von irgendeinem Adapter (=<br />

Standardimplementierung eines Interfaces)<br />

� Listener soll Zugriff auf die Elemente von MeinFrame haben<br />

� in C++ würde<br />

• MeinListener von MeinFrame und von Adapter abgeleitet werden<br />

oder<br />

• MeinFrame würde MeinListener zum Freund erklären<br />

� Ausweg: Listener als innere Klasse von MeinFrame<br />

� Listener oft als anonyme (namenlose) Klassen definiert;<br />

� sie können dann nur eine einzige Instanz haben<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 392


Aufgabe: Zuordnung einer Methode zum<br />

Ereignis ActionEvent des Buttons<br />

Ereignisbehandlung (1/2): anonyme Klasse<br />

private void jbInit() throws Exception {<br />

entfällt<br />

jButton1.setActionCommand("Hallo");<br />

jButton1.addActionListener(<strong>new</strong><br />

anonymeKlasse implements<br />

java.awt.event.ActionListener() {<br />

public void actionPerformed(ActionEvent e) {<br />

jButton1_actionPerformed(e);<br />

}<br />

});<br />

ActionListener ist ein Interface, das nur die<br />

}<br />

Methode actionPerformed definiert<br />

void jButton1_actionPerformed(ActionEvent e) {<br />

// Nutzinhalt; hier: Messagebox zeigt "Hallo"<br />

JOptionPane.showMessageDialog(this, e.getActionCommand());<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 393


Ereignisbehandlung (2/2): implements Interface<br />

import java.awt.event.*;<br />

class jButton1_Listener implements ActionListener<br />

{<br />

public void actionPerformed(ActionEvent e) {<br />

jButton1_actionPerformed(e);<br />

}<br />

}<br />

public class MainWindow extends JFrame {<br />

private void jbInit() throws Exception {<br />

jButton1_Listener B1L = <strong>new</strong> jButton1_Listener();<br />

jButton1.addActionListener(B1L);<br />

}<br />

}<br />

so ist es, wenn die Listener-<br />

Klasse nicht anonym ist ...<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 394


Event-Adapter<br />

Ereignisquelle<br />

Benachrichtigung (2) Registrierung (1)<br />

Benachrichtigung (3)<br />

Verweis auf Adapter<br />

EventAdapter<br />

r<br />

Objekt<br />

implements XXXListener<br />

Verweis auf Objekt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 395


Listener und Adapter<br />

� manche Listener-Interfaces definieren mehrere Methoden<br />

� oft braucht man aber nur eine davon<br />

� alle notgedrungen zum implementieren wäre unpraktisch<br />

� hilfsweise abstrakte Adapter-Klasse mit lauter leeren Methoden<br />

public abstract class MouseAdapter implements<br />

MouseListener {<br />

public void mouseClicked(MouseEvent e) {}<br />

public void mousePressed(MouseEvent e) {}<br />

}<br />

public void mouseReleased(MouseEvent e) {}<br />

public void mouseEntered(MouseEvent e) {}<br />

public void mouseExited(MouseEvent e) {}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 396


Erweiterte Adapterklasse<br />

class mymouse extends MouseAdapter<br />

{<br />

mymouse () {}<br />

public void mouseClicked (MouseEvent e)<br />

{<br />

System.out.println("Maus clickt!");<br />

}<br />

public void mousePressed (MouseEvent e)<br />

{<br />

System.out.println("Maus presst: "+e.getX()+" "+e.getY());<br />

}<br />

}<br />

public class listenerbeispiel extends JFrame<br />

...<br />

mymouse maus = <strong>new</strong> mymouse();<br />

addMouseListener (maus);<br />

...<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 397


Eventhandling mit Eclipse<br />

� Die Realisierung im IDE ist einfach:<br />

� Die Methodennamen und Parameter sind vorgegeben und werden<br />

durch Anklicken ausgewählt;<br />

� dann können anwendungsspezfische Aktionen eingefügt werden.<br />

� Mit setActionCommand() und getActionCommand()<br />

können Componenten spezifische Informationen übergeben<br />

werden<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 398


Fenster als Listener seiner Komponente<br />

import java.awt.event.*;<br />

public class Fenster extends JFrame<br />

implements ActionListener<br />

{<br />

private void jbInit() throws Exception {<br />

jButton1.addActionListener(this);<br />

}<br />

public void actionPerformed(ActionEvent e) {<br />

if (e.getSource()==jButton1)<br />

// Handler für jButton1<br />

else<br />

// Handler für andere Komponenten<br />

}<br />

}<br />

ein Handler pro<br />

Ereignis für alle<br />

Komponenten<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 399


Beschreibung der Componenten mit Ressourcen<br />

� Konfigurieren statt Codieren<br />

�� Steigerungen der Produktivität bei entsprechender<br />

Werkzeugunterstützung<br />

� Deskriptiver Ansatz - GUI- Elemente werden generiert:<br />

� zur Beschreibung des Layouts und<br />

� der Componenten<br />

wird XML verwendet<br />

� Bei strikter Einhaltung führt Ansatz führt zu deutlichen Trennung<br />

zwischen GUI und Applikation:<br />

� Mehrsprachigkeit<br />

� Rapid Prototyping<br />

� Beispiel: GUI-Entwicklung unter Android ( )<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 400


Beschreibung des User Interfaces mithilfe von<br />

XML-Ressourcen (am Beispiel von Android) 1/4<br />

package BMI.calc;<br />

import android.app.Activity;<br />

import android.os.Bundle;<br />

public class calcBMI extends Activity<br />

{<br />

/** Called when the activity is first created. */<br />

@Override<br />

public void onCreate(Bundle savedInstanceState)<br />

{<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.main);<br />

}// onCreate<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 401


Beschreibung des User Interfaces mithilfe von<br />

XML-Ressourcen (am Beispiel von Android) 2/4<br />

strings.xml:<br />

<br />

<br />

App zur Berechnung des BMI<br />

Body Mass Index<br />

Masse in kg<br />

70<br />

Größe in cm<br />

170<br />

Ergebnis<br />

calculate<br />

#ffff00<br />

18px<br />

<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 402


Beschreibung des User Interfaces mithilfe von<br />

XML-Ressourcen (am Beispiel von Android) 3/4<br />

main.xml:<br />

<br />

<br />


Beschreibung des User Interfaces mithilfe von<br />

XML-Ressourcen (am Beispiel von Android) 4/4<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 404


Usability - Gebrauchstauglichkeit<br />

�Usability �Usability Engineering:<br />

� Benutzer (Sinus-Mileu-Studie)<br />

� Benutzerzentrierte Analyse und Design<br />

� Softwareergonomieaspekte<br />

�Usability Inspection/Usability Test:<br />

� Evaluationskriterien<br />

� Voraussetzung und Durchführung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 405


Usability<br />

� Es nützt wenig, ein funktional einwandfreies Produkt zu erstellen,<br />

wenn es von der Mehrheit der potentiellen Nutzer nicht akzeptiert<br />

wird!<br />

� Usability ist ein sehr entscheidender Faktor,<br />

um den wirtschaftlichen Erfolg eines Produktes am Markt zu<br />

bewerten.<br />

� Vorgehensweise:<br />

�� Anforderungen zusammentragen (Requirement Engineering)<br />

� Benutzerprofile erstellen (Stereotypen, Lebenslagen, Milieus)<br />

� Modellbildung (Modelle und Metapher)<br />

� Rapid Prototyping als Vorgehensweise involviert frühzeitig Betroffene<br />

� Einsatz von Bibliotheken, Frameworks<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 406


Usability-Engineering<br />

� Usability Engineering bezieht den Benutzer des Programms bei der<br />

Entwicklung mit ein:<br />

� Dinge, die für den Entwickler einfach und klar sind, können dem<br />

Benutzer Schwierigkeiten bereiten und ihm nicht zugänglich sein<br />

� Relevante Überlegungen können sehr plakativ formuliert werden:<br />

Quelle: Nielsen, Jakob: Usability Engineering, 1993<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 407


„Your best guess is not good enough“<br />

� Was einem zuerst als Problemlösung einfällt, muss nicht immer das<br />

Beste sein. Man sollte noch einmal genau überlegen, ob der<br />

Benutzer damit Probleme haben könnte.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 408


„The user is always right“<br />

� Die Benutzungsoberfläche soll so entwickelt werden, dass sie dem<br />

Benutzer gefällt, die gute Bedienbarkeit muss im Mittelpunkt der<br />

Überlegungen stehen.<br />

� Dies gilt insbesondere auch dann, wenn die Umsetzung aufwendiger<br />

ist oder man es selber gerne anders machen würde.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 409


„Less is more“<br />

� Man darf eine Benutzungsoberfläche nicht mit Funktionen<br />

überfrachten.<br />

Viele Programm weisen zwar einen großen Funktionsumfang auf; in<br />

der Regel führt dies aber zu Unsicherheiten und dazu, das eigentlich<br />

nur eine relativ kleine Untermenge von den einzelnen Benutzern<br />

beherrscht wird.<br />

� Klare, kompakte Oberflächen, die auf die Bedürfnisse der Benutzer<br />

und ihrer Aufgabenstellungen zugeschnitten sind, sollten angestrebt<br />

werden.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 410


„Designers are not users“<br />

� Für einen Designer kann es schwer sein, sich in die Lage des<br />

Benutzers zu versetzen, da er mehr Erfahrung im Umgang mit dem<br />

Computer hat und er dadurch möglicherweise Probleme aus Sicht<br />

des Benutzer zu übersehen.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 411


Kein mentaler Overhead -<br />

kein "menschliches RAM"<br />

� „Gestalte die Bedienung so einfach wie möglich“<br />

Dialoge sollten für den Benutzer so einfach und „direkt“ wie möglich<br />

sein und so gut wie möglich die konkrete Aufgabe des Benutzers<br />

treffen, damit die Belastung des Benutzer zur Realisierung einer<br />

anwendungsspezifischen Aufgabe durch spezifische Dinge der<br />

Benutzungsoberfläche so wenig wie möglich überlagert wird (z.B.<br />

erlernen der Syntax und Semantik einer Kommandosprache).<br />

� Stichworte hierfür sind<br />

� direkte Manipulation, Point-and-Click und Drag&Drop<br />

� Die menschliche Informationsverarbeitung im Kurzzeitgedächtnis ist<br />

begrenzt; der Anwender sollte bei einem Fensterwechsel keine Werte<br />

behalten müssen. Faustregel: „Man kann sich an 7 +|- 2 Informationen<br />

erinnern“<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 412


„Die Sprache des Benutzers sprechen“<br />

� In der Benutzungsoberfläche sollten anwendungsspezifische Begriffe<br />

und nicht systemspezifischen Begriffe verwendet werden.<br />

� Einfache und natürliche Dialoge tragen zur einfachen Bedienung bei.<br />

� Auf den Wiedererkennungswert von vertrauten Icons/Symbolen<br />

setzen.<br />

� Die Wiederverwendung von parametrisierten Elementen ist<br />

wesentlicher Bestandteil von fensterorientierten Systemen (WIMP -<br />

Window, Icon, Menue, Pointing Device).<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 413


Kunden und Entwickler – Erwartungen und Umsetzungen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 414


Software-Ergonomie<br />

Usability-Überlegungen (I)<br />

� Eine zentrale Aufgabe in der Anwendungsentwicklung ist es, auf die<br />

speziellen Erwartungen, Anforderungen und Bedürfnisse der<br />

Anwender und insbesondere der Zielgruppe einzugehen. Dies<br />

bedeutet, dass das Programm „die Sprache“ des Benutzers sprechen<br />

sollte.<br />

� Den Aspekten der einfachen Bedienbarkeit und intuitiven<br />

Handhabung kommt bei der Planung/Konzeption der Mensch-<br />

Maschine-Schnittstelle eine wesentliche Rolle zu.<br />

� Es ist somit nicht verwunderlich, dass sich mit dieser kritischen<br />

Softwarekomponente nicht nur Softwareentwickler beschäftigen<br />

sondern auch (Software-)Ergonomen, Psychologen, und Designer.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 415


Software-Ergonomie<br />

Usability-Überlegungen (II)<br />

�� Eine schlechte und wenig durchdachte Benutzungsoberfläche kann<br />

einem guten Anwendungsprogramm mehr schaden als eine gute<br />

Benutzungsoberfläche einer schlechten Anwendung nutzen kann.<br />

� Neben der korrekten Anwendungssoftware ist die Mensch-<br />

Maschine-Schnittstelle mit entscheidend dafür,<br />

� wie gut das Softwareprodukt von den Benutzern akzeptiert und<br />

somit<br />

�� wie erfolgreich sich das Produkt am Markt entwickelt.<br />

� Die Entwicklung der Mensch-Maschine-Komponente in einem<br />

Programmsystem macht einen signifikanten Anteil des<br />

Entwicklungsaufwandes aus (i.d.R. mehr als 70%!).<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 416


Software-Ergonomie<br />

Usability-Überlegungen (III)<br />

� Neben (teilweise sehr umfangreichen) firmenspezifischen<br />

Guidelines/Style Guides, die Richtlinien darstellen, wie bestimmte<br />

Dialogelemente zu verwenden sind und wo diese Elemente innerhalb<br />

einer Applikation und applikationsübergreifend zu verwenden sind,<br />

haben sich auch einige „Grundregeln“ herauskristallisiert, die man<br />

generell beachten sollte:<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 417


Software-Ergonomie<br />

Usability-Überlegungen (IV)<br />

�� Auf Konsistenz achten: immer wiederkehrende Elemente<br />

� stehen an der gleichen Stelle (Layout),<br />

� haben immer das gleiche Aussehen (Design und Farbgebung) und<br />

die gleiche Bedeutung (Semantik)<br />

� das (mentale) Modell sollte konsistent sein; Metapher sollten<br />

durchgängig sein und auch zum Ausdruck gebracht werden<br />

�� Auf die strenge Trennung von Anwendungsfunktionalität und<br />

Komponenten der Benutzungsoberfläche achten;<br />

dies gewinnt mit der Komplexität/Umfang der Entwicklung an<br />

Bedeutung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 418


Software-Ergonomie<br />

Usability-Überlegungen (V)<br />

�� Feedback - Rückmeldungen aus der Anwendung<br />

Der Benutzer muss eine Reaktionen auf seine Aktionen erhalten<br />

(Mauscursor ändert sich, Button zeigt Zustand an, …)<br />

� Einfache und deutliche Elemente<br />

Short Cuts erlauben erfahrenen Benutzer , sich schnell im<br />

Programm zu bewegen;<br />

Abbruchmöglichkeiten vermindern die Angst, Fehler zu machen<br />

Bemerkung: Funktionen an Graphischen Oberflächen sind durchaus<br />

redundant, d.h. es gibt mehrere Möglichkeiten, eine Aufgabe zu lösen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 419


Software-Ergonomie<br />

Usability-Überlegungen (VI)<br />

�� Sinnvolle (Fehler-)Meldungen<br />

Fehlermeldungen müssen einfach und klar zu verstehen sein;<br />

sie sind für den Anwender und nicht für den Entwickler<br />

� Fehlervermeidung statt Fehlerbehebung<br />

Der Benutzer sollte keine ernsthaften Fehler machen können<br />

�� Die Benutzungsoberfläche führt, entlastet und bietet<br />

situationsorientierte (kontextsensitive) Hilfe an<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 420


Kaufverhalten bei tech. innovativen Produkten<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 421


An Innovation culture combines<br />

Dreamers who do<br />

(„Innovators“)<br />

Geoffrey Moore: Crossing the Chasm<br />

Folie aus einem Vortrag von Prof. G. Dueck, Chief Technologist , ibm<br />

Doers who dream<br />

(„Sponsors“)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 422


Crossing the Chasm (1/3)<br />

� Eine kleine Zahl von interessierten Techies „spielt“ schon sehr früh<br />

mit der neuen Technologie.<br />

� Dadurch werden die „Visionäre“ auf die Technologie aufmerksam;<br />

sie sehen darin kreative, neue Möglichkeiten, sich einen Wettbewerbsvorteil<br />

zu verschaffen (auch wenn die Technologie noch an<br />

Kinderkrankheiten leidet). Solche Visionäre sind in der Regel die<br />

ersten Kunden (First Mover) für den Anbieter der neuen Technologie.<br />

� Wenn die Technologie dann schon etwas ausgereifter ist - das Risiko<br />

also nicht mehr so groß erscheint und der Kundennutzen klarer zu<br />

Tage tritt -, dann interessiert sich auch die große Gruppe der<br />

„Pragmatiker“ dafür. Sie wollen i. a. einen in Geld messbaren Vorteil<br />

(schneller, billiger, bequemer, besser, …) mit der neuen Technologie<br />

erzielen (lazy user model).<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 423


Crossing the Chasm (2/3)<br />

� Wenn die ebenfalls große Gruppe der „Konservativen“ dann im Laufe<br />

der Zeit sieht, dass viele andere die Technologie mit Erfolg ein-setzen,<br />

springen auch sie auf den Zug auf, denn jetzt scheint das Risiko<br />

minimal und der Nutzen bewährt.<br />

� Die letzte Gruppe, die die neue Technologie dann aufnimmt, sind die<br />

„Nachzügler“. Siegreifen erst dann zu einer neuen Technologie, wenn<br />

die alte immer schwieriger erhältlich ist oder nur noch unter hohen<br />

Kosten aufrechterhalten werden kann.<br />

�� Geoffrey Moore hat untersucht, warum sich viele – auch Erfolg<br />

versprechende - technologische Ansätze am Markt nicht bewährt<br />

haben und wieder untergegangen sind. Er zeigt, dass es fundamentale<br />

Unterschiede zwischen den ersten Kunden, den „Visionären“ und der<br />

viel größeren Gruppe der „Early Majority“ des „Mainstreams“ gibt.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 424


Crossing the Chasm (2/3)<br />

� Diese Unterschiede sind verantwortlich für eine Kluft im „Technology<br />

Adoption Life Cycle“ (TALC), die Moore „Chasm“ nennt.<br />

� Es reicht nicht aus, die neue Technologie nur für die Visonäre zu<br />

vermarkten. Die Argumente müssen sich ändern und auf die<br />

Nutzergruppen zugeschnitten werden, um diese unsichtbare Kluft zu<br />

überbrücken. Andernfalls landen sie unweigerlich im „Tal des<br />

Misserfolgs“. Gerade die Anfangserfolge bei den „Early Adopters“<br />

machen eine notwendige radikale Strategieänderung so schwierig,<br />

denn diese Erfolge scheinen ja der Beweis für die Richtigkeit des<br />

eingeschlagenen Weges.<br />

� Es macht daher sehr viel Sinn, die Kundengruppen und deren<br />

Bedürfnisse sehr genau zu kennen.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 425


Die Sinus-Milieus® in Deutschland 2007<br />

� Länderspezifische Segmentation von Gesellschaften auf Grundlage von<br />

Wertorientierungen und Lebensstilen in 17 Nationen<br />

� Unterschiede in der Alltagswirklichkeit kennzeichnen den Menschen stärker als<br />

die Unterschiedlichkeit sozioökonomischer Lebensbedingungen.<br />

� Seine lebensweltliche Zugehörigkeit wird immer weniger von<br />

schichtspezifischen und demografischen Merkmalen gesteuert als von seinen<br />

Vorstellungen vom Leben, seinen alltagsästhetischen Leitbildern und<br />

Konsumstilen.<br />

� Von oben nach unten: Nach sozialer Lage in Schichten, auf der Grundlage von<br />

Bildung, Beruf und Einkommen<br />

� Von links nach rechts: Nach der Grundorientierung, in einem Spannungsbogen<br />

von traditionell bis postmodern<br />

� Oben sind die gesellschaftlichen Leitmilieus angesiedelt, am linken Rand die<br />

Traditionellen Milieus, in der Mitte die Mainstream Milieus und rechts die<br />

Hedonistischen Milieus.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 426


http://www.sinus-sociovision.de/<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 427


Sinus A12 (Konservative): 5%<br />

Das alte deutsche Bildungsbürgertum:<br />

konservative Kulturkritik, humanistisch geprägte Pflichtauffassung und gepflegte Umgangsformen<br />

Lebenswelt:<br />

Die Konservativen repräsentieren das alte deutsche Bildungsbürgertum. Sie pflegen die bewährten<br />

Traditionen, eine humanistisch geprägte Pflichtauffassung und gehobene Umgangsformen. Entsprechend<br />

leiden sie unter dem "Verfall der Werte und guten Sitten". Sie legen großen Wert auf Abgrenzung durch<br />

die Betonung ihrer gehobenen Stellung in der Gesellschaft. Heute sind viele im Ruhestand, nach einer<br />

erfolgreichen, verantwortungsbewussten Berufskarriere. Ihr Engagement richtet sich inzwischen - noch<br />

mehr als früher - auf ehrenamtliche Tätigkeiten.<br />

Familie und familiärer Zusammenhalt sind den Konservativen sehr wichtig. Vom Zeitgeist und dessen Folgen<br />

distanzieren sie sich kritisch. Sie interessieren sich für klassische Kunst und Kultur (Theater, Oper,<br />

Museen) und verfolgen besorgt das Zeitgeschehen in Politik, Gesellschaft und Wirtschaft.<br />

Da sie mit allem - zum Teil sehr gut - ausgestattet sind, genießen sie heute vor allem immaterielle Werte und<br />

kümmern sich um Wohlbefinden und Gesundheit. Wenn sie Anschaffungen vornehmen, dann sind es die<br />

besonderen Dinge wie wertvolles Porzellan, Echt-Schmuck, Kulturreisen oder ein (teures) Auto.<br />

Soziale Lage:<br />

Altersschwerpunkt ab 60 Jahre; meist Zwei-Personen-Haushalte<br />

Akademische Abschlüsse sind überrepräsentiert, aber auch Volksschulabschlüsse mit qualifizierter<br />

Berufsausbildung (Frauen)<br />

Hoher Anteil von Personen im Ruhestand; typische (ehemalige) Berufe: Höhere Angestellte und Beamte sowie<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Selbständige und freie Berufe<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Mittleres bis gehobenes Einkommensniveau, teilweise größere Vermögen<br />

© Sinus Sociovision 2007<br />

Seite 428


Sinus A23 (Traditionsverwurzelte): 14%<br />

Die Sicherheit und Ordnung liebende Kriegsgeneration:<br />

verwurzelt in der kleinbürgerlichen Welt bzw. in der traditionellen Arbeiterkultur Lebenswelt:<br />

Die Traditionsverwurzelten sind die sicherheits- und ordnungsliebende Kriegs- und<br />

Nachkriegsgeneration. Ihre Wurzeln haben sie entweder in der kleinbürgerlichen Welt oder in der<br />

traditionellen Arbeiterkultur. Sie verstehen sich als die Bewahrer der traditionellen Werte<br />

Pflichterfüllung, Disziplin, Bescheidenheit und Moral.<br />

Inzwischen sind die meisten Rentner oder Pensionäre, nach einem Arbeitsleben in der unteren Mitte<br />

der Gesellschaft (kleine Angestellte und Beamte, Arbeiter, Bauern).<br />

Sie setzen fort, was sie auch früher gelebt haben: die Pflege von Familien- und Nachbarschaftsbanden,<br />

die Suche nach Anerkennung im unmittelbaren sozialen Umfeld. Sich selbst in den Mittelpunkt<br />

stellen, Traditionelles und Bewährtes aufzugeben, kommt für sie nicht in Frage.<br />

Ihre Interessen kreisen eng um die eigenen vier Wände, die Familie und vor allem inzwischen um die<br />

eigene Gesundheit. Fernsehen, Basteln, Gartenarbeit, manchmal auch Ausflüge und Kaffeefahrten<br />

füllen die freie Zeit. Nach einem arbeitsreichen Leben genießen sie es, "sich auszuruhen".<br />

Die Traditionsverwurzelten sind sehr zurückhaltende Konsumenten. Ein Leben lang haben sie gespart<br />

und nur "Sinnvolles" und Notwendiges angeschafft. Auch heute halten sie ihr Geld zusammen und<br />

sind für sich selbst sehr sparsam. Kinder und Enkelkinder unterstützen sie dagegen gerne.<br />

Soziale Lage:<br />

Altersschwerpunkt in der Kriegs- und Nachkriegsgeneration (65 Jahre und älter);<br />

entsprechend hoher Frauenanteil<br />

Überwiegend Hauptschule mit abgeschlossener Berufsausbildung<br />

Hoher Anteil von Rentnern und Pensionären; früher: kleine Angestellte und Beamte, Arbeiter,<br />

Facharbeiter und Bauern<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Meist kleine bis mittlere Einkommen<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

© Sinus Sociovision 2007<br />

Seite 429


Sinus B1 (Etablierte): 10%<br />

Das selbstbewusste Establishment:<br />

Erfolgs-Ethik, Machbarkeitsdenken und ausgeprägte Exklusivitätsansprüche<br />

Lebenswelt:<br />

Die Etablierten sind die gebildete, gutsituierte und selbstbewusste Elite. Sie haben hohe<br />

Exklusivitätsansprüche und zeigen entsprechende Kennerschaft. Damit grenzen sie sich bewusst<br />

von anderen ab ("die feinen Unterschiede").<br />

Beruflicher Erfolg ist ihnen wichtig. Dabei verfolgen sie klare Karrierestrategien. Sie übernehmen<br />

Verantwortung und Führung, und sie sind sicher, ihre hohen Ziele zu erreichen.<br />

Sie haben eine pragmatische Lebensphilosophie, reagieren mit Flexibilität auf neue Situationen und<br />

engagieren sich in Vereinigungen, Verbänden und Clubs - nicht zuletzt, um auch soziale Ziele zu<br />

fördern.<br />

Kunst, Kultur und individuelle Reisen gehören zum Lebensgenuss der Etablierten. Andererseits<br />

beschäftigen sie sich auch nachhaltig mit Politik und Wirtschaft. Sie sind sehr aufgeschlossen<br />

gegenüber technologischem Fortschritt und den beruflichen wie privaten Vorteilen, die er bringt.<br />

Sie konsumieren edel und haben ein sicheres Gespür für das Besondere. Sie genießen den Luxus, den<br />

sie sich auf Grund ihrer privilegierten finanziellen Situation leisten können. Alles, was dem eigenen<br />

Well Being zuträglich ist, hat viel Raum in ihrer Lebensführung.<br />

Soziale Lage:<br />

Mittlere Altersgruppen ab 30 Jahre (Schwerpunkt: 40 bis 60 Jahre); meist verheiratet, Drei- und Mehr-<br />

Personenhaushalte<br />

Überdurchschnittlich hohes Bildungsniveau<br />

Viele leitende Angestellte, höhere Beamte sowie Selbständige, Unternehmer und Freiberufler<br />

Hohe und höchste Einkommensklassen <strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

© Sinus Sociovision 2007<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 430


Sinus AB2 (DDR-Nostalgische): 5%<br />

Die resignierten Wende-Verlierer:<br />

Festhalten an preußischen Tugenden und altsozialistischen Vorstellungen von Gerechtigkeit und<br />

Solidarität<br />

Lebenswelt:<br />

Die DDR-Nostalgischen (sie stellen fast ein Viertel der ostdeutschen Bevölkerung) sehen sich als<br />

Verlierer der Wende. Das führt zu einer gewissen Verklärung der Vergangenheit und Verbitterung<br />

gegenüber der Gegenwart.<br />

Früher waren sie oft Führungskader in Politik, Verwaltung, Wirtschaft, Kultur, heute haben sie einfache<br />

Berufe oder sind arbeitslos. Diese Situation verstärkt die Verbitterung und den Rückzug aus der<br />

"westlich" geprägten Welt.<br />

Sie führen ein - zum Teil demonstrativ - einfaches Leben, konzentriert auf Familie, gleichgesinnte<br />

Freunde und Vereine. Die Betonung der alten Werte des Sozialismus (Gerechtigkeit, Solidarität)<br />

paart sich mit Kritik am "Turbo-Kapitalismus''.<br />

Die Interessen und Freizeitaktivitäten der DDR-Nostalgischen konzentrieren sich auf Heimwerken,<br />

Renovieren, bescheidenes Modernisieren des Haushaltes, aber auch auf das Engagement in<br />

Vereinen und lokaler Politik.<br />

Prestigekonsum lehnen sie demonstrativ als westliche Unart ab. Geld geben sie nur für das<br />

Notwendigste aus. Dazu gehören Anschaffungen für Haus und Haushalt, die Basisausstattung mit<br />

technischen Geräten zum Heimwerken, moderne Haushaltsgeräte und Unterhaltungselektronik,<br />

manchmal auch ein Computer.<br />

Soziale Lage:<br />

Schwerpunkt bei den über 45jährigen<br />

Meist einfache bis mittlere Bildung; aber auch Hochschulabschlüsse sind leicht überrepräsentiert<br />

Früher häufig Führungskader in Partei, Verwaltung, Wirtschaft und Kultur; heute einfache Angestellte,<br />

Arbeiter / Facharbeiter oder arbeitslos <strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Kleine bis mittlere Einkommen (Doppelverdiener); hoher Anteil an Beziehern Prof. Dr.-Ing. von Altersübergangsgeld<br />

Hans-Peter Wiedling<br />

und Rente<br />

© Sinus Sociovision 2007<br />

Seite 431


Sinus B2 (Bügerliche Mitte): 15%<br />

Der statusorientierte moderne Mainstream:<br />

Streben nach beruflicher und sozialer Etablierung, nach gesicherten und harmonischen<br />

Verhältnissen<br />

Lebenswelt:<br />

Lebensziel der bürgerlichen Mitte ist es, in gut gesicherten, harmonischen Verhältnissen zu leben.<br />

Cocooning im gepflegten Ambiente, umgeben von gleichgesinnten und gleichsituierten Freunden<br />

prägt ihren Lebensrahmen.<br />

Sie zeigen Leistung und Zielstrebigkeit. Beruflicher Erfolg, eine gesicherte Position und die Etablierung<br />

in der Mitte der Gesellschaft sind ihnen wichtig. Manchmal sind sie geplagt von Abstiegsängsten.<br />

Sie wollen sich einen angemessenen Wohlstand erarbeiten, sich leisten können, worauf sie Lust haben.<br />

Dabei bleiben sie aber flexibel und realistisch.<br />

Ein angenehmes, komfortables Leben, Harmonie im familiären Umfeld und im Freundeskreis<br />

charakterisieren den Lebensstil der Bürgerlichen Mitte. Dazu gehört Gäste einladen, gemeinsames<br />

Kochen, Vereinsengagement, sportliche Betätigung in der Gruppe oder im Verein ebenso wie die<br />

intensive Beschäftigung mit den Kindern.<br />

Sie konsumieren gerne und mit Genuss, sind convenienceorientiert und haben ein ausgeprägtes<br />

Selbstbewusstsein als Verbraucher (Smart Shopper). Sie bevorzugen eine Mischung aus<br />

konventionell und modern, aus gediegen und repräsentativ. Sie investieren viel in die Ausstattung<br />

ihrer Wohnung / ihres Hauses, lassen dabei aber auch nicht ihr eigenes Outfit zu kurz kommen.<br />

Soziale Lage:<br />

Altersschwerpunkt: 30 bis 50 Jahre, oft Mehr-Personen-Haushalte, kinderfreundliches Milieu<br />

Qualifizierte mittlere Bildungsabschlüsse<br />

Einfache / mittlere Angestellte und Beamte; Facharbeiter<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Mittlere Einkommensklassen<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

© Sinus Sociovision 2007<br />

Seite 432


Sinus B3 (Konsum-Materialisten): 12%<br />

Die stark materialistisch geprägte Unterschicht:<br />

Anschluss halten an die Konsum-Standards der breiten Mitte als Kompensationsversuch sozialer<br />

Benachteiligungen<br />

Lebenswelt:<br />

Gerade wegen seiner sehr beschränkten finanziellen Mittel zeigt dieses Milieu einen ausgeprägten<br />

Konsum-Materialismus. Viele Milieuangehörige konzentrieren sich ganz auf das Hier und Jetzt, auf<br />

spontanen und prestigeträchtigen Konsum, um zu beweisen, dass sie mithalten können.<br />

Sie möchten als "normale Durchschnittsbürger" gelten, haben aber häufig das Gefühl, in der<br />

Gesellschaft benachteiligt zu sein. Ihre Wünsche von einem komfortablen Leben und ihre Träume<br />

vom plötzlichen Reichtum stehen oft im krassen Kontrast zur Realität.<br />

Ihre beruflichen Chancen sind häufig eingeschränkt durch mangelnde Ausbildung und ungünstige<br />

persönliche Rahmenbedingungen. Der Anteil der Arbeitslosen ist hoch.<br />

In ihrer Freizeit möchten sie Unterhaltung, Ablenkung, Action und Spaß. Ausgehen (Kneipen,<br />

Fußballveranstaltungen, Einkaufsbummel) ist ebenso beliebt wie zu Hause fernsehen, Videos<br />

ansehen, Videospiele, Musik und Radio hören.<br />

Wichtige Konsumziele sind für sie die Ausstattung mit moderner Unterhaltungselektronik<br />

(Stereoanlage, DVD-Player, Fernsehgerät, Handy), ein "repräsentatives" Auto, Urlaub (Kurzreisen,<br />

Besuch von Freizeitparks) und alles, was die eigene Erscheinung ins "rechte Licht" setzt<br />

(dekorative Kosmetik, Modeschmuck, Duftwässer).<br />

Soziale Lage:<br />

Breite Altersstreuung bis 60 Jahre<br />

Meist Volks-/ Hauptschulabschluss mit oder ohne Berufsausbildung<br />

Überdurchschnittlich viele Arbeiter / Facharbeiter <strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Untere Einkommensklassen<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Häufig soziale Benachteiligungen (Arbeitslosigkeit, Krankheit unvollständige Familien)<br />

© Sinus Sociovision 2007<br />

Seite 433


Sinus B12 (Postmaterielle): 10%<br />

Das aufgeklärte Nach-68er-Milieu:<br />

Liberale Grundhaltung, postmaterielle Werte und intellektuelle Interessen<br />

Lebenswelt:<br />

Die Postmateriellen sind überwiegend hochgebildet, kosmopolitisch und tolerant. Gewöhnt, in globalen<br />

Zusammenhängen zu denken, setzen sie sich kritisch mit den Auswirkungen von<br />

Übertechnisierung und Globalisierung auseinander. Höchster Wert ist die Lebensqualität des<br />

einzelnen.<br />

Sie haben großes Vertrauen in ihre eigenen Fähigkeiten und gehen souverän mit beruflichen<br />

Herausforderungen um. Sie wollen Erfolg im Beruf - aber nicht um jeden Preis.<br />

Ihre postmateriellen Ansprüche richten sich auf die Entfaltung ihrer individuellen Bedürfnisse und<br />

Neigungen, auf das Schaffen von Freiräumen für sich und auf mehr Zeitsouveränität.<br />

In hohem Maße sind sie interessiert an Literatur, Kunst und Kultur. Weiterbildung ist ein<br />

lebenslängliches Thema, weil sie sich mehr über Intellekt und Kreativität definieren als über Besitz<br />

und Konsum.<br />

Ihr Lebensstil ist umwelt- und gesundheitsbewusst (Balance zwischen Körper, Geist und Seele). Sie<br />

schätzen subtile Genüsse, die durchaus einen hohen Preis haben dürfen. Überflüssigen Konsum<br />

lehnen sie aber ab. Nach dem Motto "weniger ist mehr" kaufen sie selektiv und mit hoher<br />

Kennerschaft.<br />

Soziale Lage:<br />

Breites Altersspektrum - von Anfang 20 bis zur Generation der "jungen Alten"; häufig größere<br />

Haushalte mit Kindern<br />

Hohe bis höchste Formalbildung (Abitur, Studium)<br />

Qualifizierte und leitende Angestellte und Beamte, <strong>Fachbereich</strong> Freiberufler, <strong>Informatik</strong>: Studenten 3. Semester Bachelor Studiengang<br />

Hohes Einkommensniveau<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

© Sinus Sociovision 2007<br />

Seite 434


Sinus C12 (Moderne Performer): 10%<br />

Die junge, unkonventionelle Leistungselite:<br />

intensives Leben - beruflich und privat, Multi-Optionalität, Flexibilität und Multimedia-Begeisterung<br />

Lebenswelt:<br />

Die Modernen Performer sind die junge, unkonventionelle Leistungselite. Sie wollen ein intensives<br />

Leben, in dem sie ihre Multioptionalität und Flexibilität ausleben und ihre beruflichen wie<br />

sportlichen Leistungsgrenzen erfahren können.<br />

Ihr ausgeprägter Ehrgeiz richtet sich auf "das eigene Ding", oft die eigene Selbständigkeit (Start-ups).<br />

Dabei haben sie nicht nur den materiellen Erfolg im Auge. Treibendes Motiv ist ebenso, zu<br />

experimentieren, spontan Chancen zu nutzen, wenn sie sich auftun und die eigenen Fähigkeiten zu<br />

erproben.<br />

Die Modernen Performer sind mit Multimedia groß geworden. Die modernen<br />

Kommunikationstechnologien nutzen sie intensiv und lustvoll, im beruflichen wie im privaten<br />

Leben.<br />

Neben der Multimedia-Begeisterung zeigen sie großes Interesse an sportlicher Betätigung und<br />

Outdoor-Aktivitäten (Kino, Kneipe, Kunst).<br />

Ihr Konsumstil ist geprägt durch Lust auf das Besondere, das Integrieren von Einflüssen aus anderen<br />

Kulturen und Szenen. Anspruchvolles "Multikulti" ist die Devise. Dafür geben sie auch viel Geld<br />

aus.<br />

Soziale Lage:<br />

Jüngstes Milieu in Deutschland, Altersschwerpunkt unter 30 Jahre<br />

Hohes Bildungsniveau; (noch) viele Schüler und Studenten, zum Teil aber mit Jobs<br />

Unter den Berufstätigen hoher Anteil (kleinerer) Selbständiger<br />

und Freiberufler (Start-ups), sowie qualifizierte <strong>Fachbereich</strong> und leitende <strong>Informatik</strong>: Angestellte 3. Semester Bachelor Studiengang<br />

Hohes Haushaltsnettoeinkommen (gutsituierte Elternhäuser); bei den Berufstätigen Prof. Dr.-Ing. gehobenes Hans-Peter Wiedling<br />

eigenes Einkommen<br />

© Sinus Sociovision 2007<br />

Seite 435


Sinus C2 (Experimentalisten): 8%<br />

Die individualistische neue Bohème:<br />

Ungehinderte Spontaneität, Leben in Widersprüchen, Selbstverständnis als Lifestyle-Avantgarde<br />

Lebenswelt:<br />

Die Experimentalisten haben große Lust am Leben und Experimentieren. Sie sind tolerant und offen<br />

gegenüber unter-schiedlichsten Lebensstilen, Szenen und Kulturen. Gleichzeitig lehnen sie Zwänge,<br />

Routinen und Rollenvorgaben ab. Vielmehr leben sie lustvoll unterschiedliche Rollen und auch<br />

Widersprüche aus (Lifestyle-Avantgarde, neue Bohème).<br />

Weniger wichtig sind ihnen materieller Erfolg, Status und Karriere. Ihre Ablehnung, sich "lebenslänglich"<br />

festzulegen, führt oft zu ungewöhnlichen Patchwork-Biografien und -Karrieren.<br />

Die Experimentalisten sind mit Multimedia groß geworden und nutzen intensiv Online-Angebote, Videound<br />

Computerspiele. Sie engagieren sich aber auch für gesellschaftliche Randgruppen, betreiben<br />

Esoterik, machen mentales Training und gehen kreativen Tätigkeiten nach. Ihr Hauptinteresse richtet<br />

sich auf Musik, Kunst, Kultur, auf einschlägige Filme und Bücher. Sie haben ein großes Bedürfnis nach<br />

Kommunikation und Unterhaltung, sind ständig in Bewegung und dort zu finden, wo etwas<br />

Spannendes, Neues los ist.<br />

Die Experimentalisten geben ihr Geld gerne für Ungewöhnliches, für Dinge abseits des Mainstreams aus.<br />

Spontan kaufen sie, was ihnen ins Auge fällt oder in die Nase sticht. Zudem reizen sie moderne<br />

Unterhaltungselektronik und vielfältige Outdoor-Aktivitäten (Raves, Techno-Events, Rock- und Pop-<br />

Konzerte, Disco, Szene-Lokale, Extremsportarten).<br />

Soziale Lage:<br />

Junges Milieu, Altersschwerpunkt unter 30 Jahre; viele Singles<br />

Gehobene Bildungsabschlüsse; viele Auszubildende, Schüler und Studenten<br />

(Mittlere) Angestellte, (kleinere) Selbständige und <strong>Fachbereich</strong> Freiberufler; <strong>Informatik</strong>: auch Arbeiter 3. Semester (Jobber) Bachelor Studiengang<br />

Vergleichsweise hoher Anteil von Personen ohne eigenes Einkommen Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Haushaltsnettoeinkommen im Durchschnitt (gutsituierte Elternhäuser)<br />

© Sinus Sociovision 2007<br />

Seite 436


Sinus BC3 (Hedonisten): 11%<br />

Die spaßorientierte moderne Unterschicht /untere Mittelschicht:<br />

Verweigerung von Konventionen und Verhaltenserwartungen der Leistungsgesellschaft<br />

Lebenswelt:<br />

Die Hedonisten sind die spaßorientierte untere Mittel- bis Unterschicht, immer auf der Suche nach Fun<br />

und Action, Unterhaltung und Bewegung (on the road). Nur nicht sein wie "die Spießer".<br />

Gleichzeitig haben sie oft Träume von einem geordneten Leben mit Familie, geregeltem<br />

Einkommen und schönem Auto / Motorrad.<br />

Bezogen auf den Beruf führen viele eine Art Doppel-Leben, angepasst an den Berufsalltag, im<br />

Gegensatz zum hedonistischen Lebensstil in der Freizeit. Trotz und auf Grund dieser partiellen<br />

Anpassung haben sie häufig aggressive Underdog-Gefühle gegenüber ihrer (Arbeits-) Umwelt.<br />

Die Hedonisten leben ganz im Hier und Jetzt, möchten sich wenig Gedanken um die Zukunft machen.<br />

Dabei zeigen sie Spaß an der Provokation der "Spießer" und der Identifikation mit "krassen"<br />

Szenen, Clubs und Fangemeinden.<br />

In besonderem Maße interessieren sie sich für Fernsehen, Video, Musik, Computerspiele, Sport<br />

(Fußball, Squash), Kino-, Disco- und Kneipenbesuche.<br />

Sie konsumieren gern und viel - soweit das ihr limitiertes Budget zulässt. Gemäß ihrem ausgeprägten<br />

Unterhaltungsbedürfnis interessieren sie sich für Produkte wie Stereo- und HiFi-Anlagen,<br />

Multimedia-Ausstattung, Videos, CDs, aber auch für "Klamotten", Modeschmuck, Uhren, Kosmetik,<br />

Duftwässer, Sportausstattung und -bekleidung, und natürlich Autos und Motorräder.<br />

Soziale Lage:<br />

Jüngere und mittlere Altersgruppen bis 50 Jahre; Schwerpunkt unter 30 Jahre<br />

Einfache bis mittlere Formalbildung - relativ oft ohne abgeschlossene Berufsausbildung<br />

Einfache Angestellte und Arbeiter; viele Schüler <strong>Fachbereich</strong> und Auszubildende <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Vergleichsweise großer Anteil von Personen ohne eigenes Einkommen; Prof. keine Dr.-Ing. erkennbaren Hans-Peter Wiedling<br />

Schwerpunkte <strong>beim</strong> Haushaltseinkommen<br />

© Sinus Sociovision 2007<br />

Seite 437


Analysephase<br />

� Benutzer in Bezug auf ihren Umgang mit dem System (z.B., durch<br />

Beobachtung und/oder Interviews) erfassen und beschreiben.<br />

� Für jeden Gruppe von Benutzern ein Profil erstellen, welches<br />

unterschiedliche Aspekte (Verhalten, demographischer Hintergrund).<br />

berücksichtigt.<br />

� Ziele und Einstellungen der Benutzer erarbeiten.<br />

� Arbeitsabläufe und Arbeitskontext freilegen und beschreiben.<br />

�� Typische Benutzerszenarien herausarbeiten.<br />

� Welche Software wird eingesetzt? Wie wird die Software eingesetzt?<br />

Wofür wird die Software eingesetzt?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 438


Usability Engineering Lifecycle<br />

1. Benutzer und seine Bedürfnisse verstehen lernen<br />

2. Gebrauchstauglichkeit vergleichen und bewerten<br />

3. Ziele für das Design festlegen<br />

4. Iteratives Designprozess:<br />

(a) Prototyping<br />

(b) Usability Evaluation (Inspektion und/oder Tests)<br />

5. Nachfolgende Schritte (Verbesserungen, Erweiterungen)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 439


Einen Eindruck von den Benutzern verschaffen<br />

� Bedürfnisse, Wünsche, Ziele, Aufgaben,<br />

Hintergründe/Rahmenbedingungen<br />

� erfassen und<br />

� visualisieren<br />

� Einsetzbare Techniken:<br />

� Persona beschreiben<br />

�� Moodboard einsetzen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 440


Persona – Rollen/Stereotypen<br />

� Mit der Beschreibung potentieller Benutzer und ihren Eigenschaften kann<br />

man ein lebendiges Bild von den Zielgruppen machen. Es entsteht ein<br />

Verständnis und ein erster Zugang zur Entwicklung realistischer<br />

Nutzungsszenarien (Tipp: http://www.usability.gov/).<br />

� Diese können dann für die Entwicklung und Prüfung von Produktentwicklungen<br />

genutzt werden Eine Form der Benutzerbeschreibung ist die<br />

Aufbereitung als "Persona". Dabei wird eine Art Steckbrief verfasst, der<br />

neben Alter, Geschlecht, Ausbildung, Vorlieben, Hobbys, Charaktereigenschaften<br />

sogar einen Namen oder "Nickname" eines repräsentativen<br />

Zielgruppenvertreters beinhaltet<br />

Rollen helfen,<br />

� sich repräsentative Bilder von den Benutzergruppen zu machen,<br />

� die Produktqualität zu verbessern und<br />

� Entwicklungszeiten zu verkürzen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 441


Rollen, Stereotypen<br />

� „Benutzer“ sind unspezifisch - sie müssen für alles und jedes<br />

herhalten!<br />

� Designs für den „Durchschnittsbenutzer“ führen zu Ergebnissen,<br />

welche niemanden wirklich beeindrucken.<br />

� Verweisen Sie nicht auf den „User“,<br />

verweisen Sie auf spezifische Rollen;<br />

sie sind die Prototypen für tatsächliche Nutzer.<br />

� Unterscheiden Sie unterschiedliche Benutzer(-gruppen) und<br />

designen Sie für diese!<br />

� Persona erzeugen Betroffenheit und geben den Personen ein Gesicht<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 442


Typische Rollen/Stereotypen<br />

� Ein geeigneter Stereotyp ist<br />

�� nicht durchschnittlich, aber typisch und glaubwürdig, und<br />

� ein Eindruck eines Stereotyps ergibt sich etwa aufgrund einer Befragung<br />

(Interviews);<br />

Stereotypen können markante Charakteristiken ausdrücken;<br />

andere, die nicht so scharf abgegrenzt werden, können die Anwendung<br />

dann ebenso nutzen.<br />

� Legen Sie die Stereotypen möglichst exakt fest:<br />

� Vergeben Sie Name und Alter;<br />

� Beschreiben Sie typisches Verhalten<br />

(gerade auch im Zusammenhang mit der zu entwickelnden Applikation);<br />

� Geben Sie der beschriebenen Person ein Gesicht (verwenden Sie ein<br />

Bild);<br />

� Definieren Sie Ziele für jede Rolle;<br />

� Definieren Sie Szenarien für jede Rolle.<br />

� Diese sollten gerade den dann folgenden Umsetzungen stand halten.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 443


Beispiel Persona - Buchhandlung<br />

� Beschreibung typischer Benutzer für unterschiedliche Benutzergruppen<br />

Name: Udo Fischer<br />

Alter: 49 Jahre, Single<br />

Kategorie:<br />

Liest gelegentlich im Urlaub; ist an Reiseberichten<br />

interessiert; kocht gerne.<br />

Name: Konrad Naumann<br />

Alter: 72 Jahre<br />

Kategorie: Vielleser, 2 Enkelkinder<br />

Liest viel und regelmäßig ist an einem breiten Angebot an<br />

Romanen und Biographien interessiert. Verschenkt auch gerne<br />

ein Buch an seine beiden Enkelkinder Jasmin und Kai.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 444


Moodboard – thematische Stimmungsbilder<br />

� Gespaltene Gesellschaft (http://www.sinus-sociovision.de/)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 445


Moodboard – thematische Stimmungsbilder<br />

� Moodboards sind meist Collagen aus Bildern unterschiedlicher Art,<br />

Schlüsselwörtern und Farbstimmungen.<br />

� Sie bieten gestalterische Orientierung, und sie sind hilfreich bei der<br />

Visualisierung von Produktwelten oder Zielgruppenassoziationen.<br />

Bildcollagen, Farbharmonien und Schlüsselworten stellen<br />

atmosphärische Eindrücke her, die eine bestimmte Zielgruppe, ein<br />

zu gestaltendes Produkt bzw. das Umfeld, für dass das Produkt oder<br />

eine Dienstleistung gestaltet werden soll, charakterisieren.<br />

�� Ziel ist die Visualisierung einer Grundstimmung, in die die<br />

Applikation oder der Service passen soll. Häufig können Farbklimata<br />

direkt aus dem Moodboard generiert werden.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 446


Ergonomische Normen<br />

� haben immer nur Richtliniencharakter<br />

� ergonomischer und technischer Gestaltungsspielraum<br />

� keine Normung eines Softwareproduktes<br />

� es gibt nicht "den" Benutzer;<br />

Benutzergruppen müssen individuell charakterisiert werden<br />

Standards<br />

vs.<br />

Innovation<br />

� Rahmenbedingungen (z.B. Arbeitsorganisation, Arbeitsumgebung) sind<br />

unterschiedlich<br />

� sollen keine bestimmte Implementierung nahe legen<br />

notwendig,<br />

aber nicht<br />

hinreichend<br />

� enthalten meist nur Mindestanforderungen<br />

� spiegeln lediglich den gegenwärtigen (bzw. damaligen) Stand des<br />

Wissens wider – noch sehr lückenhaft<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 447


Normen zur (Software-)Ergonomie<br />

� DIN EN ISO 9241: Ergonomische Anforderungen für Bürotätigkeiten<br />

mit Bildschirmgeräten<br />

� Hardware und Arbeitsplatzgestaltung<br />

- 1: Allgemeine Einführung<br />

- 4: Anforderungen an die Tastatur<br />

- 5: Anforderungen an Arbeitsplatzgestaltung und Körperhaltung<br />

- 6: Leitsätze für die Arbeitsumgebung<br />

http://www.din.de<br />

- 7: Anforderungen an visuelle Anzeigen bezüglich Reflexionen<br />

- 8: Anforderungen an Farbdarstellungen<br />

- 9: Anforderungen an Eingabemittel, ausgenommen Tastaturen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 448


Normen zur Software-Ergonomie<br />

� Fortsetzung DIN EN ISO 9241<br />

� Aussagen zur Softwareergonomie<br />

- 10: Grundsätze der Dialoggestaltung<br />

- 11: Richtlinien zur Gebrauchstauglichkeit<br />

- 12: Informationsdarstellung<br />

- 13: Benutzerführung<br />

- 14: Dialogführung über Menüs<br />

- 15: Dialogführung über Kommandosprachen<br />

- 16: Dialogführung über direkte Manipulation<br />

- 17: Dialogführung über Bildschirmformulare<br />

� DIN EN ISO 13407<br />

Benutzer-orientierte Gestaltung interaktiver Systeme<br />

enthalten die<br />

folgenden<br />

7 Prinzipien<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 449


Entwurfs- und Gestaltungsprinzipien<br />

� Aufgabenangemessenheit<br />

�� Selbstbeschreibungsfähigkeit<br />

� Steuerbarkeit<br />

� Erwartungskonformität<br />

� Fehlertoleranz<br />

� Individualisierbarkeit<br />

� Erlernbarkeit<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 450


Aufgabenangemessenheit (I)<br />

� Direktheit: kurze Wege zur Information / Funktion<br />

�� mehrere Dialogebenen �� Karteireiter �� Assistenten<br />

� geschachtelte Pulldown-Menüs<br />

� Anzahl Mausklicks, Weglänge zur Position,<br />

(häufige) Wechsel zwischen Tastatur und Maus<br />

� flexible + schnelle Navigation: Querverweise (Orientierung?!)<br />

� Gewichtung: häufiges einfach, seltenes aufwändiger<br />

�� Nachrangiges erst auf zusätzlichen Knopfdruck<br />

� keine unnötigen Informationen anzeigen<br />

� Einfachheit statt Featuritis<br />

� nicht Benötigtes muss der Benutzer gedanklich herausfiltern<br />

� KEIN menschliches RAM<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 451


Aufgabenangemessenheit (II)<br />

� Effizienz, Antwortzeiten, sinnvolle Vorgabewerte<br />

� am schnellsten ist eine vermiedene Eingabe<br />

� Unterstützung für wiederkehrende Aufgaben<br />

� Formatierung übertragen, Makro(-recorder), Tastatursteuerung<br />

� Unterstützung gängiger Arbeitsabläufe<br />

� Bedienfolgen, Assistenten (Wizards)<br />

� Workflow<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 452


Selbstbeschreibungsfähigkeit (I)<br />

Systemzustand muss auf einen Blick erkennbar sein<br />

� Wo bin ich ? Ort<br />

� momentaner Aufenthaltsort im System<br />

� Was kann ich hier tun ? Modus<br />

� zur Verfügung stehende Operationen<br />

� Wie kam ich hierher ? Weg<br />

� Vorgeschichte, Kontext<br />

� Wohin kann ich gehen ? Weg<br />

� Ziel eines Buttons (Verweises) soll erkennbar sein<br />

nicht zu<br />

verwechseln mit<br />

Dokumentation<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 453


Selbstbeschreibungsfähigkeit (II)<br />

� aktuellen Zustand und Kontext darstellen<br />

� Kontextinformationen (z.B. Verzeichnispfad bei Datei öffnen)<br />

� Statusbar/Statusanzeige<br />

� aktuelle Möglichkeiten zeigen<br />

� Bedienelemente inaktiv machen: besserer Überblick<br />

� Bedienelemente verbergen: aufgeräumteres Design<br />

� visuell direkt erkennbare sensitive Bereiche<br />

�� nicht erst durch "Scannen" (Webseiten ����, ����, Adventure Games ☺)<br />

� Reaktion / Rückkopplung / Feedback<br />

� Tasten(Buttons) lassen sich "drücken"<br />

� bereichs-/objektabhängig veränderlicher Mauscursor<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 454


Selbstbeschreibungsfähigkeit (III)<br />

� keine versteckten Funktionen / Tastaturkürzel<br />

� alle Tastaturkürzel in Menüs aufführen;<br />

eine Seite in der Dokumentation genügt nicht<br />

� Icons mit Tooltips beschriften<br />

� Information über länger dauernde Abläufe<br />

� Sanduhr, Fortschrittsanzeige, Zwischenergebnisse<br />

� Ablauf abbrechbar (und umkehrbar)<br />

� Anwender- und problemkompatible Terminologie<br />

� Begriffe, Befehle, Fehlermeldungen<br />

� Begriffe aus Anwendungsdomäne aufgreifen und verwenden<br />

(wie reden künftige Benutzer über ihre Arbeit ?)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 455


Steuerbarkeit<br />

� kein "Eigenleben" des Systems<br />

Benutzer agiert, System reagiert<br />

� beenden ohne "wollen Sie wirklich ?"<br />

� freie Eingabereihenfolge<br />

� auch bei Validierung von Eingabewerten<br />

(Validierung auf Fensterebene, nicht auf Elementebene)<br />

� mehrstufige Rückgängig- (Undo-) Funktion<br />

� dafür muss man etwas tun!<br />

�� Dialogfolgen und längere Abläufe jederzeit abbrechbar und<br />

umkehrbar<br />

� dem Arbeitstempo angepasste Steuerungsformen<br />

� Menü � Toolbar � Tastatur<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 456


Erwartungskonformität (I)<br />

� im Widerspruch zu Originalität und Innovation ?!<br />

� es kann auch schlechter werden ...<br />

� plattformspezifisches Standardverhalten (Look&Feel)<br />

� definiert in Style Guides<br />

� gewohnt, aber leider nicht immer optimal<br />

� besonders kritisch, weil unterbewusst: Tastatur + Klickverhalten<br />

� Erwartungen aus der Anwendungsdomäne erfassen<br />

�� nicht immer "logisch", historisch gewachsen<br />

� oft unbewusst (Interview und Fragebogen hilft nicht)<br />

� Beispiel: Gehwegplanung via Trampelpfad auf Gras<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 457


Erwartungskonformität (II)<br />

� Wiedererkennbarkeit und Konsistenz<br />

� Einsatz von Steuerelementen für typische Aufgaben<br />

• Checkbox für einzelnen Boolean (schließt kein Fenster!)<br />

• Radiobuttons als Gruppe gegenseitig auslösend<br />

� Standarddialoge verwenden<br />

• Datei öffnen/speichern, Farbauswahl,<br />

Schriftauswahl, Seite einrichten, Drucken<br />

�� Mauszeiger<br />

� schlechte Beispiele<br />

� Strg+Alt+Del zum Anmelden<br />

� Start � Beenden<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 458


Fehlertoleranz<br />

Entwickler konzentrieren sich lieber<br />

auf die "eigentliche" Funktion<br />

� "Urängste" etwas (am Computer) verkehrt zu machen<br />

� vertrauensbildende Maßnahmen erforderlich � Gefühl<br />

� Einarbeitung durch Entdeckungsreise ermöglichen<br />

� Vorbeugung: Bedienelemente deaktivieren<br />

� Rückfrage/Warnung bei "gefährlicher" Aktion<br />

� Vorsicht: viele lesen nicht, sondern nehmen unbesehen Default<br />

� Möglichkeiten zur Fehlerbehebung vorsehen<br />

�� Rückgängig/Undo, Abbrechen, Papierkorb<br />

Zustandsanzeige<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 459


Individualisierbarkeit<br />

� Anpassung an<br />

� persönliche Benutzungshäufigkeit<br />

� Gewohnheiten aus anderen Anwendungen<br />

� persönliches Systemumfeld<br />

� konfigurierbare Toolbars und Menüs<br />

kein Ersatz für<br />

sorgfältig abgestimmte<br />

Grundeinstellung !<br />

� eigene Teilmenge definieren; eigene Funktionen als Makros<br />

� Favoriten, Last Used, Most Used<br />

�� Zeitabhängigkeiten<br />

Anpassung<br />

macht<br />

Arbeit<br />

konfigurierbare Fokussteuerung<br />

� Erscheinen von Tooltips, Doppelklick, Repeat-Funktion<br />

� individuelle Einstellungen sichern und "mitnehmen"<br />

� auf anderen Rechner oder bei SW-Upgrade<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 460


Erlernbarkeit<br />

� damit Einsteiger zu Fortgeschrittenen und Profis werden<br />

� ausführliche Hinweisdialoge für Einsteiger<br />

� mit Checkbox "Dialog künftig nicht mehr anzeigen"<br />

� Tooltips für Icons und Buttons<br />

� viele Bilder und Begriffe müssen erst gelernt werden<br />

� Statuszeilentexte für Eingabefelder<br />

�� Tooltip würde Eingabefeld verdecken<br />

� kontextabhängige Hilfe für ausführlichere Erklärungen<br />

� Guided Tour vermittelt Arbeitsabläufe<br />

� kann man das Problem visualisieren?<br />

Bei (nicht vor)<br />

der Arbeit<br />

lernen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 461


Benutzerzentriertes Design - Kriterien<br />

� Lernaufwand:<br />

Wie lange benötigt ein typischer Benutzer, um die Durchführung<br />

einer definierten Aufgabe zu lernen?<br />

� Arbeitsgeschwindigkeit:<br />

Wie schnell lassen sich typische Aufgaben von typischen<br />

Benutzern ausführen<br />

� Fehlerrate:<br />

Wie viele und welche Fehler treten bei der Durchführung der Aufgabe auf?<br />

�� Erinnerungsvermögen:<br />

Was und wie viel behalten Benutzer in ihrer Erinnerung bezüglich<br />

Aufgaben über einen definierten Zeitraum hinweg?<br />

� Joy-of-Use/(subjektive) Zufriedenheit:<br />

Wie empfindet der Benutzer persönlich die Arbeit mit einem System?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 462


Usability Inspection - Ziele<br />

� Usability Inspection wird durch geführt, um gezielt Probleme auf zu<br />

spühren,<br />

� die gravierend die Handhabbarkeit behindern oder<br />

� leicht beseitigt werden können.<br />

� Dabei werden die folgenden Fragen beantwortet:<br />

� Welche Bedienhandlungen erfordern einen hohen Lernaufwand (was<br />

erschwert das Lernen)?<br />

� Welche Fehler entstehen leicht?<br />

�� Welche Fehler haben gravierende Folgen?<br />

� Welche Bedienelemente sind ungünstig gestaltet<br />

(unübliche Beschriftung, oder grafische Darstellung, mangelhafte<br />

Strukturierung von Dialogen)?<br />

� Welche Systemnachrichten sind unangemessen formuliert oder nicht<br />

aussagekräftig?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 463


Usability Test - Voraussetzung<br />

� Festlegung des Testgegenstandes (hier unser Prototyp)<br />

� Tester, die den Test vorbereiten, durchführen und auswerten;<br />

es ist besser, dabei nicht (nur) auf Entwickler zu setzen!<br />

� Testpersonen<br />

Festlegung der teilnehmenden Personen (wie viele und welche) und<br />

Erstellung eines Zeitplanes<br />

� Testumgebung<br />

Die Tests dürfen soweit möglich nicht gestört werden und<br />

müssen wiederholt werden können (� Usability Lab)<br />

�� Testkritierien (Definition von Schwerpunkten):<br />

Insbesondere bei komplexen Systemen wird selten versucht, alle<br />

denkbaren Aktionen zu überprüfen.<br />

Typisch ist, dass die Inspektion anhand von Szenarien erfolgt.<br />

Es müssen messbare und vergleichbare Daten entstehen!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 464


Durchführung 1/4<br />

Effizienz der Interaktion:<br />

� Wie lange dauert die Durchführung einer Aufgabe?<br />

� Wie viele Aufgaben können in einer vorgegeben Zeit durchgeführt<br />

werden?<br />

� Welche Antwortzeiten brauchen die Testpersonen?<br />

� Welche Aktionen treten besonders häufig auf?<br />

� Wie häufig treten sehr ineffiziente Interaktionen auf?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 465


Durchführung 2/4<br />

Auftreten von Fehlern:<br />

� Wie viele Aktionen waren erfolgreich/fehlerhaft?<br />

� Welche Fehler treten besonders häufig auf?<br />

� Weil lange dauert die Behebung von Fehlern?<br />

� Wie viele positive/negative Kommentare werden geäußert?<br />

� Wie groß ist der Anteil der Benutzer, der eine Aufgabe (richtig/schnell<br />

genug/auf optimalem Weg) durchgeführt hat?<br />

�� Wie viele Kommandos (von allen möglichen) wurden genutzt?<br />

� Wie oft und wie lange wurden Anleitungen oder andere Hilfsmittel<br />

studiert?<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 466


Durchführung 3/4<br />

Erlernbarkeit:<br />

� Wie lange braucht ein Anwender,<br />

um die Durchführung einer Aufgabe zu lernen?<br />

� Wie ist die Vergessenkurve für die Anwendung nach einer<br />

bestimmten Zeit (Tagen, Wochen, Monaten)?<br />

Subjektive Zufriedenheit sollte zudem erfragt und dokumentiert werden<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 467


Durchführung 4/4<br />

Bemerkungen:<br />

Messgrößen:<br />

� Strecke: Welche Strecke wird mit der Maus zurückgelegt wird?<br />

� Zeit: Wie lange dauert es, um eine Aufgabe zu lösen<br />

� Anzahl: Wie viele Klicks werden benötigt, um eine Aufgabe zu lösen?<br />

Auch kleine und mittelgroße Projekte können erheblich von<br />

Evaluationstests profitieren!<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 468


Usability Test im Rahmen des Praktikums<br />

� Usability Test aktiv mit definiertem Aufwand einsetzen<br />

� Tester und Testgegenstand (Getestete) festlegen<br />

� Konzept & Entwurf formal überprüfen<br />

Szenario, Use Case, Screen Diagramme, Workflow, Dokumentation/javadoc<br />

� Applikationsspezifische Merkmale überprüfen<br />

Persistenz, Abbruchmöglichkeiten, Verknüpfung mit Anwendungsobjekten,<br />

Unterstützung versch. Benutzergruppen<br />

�� GUI<br />

Übersichtlichkeit, Benutzerführung, Konsistenz, Erwartungskonformität,<br />

Dynamisches Layout, komplexe Komponenten, …<br />

� Besonderheiten<br />

Freier Kommentar<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 469


Beispiele:<br />

�Direkte �Direkte Manipulation (Drag&Drop)<br />

�Auto-Ergänzung<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling


Ziel: intuitive, problemorientierte Bedienung<br />

Beispiele:<br />

�� Ballerspiel<br />

Meist aufwändiger<br />

�<br />

�<br />

Drag&Drop im Windows Explorer<br />

Textblock verschieben in Textverarbeitung<br />

zu programmieren<br />

als Menüs+Dialoge!<br />

� Größenänderung und Platzierung in Zeichenwerkzeugen<br />

� Pinsel, Radierer etc. in Malprogrammen<br />

� Veranstaltung verschieben im Stundenplan<br />

� Verschieben einer Datei auf eine Fläche: Inhalt anzeigen/Datei öffnen<br />

� i.d.R. mit der Maus; feinmotorisch anspruchsvoll<br />

� "Feinarbeit" bei Bedarf mit Pfeil-Tasten<br />

� Manipulation und Visualisierung hängen eng zusammen<br />

(� dynamische Interaktion)<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 471


Drag&Drop<br />

� Wie der Entwurf eines (größeren) Programms zunächst erst konzipiert/geplant<br />

werden muss genauso ist es notwendig komplexe/zusammengesetzte Dialoge<br />

zu modellieren.<br />

� Besonders geeignet zur Dialogmodellierung sind Zustandsdiagramme bzw. -<br />

graphen. Dabei können die einzelnen Programm- bzw. Dialogzustände als<br />

Knoten beschrieben werden, und alle Übergänge werden als Kanten<br />

dargestellt, die durch Ereignisse ausgelöst werden.<br />

Für eine Drag&Drop-Interaktion bedeutet das:<br />

� Sobald ein Objekt ausgewählt wurde und der Mausknopf gedrückt bleibt, kann<br />

das Objekt verschoben werden. Wird der Mausknopf wieder losgelassen, soll<br />

der Inhalt des Objektes (=Datei) dargestellt werden.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 472


Zustandsdiagramme<br />

� Die unterschiedlichen Zustände<br />

und Übergänge können<br />

wie folgt beschrieben werden<br />

(weitere Übergänge sind<br />

vorstellbar; sie werden aber<br />

nicht benötigt):<br />

Objekt bewegen<br />

z1 z2 z3<br />

Objekt auswählen<br />

Objekt im Ziel loslassen<br />

Zustand Ereignis Folgezustand: Aktionen<br />

z1 (start) Maustaste wird gedrückt und<br />

Objekt ausgewählt<br />

z2: Objekt ausgewählt<br />

kein Objekt ausgewählt z1<br />

z2 Objekt bewegen<br />

Objekt im Ziel loslassen<br />

z2: neue Position setzen; neu zeichnen<br />

z3 Objekt im Ziel z3: anwendungsspezifische Aktion:<br />

Datei lesen, ..., „Aufräumen“,<br />

z1: Ausgangszustand<br />

z3<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 473


Aufgabe<br />

Mit dem Loslassen des<br />

Objektes werden<br />

Dateiattribute und<br />

der Dateiinhalt zeilenweise<br />

in die JTextArea geschrieben.<br />

Über eine JTextArea-Instanz sollen<br />

Objekte (z.B. Icons) gezogen werden<br />

können.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 474


Realisierung: JTextArea als Zielbereich<br />

public class DropTest extends JFrame<br />

{<br />

DropTarget dt;<br />

JTextArea ta;<br />

public DropTest() // alles erzeugen und in Anfangszustand versetzen<br />

{<br />

super ("Drag&Drop Test");<br />

this.setSize(400,300);<br />

setDefaultCloseOperation (EXIT_ON_CLOSE);<br />

ta = <strong>new</strong> JTextArea();<br />

this.getContentPane().add(ta, BorderLayout.CENTER);<br />

dt = <strong>new</strong> DropTarget(ta, <strong>new</strong> MyDropListener(ta)); // Ziel ist die TextArea<br />

this.setVisible(true);<br />

}<br />

public static void main (String args[])<br />

{<br />

<strong>new</strong> DropTest();<br />

}<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 475


Drag&Drop interfaces<br />

interface DropTargetListener<br />

{<br />

public void dragEnter (DropTargetDragEvent dte) { }<br />

public void dragExit (DropTargetEvent dte) { }<br />

public void dragOver (DropTargetDragEvent dtde) { }<br />

public void dropActionChanged (DropTargetDragEvent dtde) { } // move/copy<br />

public void drop (DropTargetDropEvent dtde) { }<br />

}<br />

...<br />

interface DropSourceListener<br />

{<br />

public void dragEnter (DragSourceDragEvent dsde) { }<br />

public void dragOver (DragSourceDragEvent dsde) { }<br />

public void dragExit (DragSourceEvent dse) { }<br />

public void dropActionChanged (DragSourceDragEvent dsde) { } // move/copy<br />

public void dragDropEnd (DragTargetDropEvent dsde) { } // Benachrichtigung<br />

}<br />

...<br />

interface dragSourceMotionListener<br />

{ public void dragMouseMoved (DragSourceDragevent dsde) {} }<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 476


Realisierung: Dynamische Interaktion<br />

Interface DropTargetListener realisieren:<br />

class MyDropListener implements DropTargetListener<br />

{<br />

JTextArea ta;<br />

DropListener (JTextArea ta)<br />

{<br />

super();<br />

this.ta = ta;<br />

}<br />

public void dragEnter (DropTargetDragEvent dte) {...}<br />

public void dragExit (DropTargetEvent dte) {...}<br />

public void dragOver (DropTargetDragEvent dtde) {...}<br />

public void dropActionChanged (DropTargetDragEvent dtde) {...}<br />

public void drop (DropTargetDropEvent dtde) {...} // entscheidendes Ereignis<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 477


public void drop (DropTargetDropEvent dtde) {...} (I)<br />

Interface DropTargetListener realisieren:<br />

public void drop (DropTargetDropEvent dtde)<br />

{<br />

System.out.println (dtde.getSource());<br />

try<br />

{<br />

Transferable tr = dtde.getTransferable();<br />

DataFlavor[] flavor = tr.getTransferDataFlavors();<br />

for (int i = 0; i < flavor.length; i++)<br />

{<br />

// genutzt zum Übertragen von Datei von und nach Java: java.util.List<br />

ta.append(flavor[i].getMimeType().toString()+"\n");<br />

if (flavor[i].isFlavorJavaFileListType())<br />

{<br />

dtde.acceptDrop(DnDConstants.ACTION_COPY);<br />

java.util.List list = (java.util.List) tr.getTransferData(flavor[i]);<br />

DataInputStream br;<br />

String line = null;<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 478


public void drop (DropTargetDropEvent dtde) {...} (II)<br />

for (int j=0; j < list.size(); j++) // da sind u.U. mehrere Objekte!<br />

{<br />

ta.append(list.get(j) + \n"); // Dateiname<br />

DataFlavor bestTextFlavor = DataFlavor.selectBestTextFlavor(flavor);<br />

ta.append ("bestTextFlavor: "+bestTextFlavor+"\n"); // Empfehlung für Font<br />

}<br />

}<br />

FileInputStream fis = <strong>new</strong> FileInputStream (list.get(j).toString());<br />

br = <strong>new</strong> DataInputStream (fis);<br />

line = br.readLine(); // Zeile aus Datei lesen<br />

while (line != null)<br />

{<br />

ta.append(line+"\n"); // Zeile einfügen<br />

line = br.readLine(); // Versuch, nächste Zeile zu lesen<br />

}<br />

ta.append ("-----------------\n");<br />

}<br />

}<br />

dtde.dropComplete(true); // Erfolg melden<br />

}<br />

catch (Exception e) { System.out.println (e); }<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 479


Auto-Ergänzung (1/2)<br />

� Auch bei dem Beispiel machen wir uns zunächst deutlich, was wir erreichen<br />

möchten:<br />

� Durch das automatische Vervollständigen eines Wortes<br />

(z.B. Befehls oder Namens) soll die Eingabe der Benutzerin/des Benutzers<br />

sicherer und schneller gemacht werden;<br />

bei langen Begriffen werden zu dem Fehler durch Verschreiben vermieden<br />

�� Das ist ein Beispiel, bei dem die Eingabe nicht erst mit dem RETURN überprüft<br />

und weiterverarbeitet wird, sondern mit jedem Zeichen betrachtet wird<br />

(Zwischenzustände spielen eine Rolle).<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 480


Auto-Ergänzung (2/2)<br />

� Beispiel:<br />

für den Anfangsbuchstaben ‘w‘ stehen die folgenden Wörter zu<br />

Verfügung:<br />

"wiedling", "wiesmann"<br />

� ‘wies‘ wird ergänzt zu wiesmann ,<br />

� ‘wied‘ wird ergänzt zu wiedling<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 481


Realisierung (1/3)<br />

class AutoFill extends PlainDocument {<br />

private String[] terms;<br />

String eMail[] = { "hahn", "kreling", "wiedling", "wiesmann"<br />

};<br />

private JTextField Recognizer;<br />

public AutoFill(AutoFillField aRecognizer) {<br />

super();<br />

this.Recognizer = aRecognizer;<br />

this.terms = eMail;<br />

}<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 482


Realisierung (2/3)<br />

public void insertString(int offs, String str, AttributeSet a)<br />

throws BadLocationException {<br />

String input, begriff;<br />

input = Recognizer.getText(0, offs) + str;<br />

}<br />

// best match suchen<br />

begriff = "";<br />

for (int i = 0; i < terms.length; i++)<br />

if (terms[i].startsWith(input)) begriff = terms[i];<br />

// no match, dann bleibt der input<br />

if (begriff.matches("")) begriff = input;<br />

// alten Text entfernen insertString<br />

super.remove(0, Recognizer.getText().length());<br />

// neuen Text einfügen<br />

super.insertString(0, begriff, a);<br />

// Differenz markieren<br />

Recognizer.select(offs + 1, Recognizer.getText().length());<br />

}<br />

an Erfordernisse<br />

anpassen<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 483


Realisierung (3/3)<br />

class AutoFillField extends JTextField {<br />

}<br />

public AutoFillField(int cols) {<br />

}<br />

super(cols);<br />

protected Document createDefaultModel() {<br />

}<br />

...<br />

return <strong>new</strong> AutoFill(this);<br />

AutoFillField ta;<br />

ta = <strong>new</strong> AutoFillField(10);<br />

ta.setText("AutoFillField");<br />

autoErgänzung<br />

anwenden<br />

spez. Document<br />

verwenden<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 484


ENDE.<br />

<strong>Fachbereich</strong> <strong>Informatik</strong>: 3. Semester Bachelor Studiengang<br />

Prof. Dr.-Ing. Hans-Peter Wiedling<br />

Seite 485

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!