Observer-Beispiel. Observer-Beispiel



Ähnliche Dokumente
GUI-Programmierung. Teil I. Unterlagen zum Modul OOP mit Java V by MOU2/BFH-TI. Berner Fachhochschule Technik und Informatik

Lösungen. 1. Aufgabe. // ActionExample.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 8

Sommersemester Implementierung III: GUI und Verhalten (Teil 2)

Richard Bubel & Martin Hentschel

Hauptklausur: PRGII MD

GUI Programmierung mit JAVA Swing

Computergrafik 2016 Oliver Vornberger. Kapitel 02: Grafische Benutzeroberflächen

Kapitel 2: Grafische Benutzeroberflächen

11. GUI-Programmierung mit SWING Überblick

Objektorientierte Software-Entwicklung

NTB Druckdatum:

Funktionale und Objekt-Orientierte Programmierkonzepte

Swing Lernen am Code Teil 1

DHBW Karlsruhe, Angewandte Informatik Programmieren in JAVA W. Geiger, T. Schlachter, C. Schmitt, W.

JLabel. dient zur Textanzeige. können auch Bilder anzeigen: mylabel.seticon( new ImageIcon( C:/Pfad/zum/Bild.jpg )

Wiederholung: Objektorientierte Oberflächen-Programmierung mit Java und Swing

jcontentpane.setlayout(new BorderLayout()); // unten JPanel unten = new JPanel(); unten.setlayout( new BoxLayout(unten, BoxLayout.

Softwaretechnik (Medieninformatik): GUIs mit Swing Überblick

Medientechnik. Übung 3 MVC & Observer

B1. Ein-/Ausgabebetonte Programmierung

Entwurfsmuster. Die Entwurfsmuster Observer, State und Singleton am Beispiel einer Digital-Uhr

Übung Nr. 20 Freitag, 09:00-11:00 Uhr in E3.301

Institut für Programmierung und Reaktive Systeme. GUIs mit Swing. Markus Reschke

Grafische Benutzeroberflächen

B1. Ein-/Ausgabebetonte Programmierung

'($)*'+ $, *$+*$'- $..$+/, 01.2$, 2*$0, - $'($)*'+ $, *$+*$

Programmieren II. Events (Ereignisse) Heusch 16.6 (2. Bd) Ratz 15. Institut für Angewandte Informatik

7. Architektur interaktiver Systeme

Einführung: Grafische Benutzeroberflächen. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 22

Institut für Informatik

Programmieren 2 Übung Semesterwoche 6

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing

Grafische Benutzeroberflächen

B1. Ein-/Ausgabebetonte Programmierung

Seite Architektur interaktiver Systeme. 7. Architektur interaktiver Systeme. 7.1 Entkopplung durch Sichten. Schichtenarchitektur

Grundlagen der Programmierung (GP) Prof. Dr. H. Schlingloff Joachim Hänsel

1. Konventionelle Ein-/Ausgabebetonte Programmierung

Programmieren II. Java im Vergleich zu anderen Sprachen. Einführung: GUI. Einführung: Grafische Benutzeroberflächen. Dr.

EAD II Übung 5. Graphische Benutzungsoberfläche mit BlueJ

Grafische Benutzeroberflächen

Programmieren II. Events (Ereignisse) Heusch 16.6 (2. Bd) Ratz 15. Institut für Angewandte Informatik

Programmieren II. Events (Ereignisse) Heusch 16.6 (2. Bd) Ratz 15. Institut für Angewandte Informatik

Klausur vom 14. Juni Informatik 4

Hochschule der Medien Prof. Uwe Schulz 13. Juli 2009 Klausur Informatik, EDV-Nr Seite 1 von 6. Teil 2: Aufgaben

Codestil. Erläuterung und Definition eines einheitlichen Codestils. Anfänger-Praktikum SS 2004 Gruppe 2 Tutor Aaron Ruß Autor: Tomas Cernaj

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

Instrumentierung und Dekodierung

Programmiertechnik GUI Programmierung mit Java Swing

Session 1: Classes and Applets

(C) Sortieren und Suchen mit Java.-AWT Seite 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 7. Grafische Benutzeroberflächen 1

Hochschule der Medien Prof. Uwe Schulz 14. Juli 2010 Klausur Informatik, EDV-Nr Seite 1 von 5. Teil 2: Aufgaben

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Java für Computerlinguisten

Universität Paderborn Prof. Dr. Stefan Böttcher. Abschluss von Kapitel 2: Programmierung Grafischer Oberflächen mit der Swing-Bibliothek

Ist eine Softwarekomponente, die dem Benutzer eines Computers die Interaktion mit der Maschine über grafische Symbole erlaubt

Info B VL 11: Innere Klassen/Collections

Swing :Komponenten I (Teil 2)

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

class BahnTest2 { public static void main(string[] args) { Zug myice = new Zug("ICE Duisburg", 1200, 0, 50); BahnCardFahrer kunde2 = new BahnCardFahre

Kapitel 7: Ereignis-basierte Kommunikation

Programmieren 2 Übung Semesterwoche 4

04 - Actions. Actions

Probeklausur Informatik 2 Sommersemester 2013

Interaktive Elemente, GUI-Programmierung

Institut für Programmierung und Reaktive Systeme 6. Juli Programmieren II. Übungsklausur

Institut für Programmierung und Reaktive Systeme 7. Juli Programmieren II. Übungsklausur

Einführung in die Programmierung für NF. Grafische Benutzeroberflächen

Medientechnik. Übung 2 Java Swing

import java.awt.*; import java.awt.event.*; import javax.swing.*;

Informatik II Aufgabenblatt 7

Auswahl aus mehreren Alternativen:

Fachhochschule Stuttgart Prof. Uwe Schulz 5. Juli 2006 Hochschule der Medien Klausur Informatik, EDV-Nr (42021) Seite 1 von 4

Aufgabe 1: Objekte, Klassen, Vererbung (15 Punkte)

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Teil 1: Grundeigenschaften von Rechnern und Software

Plotten von Kreisen ( nach Jack Bresenham ) (C) Ac bis

Ein Manager mit CardLayout layout/cards.java

double size[][] = {{10.0, 400.0, 20.0, 160.0, 20.0, 400.0, 10.0}, // Columns {10.0, 500.0, 20.0, 180.0, 10.0}}; // Rows

Programmieren 2 Selbststudium Semesterwoche 4

Einführung in die OOP mit Java

Versuchsziele Vertiefung im Verständnis der JFrame-Programmierung, Benutzung von Klassen für die Tabellenanzeige.

Eventhandling. Delegation model Eventhandler model

GUIs in Java und ihre Programmierung

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

6. Objektorientiertes Design

Einführung in GUI-Programmierung. javax.swing

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Subnetting Version 0 Munz FTE1- JAVA Programm Analyse

Rückblick. Geltungsbereich von lokalen Variablen? Wo leben lokale Variablen? Geltungsbereich von Instanzvariablen? Wo leben Instanzvariablen?

Eventhandling. Delegation model Eventhandler model

Gegeben ist ein Path-Objekt mit folgender Beschreibung des Hauses vom Nikolaus:

Transkript:

Observer-Beispiel Aufgabenstellung Aus einer Liste möglicher Farben soll jeweils eine Farbe auswählbar sein. Bei jeder Auswahländerung wird in einem Fenster die aktuelle Farbe dargestellt und in einem anderen Fenster der Zeitpunkt der Änderung festgehalten. UML-Diagramm Observable +observables <<Interface>> Observer Watch2Lists ColorFrame ListFrame ValidColors ConcreteSubject ConcreteObserver Observer ConcreteObserver Berufsakademie Stuttgart Objektorientiertes Software Engineering 2003 Seite 1 von 6

Code Anmerkung: Dieser Code wurde von Volker Wurst zur Verfügung gestellt. import java.util.observable; import java.util.vector; * Observer - Beispiel * Model-Klasse (d.h. das "Subject" im Observer-Pattern) public class ValidColors extends Observable{ private Vector colors = new Vector(); private String selectedcolor; public Vector getcolors() { return colors; public void setcolors(vector colors) { this.colors = colors; select((string) colors.firstelement()); public void addcolor(string colorname) { this.colors.add(colorname); select(colorname); public void select(string colorname) { this.selectedcolor = colorname; setchanged(); notifyobservers(colorname); Berufsakademie Stuttgart Objektorientiertes Software Engineering 2003 Seite 2 von 6

//------------------------------------------------------------------------ import java.awt.*; import javax.swing.*; import java.util.observable; import java.util.observer; * Observer - Beispiel * Observer-Klasse für die Klasse ValidColors * Ausgabe der ausgewählten Farbe und entsprechende Einfärbung des Fensters class ColorFrame extends JFrame implements Observer { Color color; String color_name = "black"; JPanel p = new JPanel(true); //-------------------------------------- public ColorFrame(ValidColors colors) { super("selected Color"); //set frame caption getcontentpane().add("center", p); colors.addobserver(this); //register with Subject setbounds(100, 100, 100, 100); setvisible(true); public void paint(graphics g) { g.drawstring(color_name, 20, 50); * @see java.util.observer#update(observable, Object) * setze Text und Farbe anhand des übergebenen TextStrings public void update(observable o, Object arg) { //Observer is notified of change here color_name = (String) arg; //save color name //set background to that color if (color_name.touppercase().equals("red")) color = Color.red; if (color_name.touppercase().equals("blue")) color = Color.blue; if (color_name.touppercase().equals("green")) color = Color.green; setbackground(color); Berufsakademie Stuttgart Objektorientiertes Software Engineering 2003 Seite 3 von 6

//---------------------------------------------------------------------- import java.awt.*; import java.util.date; import java.util.observable; import java.util.observer; import javax.swing.*; * Observer - Beispiel * Observer-Klasse für die Klasse ValidColors * Ausgabe der ausgewählten Farben mit dem zugehörigen Timestamp class ListFrame extends JFrame implements Observer { JList list; JPanel p; JScrollPane lsp; JListData listdata; public ListFrame(ValidColors colors) { super("color Selection History"); //put panel into the frmae p = new JPanel(true); getcontentpane().add("center", p); p.setlayout(new BorderLayout()); //Tell the Subject we are interested colors.addobserver(this); //Create the list listdata = new JListData(); //the list model list = new JList(listData); //the visual list lsp = new JScrollPane(); //the scroller lsp.getviewport().add(list); p.add("center", lsp); lsp.setpreferredsize(new Dimension(100, 100)); setbounds(250, 100, 300, 100); setvisible(true); * @see java.util.observer#update(observable, Object) * Füge die geänderte Farbe mit Timestamp zu der Liste hinzu public void update(observable o, Object arg) { listdata.addelement((string) arg + " (" + new Date().toString() + ")"); Berufsakademie Stuttgart Objektorientiertes Software Engineering 2003 Seite 4 von 6

//---------------------------------------------------------------------- import java.util.vector; import javax.swing.abstractlistmodel; /* * Modelklasse für die Klasse ListFrame zur Speicherung der Color-selections class JListData extends AbstractListModel { private Vector data; //the color name list public JListData() { data = new Vector(); public int getsize() { return data.size(); public Object getelementat(int index) { return data.elementat(index); //add string to list and tell the list about it public void addelement(string s) { data.addelement(s); fireintervaladded(this, data.size() - 1, data.size()); Berufsakademie Stuttgart Objektorientiertes Software Engineering 2003 Seite 5 von 6

//---------------------------------------------------------------------- import java.awt.*; import java.awt.event.*; import java.util.iterator; import javax.swing.*; public class Watch2Lists extends JFrame implements ActionListener, ItemListener { Button Close; JRadioButton red, green, blue; ValidColors colors = new ValidColors(); public Watch2Lists() { super("change two other frames"); // initialize the Model colors.addcolor("red"); colors.addcolor("green"); colors.addcolor("blue"); //add panel to content pane JPanel p = new JPanel(true); p.setlayout(new BorderLayout()); getcontentpane().add("center", p); //vertical box layout Box box = new Box(BoxLayout.Y_AXIS); p.add("center", box); //add the radio buttons ButtonGroup bgr = new ButtonGroup(); Iterator elements = colors.getcolors().iterator(); while (elements.hasnext()) { JRadioButton button; box.add(button = new JRadioButton((String) elements.next())); button.additemlistener(this); bgr.add(button); WindowListener l = new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); ; addwindowlistener(l); //---------create observers--------- ColorFrame cframe = new ColorFrame(colors); ListFrame lframe = new ListFrame(colors); setbounds(150, 250, 100, 100); setvisible(true); /* @see java.awt.event.itemlistener#itemstatechanged(itemevent) public void itemstatechanged(itemevent e) { //responds to radio button clicks //if the button is selected, update the model if (e.getstatechange() == ItemEvent.SELECTED) colors.select(((jradiobutton) e.getsource()).gettext()); /* @see java.awt.event.actionlistener#actionperformed(actionevent) public void actionperformed(actionevent e) { public static void main(string[] arguments) { new Watch2Lists(); Berufsakademie Stuttgart Objektorientiertes Software Engineering 2003 Seite 6 von 6