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, Dipl.-Ing. D. Dörschlag
Einführung in die
Programmierung mit Java
15. Vorlesung WS 2004/2005
Übersicht
• Benutzeroberflächen
– Interaktive Graphik
– Änderung der Liniendicke
Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
2
Interaktives Zeichnen
•
bisher: Zeichnen fest in „paint“ programmiert
– Objekte wurden in "paint" erzeugt und gemalt
•
Interaktives Zeichnen:
– Objekte werden durch Mausklick erzeugt und an
Mausposition gezeichnet
Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
3
Interaktives Zeichnen: Übersicht
•
Interaktives Zeichnen: 3 Schritte
1. Liste (LinkedList) mit zu zeichnenden Objekten (Shapes)
– Liste ist Attribut des JFrame
– Liste muss mit new im Konstruktor des JFrame erzeugt
werden
2. in „paint“ wird LinkedList durchlaufen und für jedes Shape
darin die Methode „draw“ aufgerufen
3. Die LinkedList wird mit Shapes gefüllt in z.B. Methode, die
auf Mausklicks in JFrame reagiert
– Klickkoordinaten: getX()/getY() des MouseEvents
– Aufruf der Methode repaint() des JFrame löst Aufruf von
paint() aus
Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
4
Interaktives Zeichnen - Beispiel I/II
public class MeinFenster extends JFrame {
LinkedList ll; //Attribut des JFrame
public MeinFenster() {
super();
ll = new LinkedList();...}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
Iterator it = ll.iterator();
while(it.hasNext()) {
Object o = it.next();
Shape s = (Shape) o;
g2d.fill(s);}
Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
5
Interaktives Zeichnen - Beispiel II/II
public void mouseClicked(java.awt.event.MouseEvent e) {
ll.add(new Rectangle(e.getX(), e.getY(),5,8));
repaint();
}
Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
6
Änderung von Linieneigenschaften
• z.B. Dicke, Linienübergänge, Linienform (z.B.
gestrichelt)
• Linieneigenschaften: Objekt der Klasse BasicStroke
• einfachster Konstruktor: BasicStroke(float width)
• Objekt von BasicStroke muss erzeugt werden und
dem Graphics2D-Objekt mit Methode
setStroke(BasicStroke) übergeben werden
• Beispiel:
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setStroke(new BasicStroke(7));
.....
Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
7
Liniendicke und Verbindungsart
Konstruktoren ( hier interessante)
BasicStroke stroke = new BasicStroke( width);
BasicStroke stroke = new BasicStroke( float width, int cap, int join);
Strichstärke
(width)
Form des Linienendes (cap) :
2. CAP_ROUND
1. CAP_BUT
3. CAP_SQUARE
Form des Linienverbindung (join) :
1. JOIN_BEVEL
2. JOIN_MITER
3. JOIN_ROUND
Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
8
Liniendicke und Verbindungsart: Beispiel
• public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setStroke(
new BasicStroke(7,
BasicStroke.CAP_SQUARE,
BasicStroke.JOIN_MITER)
);
.....
Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
9
Übungsaufgabe
• Programmiert ein JFrame, das auf Mausklick Kreise
an der Klickposition darstellt. Die Liniendicke der
Kreise soll interaktiv (Textfeld + Button) änderbar
sein.
Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05
10
Herunterladen