Einige vorgefertigte Layout-Manager:

Ähnliche Dokumente
public class MyChoice implements PlayConstants { private PlayGround ground; private YourChoice yours; private int acceptablechoice, value; public

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

Ereignisse (Events) in Java

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

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

Objektorientierte Software-Entwicklung

NTB Druckdatum:

18 Tic-Tac-Toe. Regeln: Zwei Personen setzen abwechselnd Steine auf ein (3 3)-Spielfeld. Wer zuerst drei Steine in einer Reihe erreicht, gewinnt.

18 Tic-Tac-Toe: GUI. 8. Feb Felix Brandt, Harald Räcke 567/596

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

GroupLayout Anmerkung

Layout Manager. Astrid Beck FHT Esslingen

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

18 Tic-Tac-Toe. Beispiel. Analyse. Hintergrund Zwei-Personen-Nullsummenspiele. Regeln:

Zwei Personen setzen abwechselnd Steine auf ein (3 3)-Spielfeld. Wer zuerst drei Steine in einer Reihe erreicht, gewinnt.

GUI-Programmierung mit Java. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 11: GUI 1: AWT (1) GUI-Programmierung mit Java.

Zwei Personen setzen abwechselnd Steine auf ein (3 3)-Spielfeld. Wer zuerst drei Steine in einer Reihe erreicht, gewinnt.

Zwei Personen setzen abwechselnd Steine auf ein (3 3)-Spielfeld. Wer zuerst drei Steine in einer Reihe erreicht, gewinnt.

7. Architektur interaktiver Systeme

Grafische Benutzeroberflächen

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Session 1: Classes and Applets

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

Ein Manager mit CardLayout layout/cards.java

11. GUI-Programmierung mit SWING Überblick

Javakurs für Fortgeschrittene

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

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

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

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

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

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

Sommersemester Implementierung III: GUI und Verhalten (Teil 2)

Java Projekt: Tic Tac Toe + GUI

Grafische Benutzeroberflächen

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

Zwei Personen setzen abwechselnd Steine auf ein (3 3)-Spielfeld. Wer zuerst drei Steine in einer Reihe erreicht, gewinnt.

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

Objektorientierte Programmierung

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

Abstract Windowing Toolkit

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

5. Das Java AWT (II) Components und Container

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

Ereignisverwaltung und Layout-Typen

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

GUI Programmierung mit javax.swing

Programmieren 2 Selbststudium Semesterwoche 4

Funktionale und Objekt-Orientierte Programmierkonzepte

Graphische Programmierung: GUIs: graphical user interfaces

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Grafische Benutzeroberflächen mit Swing

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Zwei Personen setzen abwechselnd Steine auf ein (3 3)-Spielfeld. Wer zuerst drei Steine in einer Reihe erreicht, gewinnt.

12 Abstrakte Klassen, finale Klassen und Interfaces

04 - Actions. Actions

Swing :Komponenten I (Teil 2)

Probeklausur Informatik 2 Sommersemester 2013

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Klausur Software-Entwicklung März 01

25 Object Serialization

Kapitel 7: Ereignis-basierte Kommunikation

Implementieren von Klassen

import java.applet.applet; import java.awt.*; class WaitAux extends Thread { private Graphics gbuff; private Image buffer; private WaitingThread app;

Einstieg in die Informatik mit Java

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

GUI-Programmierung - Einführung

$ java awt.main A # typische Dekodierung $ java -Dtrace=all awt.main A # alle Events $ java -Dtrace=none awt.main A # keine Dekodierung

Javakurs für Fortgeschrittene

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

Eventhandling. Delegation model Eventhandler model

Grafik - wozu? GUI Grafische Benutzungsschnittstellen. Gehört zum Standardumfang des JDK. 2 Varianten: AWT und Swing

Instrumentierung und Dekodierung

Interaktive Elemente, GUI-Programmierung

5. Java Swing Grundlagen der Programmierung II (Java) Prof. Dr. Bernhard Humm Hochschule Darmstadt University of Applied Sciences Sommersemester 2006

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

1 Abstrakte Klassen, finale Klassen und Interfaces

// compiliert, aber Programmabbruch zur Laufzeit: einesuppe = ((EßbarerPilz)einPilz).kochen();

Info B VL 11: Innere Klassen/Collections

GUI Programmierung in Java

Einführung in Swing. Graphical User Interface

14 Abstrakte Klassen, finale Klassen, Interfaces

Übungsmodus und Reviews

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Klausur zur Informatik A WS 2001/2002 Name: Korrektor: Punkte: a) Zeichnen Sie zu der nachstehenden Syntax in EBNF die passenden Syntaxdiagramme.

Graphische Benutzungsoberflächen

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

GUI-Programmierung in Java

Hauptklausur: PRGII MD

6. Objektorientiertes Design

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

Objektorientierte Programmierung Studiengang Medieninformatik

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober Klausur II

Images. Kommen auf zweierlei Weise zur Anwendung. Darstellung von Pixelbildern(.jpg,.gif,.png) Bilden die Grundlage für Offscreendrawing

Java für Computerlinguisten

Vorlesung 13. Sitzung Grundlegende Programmiertechniken

Transkript:

Einige vorgefertigte Layout-Manager: FlowLayout LayoutManager GridLayout BorderLayout LayoutManager2 CardLayout GridBagLayout GridBagConstraints 945

FlowLayout: Das Default-Layout der Klasse Panel. Komponenten werden von links nach rechts zeilenweise abgelegt; passt eine Komponente nicht mehr in eine Zeile, rückt sie in die nächste. BorderLayout: Das Default-Layout der Klasse Window. Die Fläche wird in die fünf Regionen North, South, West, East und Center aufgeteilt, die jeweils von einer Komponente eingenommen werden können. CardLayout: Die Komponenten werden wie in einem Karten-Stapel abgelegt. Der Stapel ermöglicht sowohl den Durchgang in einer festen Reihenfolge wie den Zugriff auf spezielle Elemente. GridLayout: Die Komponenten werden in einem Gitter mit gegebener Zeilen- und Spalten-Anzahl abgelegt. GridBagLayout: Wie GridLayout, nur flexibler, indem einzelne Komponenten auch mehrere Felder des Gitters belegen können. 946

Beispiel: Ziel: Eine orange Knopfleiste am linken Rand; drei Knöpfe in der oberen Hälfte der Leiste; auf Knopf-Druck soll die Farbe des Knopfs wechseln; links daneben eine weiße Fläche mit einem schwarzen Quadrat... 947

948

949

Implementierung: Die Knöpfe legen wir mittels GridLayout in ein Panel-Objekt. Die weiße Fläche mit schwarzem Quadrat malen wir auf ein Canvas-Objekt. Ein Frame-Objekt besitzt bereits das BorderLayout. Das Panel-Objekt legen wir im Westen des Frames ab, das Canvas-Objekt in der Mitte. 950

import java.awt.*; import java.awt.event.*; class MyPanel extends Panel implements ActionListener { Button b0, b1, b2; public MyPanel() { setbackground(color.orange); b0 = new Button("red"); b1 = new Button("blue"); b2 = new Button("green"); b0.addactionlistener(this); b1.addactionlistener(this); b2.addactionlistener(this); setlayout(new GridLayout(6,1)); add(b0); add(b1); add(b2); }... 951

DerKonstruktor public GridLayout(int row, int col); teilt die zur Verfügung stehende Fläche in ein Raster von gleich großenfeldernein,dieinrowvielenzeilenundcolvielen Spalten angeordnet sind. die Felder werden sukzessive von links oben nach rechts unten aufgefüllt. Nicht alle Felder müssen tatsächlich belegt werden. Im Beispiel bleibt die Hälfte frei... Gemeinsamer ActionListener für alle drei Knöpfe ist(hier) das Panel selbst... 952

public void actionperformed(actionevent e) { Button b = (Button) e.getsource(); if (b.getbackground() == Color.orange) { if (b == b0) b0.setbackground(color.red); else if (b == b1) b1.setbackground(color.blue); else b2.setbackground(color.green); } else b.setbackground(color.orange); } } // end class MyPanel... Der Aufruf e.getsource(); liefert das Objekt, das das ActionEvent-Objekt erzeugte, hier ein Button-Objekt. Falls die Hintergrunds-Farbe orange ist, modifizieren wir die Farbe. Ansonsten setzen wir sie auf orange zurück. 953

public class Nest extends Frame { public Nest() { setsize(200,150); setlocation(500,500); add(new MyPanel(), "West"); add(new MyCanvas(), "Center"); } public static void main(string[] args) { (new Nest()).setVisible(true);} } // end of class Nest class MyCanvas extends Canvas { public MyCanvas() { setbackground(color.white);} public void paint(graphics page) { page.setcolor(color.black); page.fillrect(50,50,10,10); } } // end of class MyCanvas 954

Ein neues Canvas-Objekt besitzt eigentlich Breite und Höhe 0 und ist damit unsichtbar! Im BorderLayout wird eine Komponente jedoch auf die gesamte zur Verfügung stehende Fläche ausgedehnt. Wie in der Klasse Applet wird zum(neu-)malen der Canvas-Fläche implizit die Objekt-Methode public void paint(graphics page); aufgerufen. 955

...SchlussmitJava!!! 956

WasessonstnochsoinJavagibt:... an nützlichem: innere Klassen;... an mysteriösem: Klassen zur Selbst-Reflektion;... an comfortablem: Malen mit Swing;... an technischem: Networking mit Sockets, RMI, Jini, Corba,......ansonstigem:...:-) 957

24 Tic-Tac-Toe Regeln: Zwei Personen setzen abwechselnd Steine auf ein (3 3)-Spielfeld. Wer zuerst drei Steine in einer Reihe erreicht, gewinnt. Zeilen, Spalten und Haupt-Diagonalen sind Reihen. Beispiel: 958

959

960

961

962

963

964

965

966

... offenbar hat die anziehende Partei gewonnen. Fragen: Ist das immer so? D.h. kann die anziehende Partei immer gewinnen? Wie implementiert man ein Tic-Tac-Toe-Programm, das... möglichst oft gewinnt?... eine ansprechende Oberfläche bietet? 967

Hintergrund: Tic-Tac-Toe ist ein endliches Zwei-Personen-Nullsummen-Spiel. Das heißt: Zwei Personen spielen gegeneinander. Was der eine gewinnt, verliert der andere. Es gibt eine endliche Menge von Spiel-Konfigurationen. Die Spieler ziehen abwechselnd. Ein Zug wechselt die Konfiguration, bis eine End-Konfiguration erreicht ist. Jede End-Konfiguration ist mit einem Gewinn aus R bewertet. Person 0 hat gewonnen, wenn eine End-Konfiguration erreicht wird, deren Gewinn negativ ist, Person 1, wenn er positiv ist. 968

...imbeispiel: Konfiguration: End-Konfigurationen: Gewinn -1 Gewinn 0 Gewinn +2 969

Spiel Zug: Alle möglichen Spiel-Verläufe lassen sich als ein Baum darstellen: 970

Spiel Zug: Alle möglichen Spiel-Verläufe lassen sich als ein Baum darstellen: 971

0 2 2 4 5 1 972

Knoten des Spielbaums == Konfigurationen Kanten == Spiel-Züge Blätter == End-Konfigurationen Frage: Wie finden wir(z.b. als blaue Person) uns im Spiel-Baum zurecht? Was müssen wir tun, um sicher ein negatives Blatt zu erreichen? 973

Idee: Wir ermitteln für jede Konfiguration den jeweils besten zu erzielenden Gewinn. Seien die Gewinne für sämtliche Nachfolger einer Konfiguration bereits ermittelt. Fall1:DieKonfigurationistblau:wirsindamZug.Wir können garantiert das Minimum der Gewinne der Söhne erzielen. Fall2:DieKonfigurationistrot:derGegneristamZug.Er kann garantiert das Maximum der Gewinne der Söhne erzielen. 974

Maximum!!! 0 2 2 4 5 1 975

Minimum!!! 4 0 1 2 2 4 5 1 976

Maximum!!! 4 0 1 2 4 0 1 2 2 4 5 1 977

Minimum!!! 4 1 2 4 0 1 2 4 0 1 2 2 4 5 1 978

4 Blau gewinnt!!! 4 1 2 4 0 1 2 4 0 1 2 2 4 5 1 979

Eine Strategie ist eine Vorschrift, die uns in jeder(erreichbaren) Konfiguration mitteilt, welchen Nachfolger wir auswählen sollen. Eine optimale Strategie ist eine, deren Anwendung garantiert zu einer End-Konfiguration führt, deren Wert mindestens so groß ist wie der berechnete garantierte Gewinn. Eine akzeptable Strategie ist eine, deren Anwendung einen Verlust des Spiels verhindert, wannimmer das möglich ist... 980

4 Blau gewinnt!!! 4 1 2 4 0 1 2 4 0 1 2 2 4 5 1 981

4 blaue Strategie... 4 1 2 4 0 1 2 4 0 1 2 2 4 5 1 982

4 rote Strategie... 4 1 2 4 0 1 2 4 0 1 2 2 4 5 1 983

24.1 Überblick über das Tic-Tac-Toe-System GUI Komponenten Game Arena Frame MyButton Button has object variable Cross Canvas contains as component PlayGround MoveObserver Circle ActionListener Canvas creates MyDialog Strategie Frame MyChoice YourChoice 984

Bemerkung: Der Aufbau besteht konzeptuell aus drei Komponenten: der internen Repräsentation des Spiels, des aktuellen Zustands und der Spiellogik == das Modell der externen graphische Benutzeroberfläche, mit der die Benutzerin interagiert == die Ansicht einer Kontrollschicht, die die Aktionen der Benutzerin an die Implementierung der Spiellogik weiterleitet und die Reaktion darauf auf der Oberfläche sichtbar macht == die Kontrolle 985

Zusammen: Model-View-Control Ein solcher Aufbau ist typisch für viele interaktive Anwendungssysteme. Neben MVC gibt es für viele weitere häufige Anwendungssituationen nützliche Standard-Vorgehensweisen. Diese nennt man auch Design Patterns. Software Engineering 986

24.2 Berechnung einer Strategie Die Knoten des Spiel-Baums sind aus den Klassen YourChoice und MyChoice. MyChoice implementiert Knoten, in denen das Programm zieht. YourChoice implementiert Knoten der Spielerin. Jeder Knoten enthält: das aktuelle Spielbrett ground, einen garantierten Gewinn value sowie(verweise auf) die Nachfolger-Knoten. MyChoice-Knoten enthalten zusätzlich den empfohlenen Zug acceptablechoice. 987

public class YourChoice implements PlayConstants { private PlayGround ground; private int value; private MyChoice[] answer; public YourChoice(PlayGround g, int place) { ground = new PlayGround(g,place,ME); answer = new MyChoice[9]; value = ME; PossibleMoves moves = new PossibleMoves(ground); for(int choice = moves.next(); choice!=-1; choice = moves.next()) if (ground.won(choice,you)) { value = YOU; continue;} answer[choice] = new MyChoice(ground,choice); int win = answer[choice].value(); if (win < value) value = win; } }... 988

Das Interface PlayConstants fasst durchgängig benutzte Konstanten zusammen. YOU < NONE < ME repräsentieren die drei möglichen Ausgänge eines Spiels bzw. Belegungen eines Felds des Spielbretts(-1, 0 und2). Die Klasse PlayGround repräsentiert Spielbretter. Das aktuelle Spielbrett wird aus demjenigen des Vater-Knotens und dem von ME gewählten Zug gestimmt. MyChoice answers[choice] enthält den Teilbaum für Zug choice. Das Objekt PossibleMoves moves enumeriert alle aktuell freien Positionen für Steine(mindestens eine:-) Gewinnt der Zug choice, wird value = YOU gesetzt. Andernfalls wird value auf das Minimum des Werts des Unterbaums answers[choice] und des alten Werts gesetzt. 989

... public int value() { return value;} public MyChoice answer(int place) { return answer[place]; } } // end of class YourChoice public int value(); liefert den Spielwert des aktuellen Spielbaums. public MyChoice answer(int place); liefertden Spiel-Teilbaum für den Zug place. 990