Softwarepraktikum: Enigma



Ähnliche Dokumente
Objektorientierte Software-Entwicklung

Objektorientierte Programmierung

GRAFISCHE BENUTZERSCHNITTSTELLEN

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

GUI Programmierung mit JAVA Swing

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

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

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

Grafische Benutzeroberflächen mit Swing

Einstieg in die Informatik mit Java

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

Grundlagen der Programmierung APPLETS

Graphische Benutzungsoberflächen

GUI Programmierung in Java

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

Swing Lernen am Code Teil 1

Programmiertechnik GUI Programmierung mit Java Swing

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

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

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

Kap. 35 Swing: Grundlagen Kap Swing: Hauptfenster

Programmieren in Java

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

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

NTB Druckdatum:

JButton, JCheckBox, JRadioButton. Programmieren II. Vorlesung 7. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2009.

Prinzipien Objektorientierter Programmierung

Einführung in GUI-Programmierung. javax.swing

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

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Objektorientierte Programmierung. Kapitel 12: Interfaces

Das Model View Controller (MVC) Konzept

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

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

Java Design und Event Handling. Natascha Hoebel Professur Prof. R. V. Zicari. AWT SWING Layout Design Event Handling

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

Ein Manager mit CardLayout layout/cards.java

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

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

Java Projekt: Tic Tac Toe + GUI

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Innere Klassen in Java

Factory Method (Virtual Constructor)

Einführung in GUI-Programmierung. javax.swing

Javakurs für Fortgeschrittene

JAVA Oberflächen mit Swing

5. Abstrakte Klassen

2A Basistechniken: Weitere Aufgaben

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Javakurs zu Informatik I. Henning Heitkötter

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Delegatesund Ereignisse

Objektorientierte Programmierung

WPF Steuerelemente Listbox, ComboBox, ListView,

Java Lab 2006/12/13 Client

Einführung in die Programmierung

Objektorientierte Softwareentwicklung

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

5.2 Neue Projekte erstellen

Typumwandlungen bei Referenztypen

Projekt AGB-10 Fremdprojektanalyse

Einstieg in die Informatik mit Java

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

Liste Programmieren Java Überblick

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

3 Objektorientierte Konzepte in Java

Programmierkurs Java

Benutzeroberflächen. Java Teil 4

Swing :Komponenten I (Teil 2)

WhiteStarUML Tutorial

Grundlagen von Python

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

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

Sommersemester Implementierung III: GUI und Verhalten (Teil 2)

JList JTable Layout-Manager GridBagLayout. Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

Transkript:

Softwarepraktikum: Enigma Martin Steffen Sommersemester 2003

Abschnitt I GUI Inhalt: Übersicht gui-pakete in Java: AWT, Swing Komponenten und Behälter Layout Ereignisse und Ereignisbehandlung Ereignismodell Beispiel Literatur: Die meisten Dinge habe ich aus [Fla99] entnommen. Nützlich ist auch ein Durcharbeiten/Reinschnuppern in das Java-Tutorial von Sun, aus dem auch das Beispiel stammt.

Swing und AWT GUI-toolkit in Java: AWT, Swing, JFC Swing: Erweiterung des (ver-)alt(eten) AWT Teil der Java2 Plattform leichtgewichtige vs. schwergewichtige Komponenten Probleme mit Browsern javax.swing Paket, aber java.awt braucht man ebenfalls 2

Allgemeines Vorgehen 1. Erzeugen der Komponenten + setzen ihrer Eigenschaften (properties) 2. Erzeugen der Container, die sie Enthalten + setzen der Eigenschaften, speziell Layout 3. Zusammenbasteln: Hinzufügen der Komponenten in die Komponenten add JButton b = new JButton ( Drueck mich ) ; // Knopf Komponente JPanel p = new JPanel ( ) ; // allgem. Behaelter p. add (b ) ; // hinzifuegen 4. Anheften der Eventlistener 5. Darstellen 3

Komponenten Components: Grundbausteine von GUI s ( widgets... ) Components = Brutto-Gehalt eines graphischen Toolkits/Library/API java.awt.component als Wurzelklasse, und in Swing javax.swing.jcomponent z.b. Knöpfe, Menues, Schieberegler,... schwergewichtige vs. leichtgewichtige Komponenten (AWT vs. Swing) 4

Eigenschaften/Properties properties : formell kein Teil der Javaklassen Namenskonvention, von JavaBeans übernommen Paar von set/get-zugriffsmethoden 1 Property die graph. Komponenten haben viele geerbte Eigentschaften 1 acessors 5

Behälter Container: spezielle Komponenten, die andere Komponente enthalten kann, d.h. Unterklasse von Component es gibt eine ganze Reihe verschiedener Container oft AWT/Swing- Zwillinge : Applet/JApplet Frame/JFrame... JComponent Unterklasse von Container, d.h., (theoretisch) alle Swing- Komponentnen sind Container 6

Layout Management Bestandteile vieler Container müssen arrangiert werden Layout Manager implementieren java.awt.layoutmanager interface 2 Verwendung: Instanzen werden als Argument der Containermethode setlayout(..) gegeben Swing definiert noch ein paar weitere hinzu Neben dem default-verhalten: keine Stategie (= null = Layout per Hand ) gibt es vordefinierte Manager für verschiedenen Strategien: 2 Erweitert zu LayoutManager2 7

FlowLayout Fließtextartig GridLayout Spalten- und Zeilenanordnung BorderLayout N/S/O/W und einen in der Mitte CardLayout Nur eine Komponente zu einem Zeitpunkt GridBagLayout komlexere Strategie 8

Ereignisse und Ereingnisbehandlung: Allgemein Behälter und Komponenten: Daten /passive Teile der Gui GUI s: meist außengesteuert, 3 ohne weitere Aktivitätstrager 4 Gui reagiert nur auf Ereignisse und behandelt sie Ereignisse: Interrupts der GUI, typischerweise Benutzeraktionen stoßen Aktivitäten an Eventmodell: ab Java1.1 und später 5 3 Schließlich heißt das I in GUI: Schnittstelle 4 weitere autonome Threads, Animationen. 5 Für Applets und Browser ist das (ver)alt(ete) Java 1.0 Modell dennoch manchmal notwendig, wenn man keine plugins verlangen will. 9

Sommersemester 2003 Eventmodell drei Mitspieler im Eventprotokoll, Call-Back-Protokoll Listener hinzufügen Listener Event handling GUI-Komponente Effekt der Events Programmspezifisch Abbildung 1: Events & GUIs 1. Event: Instanz der Klasse java.util.eventobject, java.awt.awtevent 6 Quelle (getsource) 6 in Java 1.0 war es die Klasse Event. bzw. deren Unterklasse 10

verschiedene Sorten von Events = verschiedene Unterklassen, Event- Klassenhierarchie Definition eigener Eventklassen möglich neue Namenskonvention, Zusammenarbeit mit Java-Beans Varianten jeder Sorte als Feld-Konstanten 2. Quelle generiert Events benachrichtigt die (passenenden) Listener durch Methodenaufruf, Event als Parameter Unterhält eine Liste von Listenern, die benachrichtigt sein wollen. erlaubt dynamische An/Abmeldung von Listener, Registrierung Beispiel für Ereignisquelle: java.awt.container 3. Listener Empfänger der Ereignisse als Methodenparameter implementiert Listener-Interfaces für jede Klasse von Events: zugehöriges Interface 7 7 Ausnahme: der Klasse MouseEvent sind zwei Listener-Schnittstellen zugeordnet: MouseListener und MouseMotionListener. 11

Ereignisobjekte wie (fast) alles: Ereignisse sind Objekte/Kode als Klassen java.util.eventobject java.awt.awtevent Paket java.awt.event javax.swing.event 8 Allgemein: Quelle und Typ eines Events? getsource(): Objekt, das die Ursache des Ereignisses war, getid(): zur Unterscheidung der verschiedenen Typen von Ereignissen Weitere Methoden zur Extraktion spezifischer Information, je nach Klasse 8 Die Hierarchie ist nicht ganz einheitlich. Auch das Beans-Klassen spielen mit rein. 12

Ereignislauscher Ereignisse = Kommunikation zwischen Objekten Event listener: Objekt welches benachrichtigt werden will, wenn ein Ereignis eintritt Eventquelle: Mit Methoden damit sich Interessenten anmelden/abmelden können: Notifikation, add + remove. Jede Eventquelle (Komponente), kann charakteristische Event generieren, sichtbar an den Registrierungs-Methoden für die Listener 9 Jede Klasse von Event ˆ= Event Listener Klasse 9 Im gewissen Sinne gehören die möglichen Events zur Schnittstelle der Klasse, es sind (eine bestimmte Art der) ausgehenden Kommunikation. Methodenaufrufe. Die Schnittstelle jedoch listet nur eingehende Kommunikation auf, nämlich 13

java.util.eventlistener als Markerinterface Eventlistener interfaces definieren eine Anzahl von Methoden, die die jeweilige spezielle Ereigniss representiere Eventobjekt als einziges Argument 14

Sommersemester 2003 Ereignismodell EventListener (leeres) Interface in java.util, erweitert durch I j. Event-Quelle addxlistener(l) removexlistener(l) An/Abmeldung Eintritt(e) I 1 I 2 Eintritt(e ) Listener Listener. I n Listener Abbildung 2: Event-Modell (AWT-Events) 15

Adapter-Klassen zu jeder Sorte Event: ein entsprechendes Interface Interface muß durch den Listener imlementiert werden zwei Alternativen: 10 1. direkte Implementierung des Interfaces mit implements 2. indirekt mittels Adapter-Klasse Adapter-Klasse: triviale (nicht abstrakte) Implementierung des zugehörigen Interfaces Listener: durch Unterklassenbildung und Überschreiben der benötigten Methoden 10 Die Adapter hier können als eine sehr einfache Form der Adapter-Muster [GHJV95] betrachtet werden. 16

Ereignisbehandlung mit Inneren Klassen Call-Back Event-Listener Objekte sind nur von lokaler Relevanz bei der Registrierung, ebenso die Eventlistener-Klassen selbst! Ausnutzen von inneren Klassen, genauer gesagt Lokalen bzw. Anonymen Klassen JFrame window = new JFrame ( Test ) ; window. addfocuslistener (new FocusListener () { public void focusgained ( FocusEvent e ) {...... } public void focuslost ( FocusEvent e ) {.... } }}; 17

Beispiel import javax. swing. ; import java. awt. ; import java. awt. event. ; public class SwingClickcounter { private static String l a b e l P r e f i x = Number of button c l i c k s : ; private int numclicks = 0; public Component createcomponents () { final JLabel label = new JLabel ( l a b e l P r e f i x + 0 ) ; JButton button = new JButton ( I m a Swing button! ) ; button. setmnemonic( KeyEvent. VK I ) ; // Unterstreichen des I button. addactionlistener (new ActionListener () { / anon. Klasse zur Implementation des Lauscher Interfaces ActionListener / public void actionperformed ( ActionEvent e ) { numclicks++; label. settext ( l a b e l P r e f i x + numclicks ) ; } }); // l abel. setlabelfor ( button ) ; // 18

JPanel pane = new JPanel ( ) ; // Properties setzen pane. setborder ( BorderFactory. createemptyborder (30,30,10,30)); pane. setlayout (new GridLayout ( 0, 1 ) ) ; // Zeilen (0= abgeleitet ), Spalten pane. add ( button ) ; pane. add ( label ) ; } return pane ; public static void main ( String [ ] args ) { // Hauptmethode einer Anwendung try { UIManager. setlookandfeel ( UIManager. getcrossplatformlookandfeelclassname ( ) ) ; } catch ( Exception e ) { } //Create the top l e v e l container and add contents to i t. JFrame frame = new JFrame ( = SwingApplication = ) ; SwingClickcounter app = new SwingClickcounter ( ) ; Component contents = app. createcomponents ( ) ; // Hauptfenster // Instanz der Applikation // Erzeugen der Unter Kompo / Hinzufuegen der selbstgemachten Komponenten in das Hauptfenster ( frame ). Als Toplevel/ leichtgewichtige Komponente : JFrame enthaelt : JRootPane / frame. getcontentpane ( ). add ( contents, BorderLayout.CENTER); 19

} } // frame. addwindowlistener (new WindowAdapter () { // anonyme Klasse, vom Typ WindowAdap public void windowclosing ( WindowEvent e ) { // Adatption von WindowAdapter System. e x i t ( 0 ) ; // ordentliche Terminierung } }); frame. pack ( ) ; // Initialisierung ( java. awt.window) frame. s e t V i s i b l e ( true ) ; // Anzeigen ( von Component) 20

import java. awt. ; import javax. swing. ; import javax. swing. border. ; import java. awt. event. ; public class DisplayMessage { public static void main ( String [ ] args ) { JLabel msglabel = new JLabel ( ) ; JButton yesbutton = new JButton ( ) ; JButton nobutton = new JButton ( ) ; msglabel. settext ( args [ 0 ] ) ; msglabel. setborder (new EmptyBorder (10,10,10,10)); yesbutton. settext (( args. length >=2)? args [ 1 ] : Yes ) ; nobutton. settext ( ( args. length >=3)? args [ 2 ] : No ) ; JFrame win = new JFrame ( Message ) ; JPanel buttonbox = new JPanel ( ) ; win. getcontentpane ( ). setlayout (new BorderLayout ( ) ) ; buttonbox. setlayout (new FlowLayout ( ) ) ; buttonbox. add ( nobutton ) ; 21

buttonbox. add ( yesbutton ) ; win. getcontentpane ( ). add ( msglabel, Center ) ; win. getcontentpane ( ). add ( buttonbox, South ) ; / / yesbutton. addactionlistener (new ActionListener () { // innere Klasse public void actionperformed ( ActionEvent e ) { System. e x i t (1);} }); win. pack ( ) ; win. show ( ) ; } } 22

Literatur [Fla99] David Flanagan. Java Foundation Classes in a Nutshell. O Reilly, 1 edition, September 1999. [GHJV95] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns. Elements of Reusable Object-Oriented Software. Addison- Wesley, 1995. 23