Graphische Programmierung: GUIs: graphical user interfaces



Ähnliche Dokumente
Graphische Benutzungsoberflächen

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

Objektorientierte Software-Entwicklung

Applets. Applets. Applets. Applet: Java-Programm Eingebettet in einer HTML-Seite Ausführung von einem Java-fähigen Web-Browser oder sog.

GUI Programmierung mit JAVA Swing

Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen (engl.: "graphical user interface", GUI) in Java

Java Projekt: Tic Tac Toe + GUI

GUI Programmierung in Java

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

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

Einführung in die Programmierung

Objektorientierte Programmierung

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

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Grundlagen der Programmierung APPLETS

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Grafikausgabe mit dem Abstract- Windowing-Toolkit. Eine Einführung

GRAFISCHE BENUTZERSCHNITTSTELLEN

NTB Druckdatum:

Java: Vererbung. Teil 3: super()

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Einstieg in die Informatik mit Java

Abschnitt 12: Strukturierung von Java-Programmen: Packages

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Graphic Coding. Klausur. 9. Februar Kurs A

Java Game Development Fabian Birzele Programmierpraktikum 2008 / 2009

Objektorientierte Programmierung

Programmierkurs Java

Einbindung der Tastatur

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

2A Basistechniken: Weitere Aufgaben

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Typumwandlungen bei Referenztypen

Erstellen von x-y-diagrammen in OpenOffice.calc

Programmieren in Java

Objektorientierte Programmierung. Kapitel 12: Interfaces

Schritt 1 - Ein Spielfeld

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

Objektorientierte Programmierung

Swing Lernen am Code Teil 1

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Dokumentation des Projektes Tic Tac Toe

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Delegatesund Ereignisse

Innere Klassen in Java

Interaktive Elemente, GUI-Programmierung

Erweiterungen Webportal

Scala kann auch faul sein

Objektorientierte Programmierung OOP

Grafische Benutzeroberflächen mit Swing

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

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

Kapitel 6. Vererbung

Factory Method (Virtual Constructor)

Hinweise zum Übungsblatt Formatierung von Text:

ways2gether ipad App Guide

Übungen zu Softwaretechnik

Abschnitt 9: Schnittstellen: Interfaces

U08 Entwurfsmuster (II)

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

Programmierkurs Java

In dem unterem Feld können Sie Ihre eintragen, wenn sie im System hinterlegt wurde. Dann wird Ihnen Ihr Passwort noch einmal zugeschickt.

Prinzipien Objektorientierter Programmierung

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

Benutzeroberflächen. Java Teil 4

Einführung in die Java- Programmierung

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Datenbanken Kapitel 2

Swing :Komponenten I (Teil 2)

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Professionelle Seminare im Bereich MS-Office

Probeklausur: Programmierung WS04/05

Suchmaschinen. Universität Augsburg, Institut für Informatik SS 2014 Prof. Dr. W. Kießling 23. Mai 2014 Dr. M. Endres, F. Wenzel Lösungsblatt 6

Kapitel 6. Vererbung

5. Tutorium zu Programmieren

J.1. J.1 GUI-Programmierung in in Java Prof. Dr. Rainer Manthey Informatik II 1

WPF Steuerelemente Listbox, ComboBox, ListView,

Vermittler (Mediator) Sabine Müller - Sven Richter - Jens Wagenbreth 03IN2-P-D

1 Polymorphie (Vielgestaltigkeit)

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Computeranwendung und Programmierung (CuP)

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 16. Juli 2005 Dr. Alfons Huhn, Timotheus Preisinger

11. GUI-Programmierung mit SWING Überblick

Bedienung des Web-Portales der Sportbergbetriebe

public class SternchenRechteckGefuellt {

Abwesenheitsnotiz im Exchange Server 2010

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Anwendertreffen 20./21. Juni

TESTEN SIE IHR KÖNNEN UND GEWINNEN SIE!

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Integrated Services Realtime Remote Network

Transkript:

Graphische Programmierung: GUIs: graphical user interfaces Ziel: Java -Programmierung und Handhabung von graphischen Benutzeroberflächen (in Applets) mehrere Fenster Fenster-Eigenschaften: aktiv oder inaktiv im Hintergrund oder im Vordergrund parallele Verwendung verschiedener Eingabekanäle: Tastatur Maus mit i.a. 3 Tasten, Touchscreen, Joystick,... P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 1

GUIs: graphical user interfaces Graphische Elemente: Fenster mit Schiebeleisten, waagrechte/senkrechte Menüs, Radioknöpfe, Symbole zum Anklicken (Icons), Textfelder P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 2

GUI: Bemerkungen Große Akzeptanz der GUIs: intuitive Bedienbarkeit Schnelleres Verständnis, orientiert an der menschlichen Wahrnehmung Schnelle Rechner/ Graphikkarte: Realzeitgefühl P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 3

Programmierung, Ereignissteuerung Problem der Programmierung: Anwendungsprogramme müssen mit einer Vielzahl von Interaktionen/ Eingabemöglichkeiten umgehen können Man muss mit allem rechnen und auf jedes relevante Ereignis eine sinnvolle Aktion starten. Beispiel Markierung eines Textstückes im Textverarbeitungsprogramm P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 4

Programmierung, Ereignissteuerung Interne Methode der Mitteilung der Ereignisse Strom von Ereignissen erzeugt vom Benutzer über die Eingabekanäle verändert bzw. gefiltert vom Betriebssystem / GUI-System I.a. in zeitlichen Reihenfolge des Auftretens P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 5

Graphische Zeichenfläche graphischer, farbiger Bildschirm, mit ca. 1000 X 1000 Bildpunkte (Pixel) Pixel-Koordinatensystem (x,y). (0,0) ist links oben. Eingabekanäle: Tastatur: Zeiger-Position und Tasteneingabe Maus: Position, Click; Art des Clicks P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 6

Vordefinierte Fenstertypen und graphische Elemente Oberste Klasse ist Component Unterklassen sind: Button Canvas Checkbox Choice Container Label List Scrollbar Textcomponent Ein Knopf zum Anklicken. Ein Zeichenfläche. Ein Text und ein Kästchen zum Ankreuzen. Ein Auswahlmenü mit Kurztexten. abstrakte Klasse, mit der hierarchisch ein Fenster in Unterfenster gegliedert werden kann. Unterklassen von Container: Panel Fenster ohne Rahmen Window mit Unterklassen Frame, Dialog Textanzeigefeld Senkrechte, anklickbare Menüleiste Schiebeleiste Textanzeige P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 7

Applets Applet ist Unterklasse von Panel Panel-Methoden stehen einem Applet somit zur Verfügung P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 8

Component - Methoden. Beispiele Layout Steuerung der Verteilung von Subkomponenten: Je nach Layout Spezifikation mittels der entsprechenden Klasse: Borderlayout North, South, Center, East, West GridLayout(...) Komponenten matrixartig FlowLayout von oben nach unten. CardLayout Kartenstapel Die Klasse Container hat die Methode add zum Hinzufügen von Komponenten. P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 9

Component - Methoden. Beispiele Größe und Position können ermittelt und verändert werden. bounds(), inside(), location(), move(), size(),... Farbe des Hintergrunds, Vordergrunds: getbackground(), setforeground(),.... Ereignisse Ermitteln und Handhabung der Ereignisse mouseup(), handleevent(), postevent(),... Zeichnen innerhalb der Komponente, Neuzeichnen des Bildes. paint(), repaint(), update() Status Feststellen, ob Komponente aktiv, usw. Bei Definition einer Unterklasse können bzw. müssen bestimmte Methoden in diesen Klasse überschrieben werden. P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 10

Bemerkungen In Ereignismodell 1.0: Ereignisse, werden in der Objekthierarchie von unten nach oben durchgereicht, bis handleevent dieses Ereignis einfängt. Programmierhinweise: Das im Fenster sichtbare Bild möglichst vollständig in Datenstrukturen ablegen, damit das sichtbare Bild rekonstruierbar ist P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 11

Beispiel: Einfaches Zeichnen (Ereignismodell 1.0) Zeichenfläche: Strecken, Rechteck und Ellipsen zeichnen. // veraenderte Version eines JDK Beispiels // (alte Version der Ereignissteuerung) import java.awt.*; import java.applet.*; import java.util.vector; public class DrawTestRechteck extends Applet { public void init() { P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 12

setlayout(new BorderLayout()); DrawPanel dp = new DrawPanel(); add("center", dp); add("south", new SKWahl(dp)); dp.init(); public boolean handleevent(event e) { switch (e.id) { case Event.WINDOW_DESTROY: System.exit(0); return true; default: return false; public static void main(string args[]) { Frame f = new Frame("DrawTest");

System.out.println("Main laeuft"); DrawTestRechteck drawtest = new DrawTestRechteck(); drawtest.init(); drawtest.start(); f.add("center", drawtest); f.resize(300, 300); f.show(); class DrawPanel extends Panel { Vector lines = new Vector(); Vector streckeoderkreis = new Vector(); int x1,y1; boolean ziehen; int strecke; // 0 = strecke, 1 = kreis, 2 = Rechteck int x2,y2;

public void init() { ziehen = false; strecke = 0; public DrawPanel() { setbackground(color.white); public void setstrecke() { strecke = 0; public void setrechteck() { strecke = 2; public void setkreis() { strecke = 1;

public boolean handleevent(event e) { switch (e.id) { case Event.MOUSE_DOWN: x1 = x2 = e.x; y1 = y2 = e.y; ziehen = true; return true; case Event.MOUSE_UP: lines.addelement(new Rectangle(x1, y1, e.x, e.y)); // leichter Missbrauch von rectangle streckeoderkreis.addelement(new Rectangle(strecke,0,0,0)); ziehen = false; repaint(); return true; case Event.MOUSE_DRAG: x2 = e.x; y2 = e.y; repaint(); return true;

case Event.WINDOW_DESTROY: System.exit(0); return true; default: return false; public void paint(graphics g) { int np = lines.size(); int streckei; /* Zeichne alle Strecken und Ellipsen */ for (int i=0; i < np; i++) { Rectangle streckeip = (Rectangle)streckeOderKreis.elementAt(i); streckei = streckeip.x; Rectangle p = (Rectangle)lines.elementAt(i); if (streckei == 0)

g.drawline(p.x, p.y, p.width, p.height); else { if (streckei == 1) { if (p.height > p.y) g.drawoval(p.x, p.y, p.width-p.x, p.height-p.y); else g.drawoval(p.x, p.height, p.width-p.x, p.y-p.height); else if (streckei == 2) { if (p.height > p.y) g.drawrect(p.x, p.y, p.width-p.x, p.height-p.y); else g.drawrect(p.x, p.height, p.width-p.x, p.y-p.height); if (ziehen) {

if (strecke == 0) {g.drawline(x1, y1, x2, y2); else { if (strecke == 1) { if (y2 > y1) g.drawoval(x1,y1,x2-x1,y2-y1); else g.drawoval(x1,y2,x2-x1,y1-y2); else { if (y2 > y1) g.drawrect(x1, y1, x2-x1, y2-y1); else g.drawrect(x1, y2, x2-x1, y1-y2);

class SKWahl extends Panel { DrawPanel target; public SKWahl(DrawPanel target) { this.target = target; setlayout(new FlowLayout()); Choice SoderK = new Choice(); SoderK.addItem("Strecke"); SoderK.addItem("Ellipse"); SoderK.addItem("Rechteck"); SoderK.setBackground(Color.lightGray); add(soderk); public void paint(graphics g) { Rectangle r = bounds(); g.setcolor(color.lightgray);

g.draw3drect(0, 0, r.width, r.height, false); public boolean action(event e, Object arg) { if (e.target instanceof Choice) { String choice = (String)arg; if (choice.equals("strecke")) { target.setstrecke(); else if (choice.equals("ellipse")) { target.setkreis(); else if (choice.equals("rechteck")) { target.setrechteck(); return true;

Ereignissteuerung nach dem Java Ereignis-Modell 1.1 Andere Modellvorstellung und Durchreichen der Ereignisse Modell 1.1- Strukturierung: Ein Ereignis tritt bei einem Objekt auf (z.b. Button, Menü,... ) Dieses Ereignis wird in ein Ereignisobjekt verpackt und an einen Beobachter gesendet (Listener) Dieser Beobachter (Methode) enthält die Programmierung, wie nach Eintreten dieses Ereignisses zu verfahren ist. Swing: sehr ähnlich, aber andere Namen der Klassen: JLabel statt Label. P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 22

Ereignissteuerung zu 1.1 Programmierung: Registrierung der Listener an der Ereignis-Quelle Für jedes Ereignis eine eigene Methode. Vorteil: optimierte und gezielte Verteilung der Ereignisse. (Im Modell 1.0: Gießkannenprinzip) P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 23

Ereignissteuerung zu 1.1, Adapterklassen Adapterklassen: Zur Erleichterung der Programmierung Sind abstrakte Klassen, alle Methoden zur Ereignisbehandlung sind (leer) implementiert. Listener sind Unterklassen der Adapterklasse nur notwendigen Methoden werden überschrieben Im Beispiel anonyme Klasse mit new MouseAdapter () entsprechende Methode wird überschrieben P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 24

Beispiel zu 1.1-Ereignissteuerung import java.awt.*; import java.awt.event.*; import java.applet.*; public class KlickKlack extends Applet { Button klickbutton = new Button("KlickKlack"); boolean geklickt = true; Color klick = new Color(255,255,0); Color klack = new Color(0,0,255); public void init() { add(klickbutton); klickbutton.addmouselistener( new MouseAdapter () { P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 25

public void mouseclicked(mouseevent e) { Graphics g = getgraphics(); if (geklickt) g.setcolor(klick); else g.setcolor(klack); g.filloval(0,0,200,200); // das original war g.filloval(0,0,getwidth,getheight); geklickt =!geklickt; );

Kritikpunkte an der objektorientierten Programmierung ( Artikel von M. Broy, Informatik Spektrum, Februar 2002) Einige Kritikpunkte: OO-Sprachen kennen keine Komposition von Klassen Das OO-Ausführungsmodell ist sequentiell Die Objektorientierung sagt uns nicht, wie wir das Verhalten von Schnittstellen definieren sollen Gemeint: Methodenaufruf und dessen operationale Semantik P raktische Informatik 2, SS 2005, F olien Java;4, (4. Mai2005) Seite 27

Vererbung verletzt das Geheimnisprinzip Letzlich gibt es nur eine einzige, syntaktische Annahme: (die Unterklasse) hat mindestens dieselben Attribute und Methoden wie die Oberklasse Kritik an der Wiederverwendbarkeit (sinngemäß:) neue Projekte werden sich i.a. eine eigene Klassenhierarchie schaffen, nicht auf eine bereits vorhandene Klassenhierarchie aufbauen. Multiple Dispatching fehlt. Das bezog sich auf Java1 1.4. In Java 5 gibt es durch Argumenttypen überladene Klassen, somit ist diese Kritik nicht mehr stichhaltig.

statische Analyse der Fernwirkung von Methodenaufrufen ist so gut wie unmöglich