23.12.2012 Aufrufe

GI-Kap 4 grafik - HS-Harz M. Wilhelm - Hochschule Harz

GI-Kap 4 grafik - HS-Harz M. Wilhelm - Hochschule Harz

GI-Kap 4 grafik - HS-Harz M. Wilhelm - Hochschule Harz

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Graphische Nutzerschnittstellen<br />

� Dipl.-Inf., Dipl.-Ing. (FH) Michael <strong>Wilhelm</strong><br />

� <strong>Hochschule</strong> <strong>Harz</strong><br />

� FB Automatisierung und Informatik<br />

� mwilhelm@hs-harz.de<br />

� Raum 2.202<br />

� Tel. 03943 / 659 338<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

1. Einführung, Literatur, Begriffe<br />

2. Architektur eines Fenstersystems<br />

3. Java-Dialog (Dialog/SDI/MDI)<br />

4. Grafik in Java<br />

Inhalt<br />

5. Benutzeroberfläche (Layout, Dialog, RDI, GUI-Elemente)<br />

6. Design Pattern (Framework, Mehrschicht Anwendung)<br />

7. Testroutinen (JUnit)<br />

8. JDBC (Datenbankanbindung)<br />

9. Threads<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

1<br />

1


Benutzeroberflächen: Zeichnen in Java<br />

Benötigte Elemente:<br />

• Linien (Farbe, Strichdicke, Strichart)<br />

• Zeichenblatt (JFrame, JPanel, Canvas)<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Benutzeroberflächen: Zeichnen in Java<br />

Methode Beschreibung<br />

clearRect() Löscht ein Gebiet der Zeichenfläche<br />

copyArea() kopiert ein Rechteck innerhalb der Zeichenfläche<br />

drawArc() zeichnet einen Bogen<br />

drawLine() zeichnet eine Gerade<br />

drawOval() zeichnet eine Ellipse<br />

drawPolygon() zeichnet ein Polygon (Array)<br />

drawRect() zeichnet ein Rechteck<br />

drawRoundRect() zeichnet ein Rechteck mit abgerundeten Ecken<br />

fillArc() füllt einen Bogen mit Farbe<br />

fillOval() füllt ein Oval mit Farbe<br />

fillPolygon() füllt ein Polygon mit Farbe<br />

fillRect() füllt ein Rechteck mit Farbe<br />

getColor() gibt die aktuelle Zeichnungsfarbe aus<br />

getFont() gibt den aktuellen Zeichensatz aus<br />

getFontMetrics() gibt die aktuellen Parameter des Zeichensatzes aus<br />

setColor() legt die Zeichnungsfarbe fest<br />

setFont() setzt den aktuellen Zeichensatz<br />

drawString(…) HexEditor<br />

drawChars() Array von Char´s<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

3<br />

4<br />

2


Zeichnen in Java: Linien<br />

Linien zeichnen<br />

public void paint (Graphics g)<br />

{<br />

int x = 80;<br />

for (int i=0; i


Zeichnen in Java: Linien<br />

import java.awt.*;<br />

import javax.swing.JFrame;<br />

public class Linie01 extends JFrame {<br />

public Linie01() {<br />

setDefaultCloseOperation(…);<br />

this.getContentPane().add(<br />

new CCanvas(),<br />

BorderLayout.CENTER );<br />

} // construktor<br />

Update:<br />

• canvas.update( canvas.getGraphics() );<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Zeichnen in Java: Linien<br />

class CCanvas extends Canvas {<br />

private int count=0;<br />

public void paint (Graphics g)<br />

{<br />

count=count+1;<br />

System.out.println(count+". zeichnen");<br />

g.setColor(Color.white);<br />

g.fillRect(0,0, getWidth(), getHeight() );<br />

g.setColor(Color.red);<br />

int width,height;<br />

width = this.getWidth();<br />

height = this.getHeight();<br />

g.drawLine(0,0,width,height);<br />

}<br />

}<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

public static void main(String[] args)<br />

{<br />

Linie01 f ;<br />

f = new Linie01();<br />

f.setSize(500, 300);<br />

f.setTitle("1. Grafikbeispiel");<br />

f.setVisible(true);<br />

} // main<br />

} // class<br />

class CCanvas extends Canvas {<br />

public void paint (Graphics g)<br />

{<br />

int x = 80;<br />

for (int i=0; i


Zeichnen in Java: Linien<br />

Linien zeichnen<br />

Links /oben :100,100<br />

Rechts / unten:600,400<br />

mitte / oben: 350, 50<br />

� Vorlesungsaufgabe<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Vorlesungsaufgabe:<br />

public void paint (Graphics g)<br />

{<br />

g.drawLine(100,100, 600,100); // waagerecht oben<br />

g.drawLine(600,100, 600,400); // senkrecht rechts<br />

g.drawLine(100,400, 600,400); // waagerecht unten<br />

g.drawLine(100,100, 100,400); // senkrecht links<br />

g.drawLine(100,100, 600,400); // links oben nach rechts unten<br />

g.drawLine(100,400, 600,100); // links unten nach rechts oben<br />

g.drawLine(100,100, 350, 50); // links oben nach rechts unten<br />

g.drawLine(350, 50, 600,100); // links unten nach rechts oben<br />

}<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Line03<br />

Line2<br />

9<br />

10<br />

5


Sinusfunktionen:<br />

double f(double x) {<br />

return (Math.cos(x/5) + Math.sin(x/7) + 2) * getSize().height / 4;<br />

}<br />

public void paint (Graphics g)<br />

{<br />

for (int x = 0 ; x < getSize().width ; x++) {<br />

g.drawLine(x, f(x), x + 1, f(x + 1));<br />

}<br />

}<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

class CCanvas extends Canvas {<br />

double f(double x) {<br />

return (Math.cos(x/5) + Math.sin(x/7) + 2) * getSize().height / 4;<br />

}<br />

}<br />

public void paint (Graphics g) {<br />

g.setColor(Color.white);<br />

g.fillRect(25,25,<br />

getWidth()-50, getHeight()-50 );<br />

g.setColor(Color.red);<br />

for (int x = 0 ; x < getSize().width ; x++) {<br />

g.drawLine(x, (int) f(x), x + 1, (int) f(x + 1));<br />

}<br />

}<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Line04<br />

Line04<br />

11<br />

12<br />

6


Sinusfunktionen:<br />

double f(double x) {<br />

return ( Math.sin(x/7) + 2) * getSize().height / 4;<br />

}<br />

public void paint (Graphics g)<br />

{<br />

Color c;<br />

Font f;<br />

for (int x = 0 ; x < getSize().width ; x++) {<br />

g.drawLine(x, (int)f(x), x + 1, (int)f(x + 1));<br />

c = g.getColor();<br />

f = g.getFont();<br />

}<br />

}<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Gedämpfte Sinusschwingung:<br />

double f(double x) {<br />

return ( Math.sin(x/7)*Math.exp(-x*0.002) + 2) * getSize().height / 4;<br />

}<br />

public void paint (Graphics g)<br />

{<br />

Color c;<br />

Font f;<br />

for (int x = 0 ; x < getSize().width ; x++) {<br />

g.drawLine(x, (int)f(x), x + 1, (int)f(x + 1));<br />

c = g.getColor();<br />

f = g.getFont();<br />

}<br />

}<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Line05<br />

Line6<br />

13<br />

14<br />

7


Zeichnen in Java: Rechteck<br />

Aufgabe: Zeichnen von 10 Rechtecken<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Zeichnen in Java: Rechteck<br />

public void paint (Graphics g)<br />

{<br />

int x, y; // Mittelpunkt<br />

int w, h; // Breite Höhe<br />

for (int i=0; i


Zeichnen in Java: Rechteck<br />

Recchteck Koordinaten<br />

x0 = 200;<br />

y0 = 200;<br />

diffx = 50;<br />

diffy = 25;<br />

diff wird nach jedem Zeichen um<br />

10 Punkte erhöht<br />

� Vorlesungsaufgabe<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Zeichnen in Java: Rechtecke zeichnen<br />

diff<br />

diff<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Rect2<br />

Rect2<br />

17<br />

18<br />

9


Vorlesungsaufgabe:<br />

int x0, y0; // Mittelpunkt<br />

int x, y; // Mittelpunkt links / oben<br />

int w, h; // Breite Höhe<br />

int diff;<br />

x0 = 200; y0 = 200; diff = 50;<br />

g.setColor(Color.red);<br />

g.drawLine(x0-200,y0,x0+200,y0); g.drawLine(x0,y0-200,x0,y0+200);<br />

g.setColor(Color.blue);<br />

for (int i=0; i> 1); // SHR<br />

h = diff;<br />

w = diff


Zeichnen in Java: Kreis<br />

public void paint (Graphics g)<br />

{<br />

int x0, y0; // Mittelpunkt<br />

int d; // Durchmesser<br />

int r; // Radius<br />

x0 = 300;<br />

y0 = 300;<br />

for (int i=0; i> 1;<br />

g.drawOval(x0-r,y0-r,d,d);<br />

}<br />

}<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Zeichnen in Java: Kreis<br />

public void paint (Graphics g)<br />

{<br />

int x, y; // Mittelpunkt<br />

int d; // Durchmesser<br />

int r; // Radius<br />

x = 300;<br />

y = 300;<br />

for (int i=0; i> 1;<br />

g.drawOval(x-r,y-r,d,d);<br />

}<br />

}<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Circle2<br />

Circle2<br />

21<br />

22<br />

11


Zeichnen mit eine eigenen Klasse<br />

• Ableiten von Canvas oder JPanel<br />

• Implementieren der paint-Methode<br />

− public void paint (Graphics g) {<br />

− this.paintComponents(g);<br />

− g.setColor(Color.white);<br />

− g.fillRect(0,0, this.getWidth(), this.getHeight());<br />

− g.setColor( Color.blue );<br />

− g.drawLine(10,10, getWidth()-10,getHeight()-10) ;<br />

− } // paint<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Methode drawString<br />

• drawString(String s, int x, int y);<br />

• Abmessungen Klasse FontMetrics:<br />

− public void paint (Graphics g) {<br />

− this.paintComponents(g);<br />

− …<br />

− }<br />

• Beispiel:<br />

− Font f1 = new Font("Courier New", Font.PLAIN, size);<br />

− FontMetrics fontMetrics = g.getFontMetrics(f1);<br />

− int rowHeight = fontMetrics.getHeight();<br />

− int margin = fontMetrics.stringWidth("XXXX");<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

23<br />

24<br />

12


Klasse Font<br />

Font[] ff = java.awt.GraphicsEnvironment.getAllFonts();<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Font myFont=new Font("Arial", Font.ITALIC | Font.PLAIN, 18);<br />

String s="ABCghi";<br />

// holen der Daten für den Font und des Strings<br />

LineMetrics lm = myFont.getLineMetrics( s,<br />

new FontRenderContext(<br />

new AffineTransform(),<br />

true, //antialiased<br />

true //use fractional metrics?<br />

)<br />

);<br />

// Abmessungen für ausgeben:<br />

System.out.println("String: "+s);<br />

System.out.println("Schriftart: "+myFont.getFontName());<br />

System.out.println("Schriftgröße: "+myFont.getSize());<br />

System.out.println("-------------");<br />

System.out.println("Ascent: "+lm.getAscent());<br />

System.out.println("+Descent: "+lm.getDescent());<br />

System.out.println("+Leading: "+lm.getLeading());<br />

System.out.println("=Height: "+lm.getHeight());<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

25<br />

26<br />

13


AttributedCharacterIterator (String02)<br />

Aliasing an:<br />

• Graphics2D g2d=(Graphics2D)g;<br />

• g2d.setRenderingHint(<br />

RenderingHints.KEY_ANTIALIASING,<br />

RenderingHints.VALUE_ANTIALIAS_ON );<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

AttributedCharacterIterator (String03)<br />

• Ausgabe mit Attributen<br />

addAttribute(<br />

AttributedCharacterIterator.Attribute attribute,<br />

Object value, // z. B. 1)<br />

int beginIndex,<br />

int endIndex<br />

)<br />

1) GradientPaint<br />

TextAttribute.UNDERLINE_LOW_DASHED<br />

TextAttribute.SWAP_COLORS_ON<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

27<br />

28<br />

14


AttributedCharacterIterator (String03)<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Font f1 = new Font("Arial", Font.PLAIN, 36);<br />

Font f2 = new Font("Times New Roman", Font.PLAIN, 60);<br />

AttributedString as = new AttributedString("Informatik ist toll, aber<br />

auch Mathematik oder Sport");<br />

as.addAttribute( TextAttribute.FONT, f1 );<br />

as.addAttribute( TextAttribute.FOREGROUND, new GradientPaint(<br />

0,0,<br />

Color.red,<br />

0,10,<br />

Color.white ,true ), 15,19);<br />

( as.getIterator(), 30,100 );<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

29<br />

30<br />

15


as.addAttribute( TextAttribute.FONT, f2, 0, 4 );<br />

as.addAttribute( TextAttribute.FOREGROUND,<br />

new GradientPaint(<br />

0,0,<br />

Color.blue,<br />

10,0,<br />

Color.green ,true ), 26,31); // "auch" setzen<br />

as.addAttribute( TextAttribute.FONT, f2, 26, 31 );<br />

as.addAttribute( TextAttribute.UNDERLINE,<br />

TextAttribute.UNDERLINE_LOW_DASHED, 31,41 );<br />

as.addAttribute( TextAttribute.SWAP_COLORS,<br />

TextAttribute.SWAP_COLORS_ON, 22,27 );<br />

g2d.drawString( as.getIterator(), 30,100 );<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Dialog_2D: Strichstärken und Strichmuster<br />

public void paint (Graphics g) {<br />

int x = 80;<br />

Rectangle r = new Rectangle();<br />

g.getClipBounds(r);<br />

Graphics2D g2 = (Graphics2D) g;<br />

float [] dashs = {40.0f, 5.0f}; // Länge Strich , Pause<br />

// BasicStroke(float width, int cap, int join, float miterlimit,<br />

// float[] dash, float dash_phase) // 1.0f = miterlimit<br />

g.setColor(Color.WHITE);<br />

g.fillRect(0,0, getWidth(), getHeight() );<br />

g2.setStroke( new BasicStroke(LineWidth, BasicStroke.CAP_BUTT,<br />

BasicStroke.JOIN_MITER, 1.0f, dashs, 0.0f ) );<br />

g.setColor(Color.RED);<br />

for (int i=10; i< r.getWidth()-10; i++) {<br />

x = (int) (6.0*Math.random());<br />

if (x==2) g.drawLine(i,20,i,(int) r.getHeight()-10 );<br />

} // for<br />

} // paint<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

31<br />

32<br />

16


FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Beispiele in Grafik2D: nikolaus1, nikolaus2, nikolaus3<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

33<br />

34<br />

17


Dialog_Area_2D<br />

Dialog_Line_2D<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

Dialog_Picture2_2D<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

35<br />

36<br />

18


Dialog_Transform1_2D: Transformation, Skalierung und Scherung<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

MemoryMonitor<br />

FB Automatisierung und Informatik: Graphische Nutzerschnittstellen<br />

37<br />

38<br />

19

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!