Kein Folientitel - Institut für Geodäsie und Geoinformation der

Werbung
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger
Einführung in die
Programmierung mit Java
11. Vorlesung WS 2002/2003
Übersicht
• Besprechung der Hausaufgabe
• Allgemeine Listen/Suchstrukturen
(Fortsetzung)
• Benutzeroberflächen (Fenster, Menüs, Buttons,
Texteingabefenster, ...)
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
2
Hausaufgabe
Schreibt eine Methode der Klasse Polygon, die den
Flächeninhalt eines Polygons berechnet.
Hinweise:
• Orientiert euch an der Methode "Umfang"
• Formel zur Berechnung des Flächeninhalts
(Gaussche Flächenformel) in Diskreter Mathe,
Vorlesung 2:
5
F=
S
1
(xk - xk+1)(yk +
2 k = 1yk+1)
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
3
Wh.: Klasse "Polygon": Methode Umfang
public class Polygon{
protected LinkedList punktliste;
public double umfang() {
double umfang = 0;
Iterator ersterIt = punktliste.iterator();
Iterator zweiterIt = punktliste.iterator();
zweiterIt.next();
Punkt ersterPt, zweiterPt;
while(zweiterIt.hasNext()) {
ersterPt = (Punkt) ersterIt.next();
zweiterPt = (Punkt) zweiterIt.next();
umfang = umfang + ersterPt.abstand(zweiterPt);
}
ersterPt = (Punkt) punktliste.getLast();
zweiterPt = (Punkt) punktliste.getFirst();
umfang = umfang + ersterPt.abstand(zweiterPt);
return umfang;}
}
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
4
Klasse "Polygon": Methode Flächeninhalt
public class Polygon{
protected LinkedList punktliste;
public double flaecheninhalt() {
double f = 0;
Iterator ersterIt = punktliste.iterator();
Iterator zweiterIt = punktliste.iterator();
zweiterIt.next();
Punkt ersterPt, zweiterPt;
while(zweiterIt.hasNext()) {
ersterPt = (Punkt) ersterIt.next();
zweiterPt = (Punkt) zweiterIt.next();
f = f + (ersterPt.x() - zweiterPt.x()) *
(ersterPt.y() + zweiterPt.y());
}
ersterPt = (Punkt) punktliste.getLast();
zweiterPt = (Punkt) punktliste.getFirst();
f = f + (ersterPt.x() - zweiterPt.x()) *
(ersterPt.y() + zweiterPt.y());
return Math.abs(f * 0.5);}
}
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
5
Wh.: Listen und Mengen: vordefinierte Klassen
Einfache Container-Datenstrukturen
Assoziative Datenstrukturen
AbstractCollection
AbstractMap
keine Duplikate
Set
LinkedList
ArrayList
TreeSet
sortiert
Map
HashSet
TreeMap
HashMap
sortiert
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
6
Wh.: Laufzeiten / Komplexität
Klasse
Einfügen/
Löschen
Suchen
Suchen mit Key
LinkedList/
ArrayList
const.
O(n)
TreeSet
O(log n)
O(log n)
HashSet
const.
const. (mittel)
TreeMap
O(log n)
O(log n)
HashMap
const.
const.(mittel)
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
7
HashMaps
• Speichern Objekte (Klasse Object) in Struktur
• Zuordnung eines (Such-)Schlüssel zu Objekt
(Key-Value-Pair)
• effizientes Suchen über Schlüssel (Key)
• Key muss eindeutig sein (sonst wird letzter Eintrag
mit identischem Key überschrieben)
• Methoden:
–
–
–
–
void put(Object Key, Object Value)
Object get(Object Key)
void clear()
int size()
//Einfügen
//Suchen
• Weitere Methoden: JavaDoc
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
8
Beispiel zu HashMap
//Speicherung von Studenten in einer Struktur, in der
//Studenten effizient nach Namen gesucht werden können
import java.util.*;
.....
HashMap h = new HashMap();
//Erzeugen von Schlüsseln und Einfügen
h.put("Schmitz",new Student("Schmitz","Peter"));
h.put("Meyer",new Student("Meyer","Thomas"));
h.put("Schulz",new Student("Schulz","Bernd"));
h.put("Bauer",new Student("Bauer","Bettina"));
.....
Student s = (Student) h.get("Schulz");
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
9
Wrapper-Klassen
• Keys einer HashMap: Unterklasse von Object
• Problem: einfache Datentypen (int, long, double,...)
sind keine Unterklassen von Object
• Lösung: Wrapper-Klassen: "Verpacken" eines
einfachen Datentyps in Klasse
• Welche gibt es?
– Klasse Integer: Bsp.: Integer i = new Integer(1234);
– Klasse Double: Bsp.: Double d = new Double(1234.565);
– ebenso für andere einfache Datentypen (char, boolean, ...)
• Methoden der Wrapper-Klassen: JavaDoc
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
10
Beispiel 1 zu HashMaps mit Wrapper-Klassen
import java.util.*;
.....
HashMap h = new HashMap();
//Erzeugen von Schlüsseln und Einfügen
h.put(new Integer(45678),new Student("Schmitz","Peter"));
h.put(new Integer(76453),new Student("Meyer","Thomas"));
h.put(new Integer(43234),new Student("Schulz","Bernd"));
h.put(new Integer(56784),new Student("Bauer","Bettina"));
.....
Student s = (Student) h.get(new Integer(76453));
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
11
Beispiel 2 zu HashMaps mit Wrapper-Klassen
import java.util.*;
.....
HashMap h = new HashMap();
//Erzeugen von Schlüsseln und Einfügen
for(int matNr = 1 ; matNr < 100000 ; matNr = matNr + 1)
{
Student s = new Student("Schmitz","Peter",matNr);
Integer key = new Integer(matNr);
h.put(key, s);
}
//Suche:
Student s = (Student) h.get(new Integer(76453));
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
12
Benutzeroberflächen: Bibliotheken
Java-Klassenbibliotheken:
• AWT (Abstract Window Toolkit)
– historisch erste Java-Klassenbibliothek für Oberflächen
– Aussehen abhängig vom Betriebssystem
– Paket java.awt.*
• Swing
– Erweiterung des AWT
– Aussehen unabhängig vom Betriebssystem
– Paket javax.swing.*
• Weitere
– Java 2D /3D
– Drag and Drop
– ....
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
13
Erzeugen einer Anwendung ("Frame")
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
14
Ergebnis: Unterklasse von "Frame"
Form
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
15
Einfügen eines "Button"
1. Klick
2. Klick
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
16
Einfügen eines Menüs
1. Klick
2. Klick
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
17
Ergänzen des Menüs um "MenueItems"
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
18
Ausführen des Programms
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
19
Verknüpfen von MenueItem mit Methode
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
20
Ergebnis: Methode zu MenueItem
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
21
Verknüpfen von Button mit Methode
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
22
Ergebnis: Methode zu Button (bei Mausklick)
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
23
Übungsaufgabe
• Programmiert eine Anwendung mit einem Button. Bei
Klick auf diesen Button soll der Text "Hallo"
ausgegeben werden.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
24
Ändern des Layouts
1. Klick
2. Klick
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
25
Ausführen des Programms
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
26
Einfügen eines Textfeldes
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
27
Ausführen des Programms
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
28
Erzeugte Attribute
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
29
Literatur zu Forte
•
•
•
•
Forte QuickStart Guide (PDF)
Forte User Guide (PDF)
Forte Tutorials Guide (PDF)
zu finden auf der WWW-Seite dieser Veranstaltung
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
30
Anmerkung
• bisher (ohne Frames):
– Erzeugen einer Klasse mit Methode "main"
– eigener Programmcode in "main" (oder in Methoden, die von
"main" aus aufgerufen werden)
• mit Frames:
– Erzeugen einer Unterklasse von Frame (JFrame)
– eigener Programmcode in Methode, die auf ButtonKlick/Menuewahl/sonst. Ereignis reagiert
– eine "main" gibt es hier auch, ist aber für uns nicht relevant
– zusätzlich wird eine Frame-Datei erzeugt
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
31
Eigenschaften: der Component Inspector
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
32
Methoden für Textfelder
Methoden der Klasse java.awt.TextField:
• String getText()
• void setText(String)
• weitere Methoden: Javadoc
Beispiel:
java.awt.TextField t;
....................
String st = t.getText();
t.setText(st+st);
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
33
Übungsaufgabe
• Schreibt eine Anwendung mit einem Button und zwei
Textfeldern, so dass beim Klicken des Buttons der
Text des einen Textfeldes im anderen Textfeld in
Grossbuchstaben erscheint:
• Hinweis:
– die Methode toUpperCase() wandelt einen String in
Grossbuchstaben um
– Das Klicken auf einen Button löst den Event
• Events - Mouse - MouseClicked
aus
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
34
Weitere Methoden
Methode der Klasse java.awt.Frame:
• void setSize(int, int )
– z.B. setSize(500,500);
• void setBackground(Color)
– z.B. setBackground(java.awt.Color.magenta);
Methoden der Klasse java.awt.Button:
• void setLabel(String)
• void setForeground(Color)
• void setBackground(Color)
• weitere Methoden: Javadoc
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
35
Umwandeln von String in Zahl
• typische Anwendung: mit Eingabe in Textfeld soll
gerechnet werden.
• Methode: static int parseInt(String) der
Klasse Integer
• Beispiel:
java.awt.TextField tf;
........
String s = tf.getText();
int i = Integer.parseInt(s);
int j = 3*i + 8;
• Vorsicht: Wenn im String keine "Zahl" steht, stürzt das
Programm ab (Lösung: Ausnahmebehandlung,
Exceptions)
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
36
Hausaufgabe
• Programmiert eine Anwendung, die eine Temperatur von
Celsius nach Fahrenheit und umgekehrt umrechnet. Die
Ausgangstemperatur soll interaktiv eingegeben werden. Die
Richtung der Berechnung soll über eine Checkbox eingestellt
werden. Die Anwendung soll also so oder so ähnlich aussehen:
• Hinweis: das Programm zur Temperaturumrechnung findet Ihr in
Vorlesung 3 (Musterlösung zur Hausaufgabe)
• Label (wie "Celsius") erzeugt mal mit
• Eine Checkbox erzeugt man mit
. Die Methode
boolean getState() der Klasse Checkbox gibt an, ob ein
Häkchen da ist (true) oder nicht (false).
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
37
Herunterladen