Hoofdstuk 12:

64
JAVA 1 Hoofdstuk 12: Grafische mogelijkheden en Java2D

description

Hoofdstuk 12:. Grafische mogelijkheden en Java2D. Object. Color. Component. Arc2D. Font. FontMetrics. Graphics. BasicStroke. Polygon. Classes and interfaces from the Java2D API that appear in package java.awt. Classes from the Java2D API that appear in package java.awt.geom. - PowerPoint PPT Presentation

Transcript of Hoofdstuk 12:

Page 1: Hoofdstuk 12:

JAVA 1

Hoofdstuk 12:

Grafische mogelijkheden en Java2D

Page 2: Hoofdstuk 12:

JAVA 2

Gebruikte klassen en interfaces

Classes and interfaces from the Java2D API that appear in package java.awt

Object

Color

Component

Font

FontMetrics

Graphics

Polygon

Graphics2D interface java.awt.Paint

interface java.awt.Shape

interface java.awt.Stroke

Classes from the Java2D API that appear in package java.awt.geom

GradientPaint

BasicStroke

TexturePaint

RectangularShape

GeneralPath

Line2D

RoundRectangle2D

Arc2D

Ellipse2D

Rectangle2D

Page 3: Hoofdstuk 12:

JAVA 3

1 Inleiding Grafische mogelijkheden van Java

2D-vormen Kleuren (class Color) Lettertypen (class Font)

Java 2D API Uitgebreide grafische mogelijkheden

Aangepaste 2D-vormen Vormen opvullen met kleuren en patronen

Page 4: Hoofdstuk 12:

JAVA 4

1 Inleiding Coördinatenstelsel in Java

Identificeert alle punten op een scherm Linkerbovenhoek heeft coördinaten (0,0) en bevindt

zich achter de titelbalk van het venster.De methode getInsets() levert een Insets object af (top, bottom, left, right: aantal pixels tussen de rand van het venster en het tekengebied).

Elk punt bestaat uit een x-coördinaat en een y-coördinaat

De eenheid is de pixel

Page 5: Hoofdstuk 12:

JAVA 5

Coördinatenstelsel in JavaX-as

Y –as

(0, 0)

( x, y)

Page 6: Hoofdstuk 12:

JAVA 6

2 Grafische context en grafische objecten

Grafische context Maakt tekenen mogelijk op het scherm Een graphics object beheert de grafische context

Controleert hoe gegevens worden getekend class Graphics is abstract

Kan niet geïnstantieerd worden Draagt bij tot de overdraagbaarheid van Java

class Component heeft een methode paint met als argument een Graphics object public void paint (Graphics g) De methode paint wordt zelden aangeroepen omdat het grafisch tekenen een event-driven proces is De methode repaint roept de methode update aan die op haar beurt de methode paint aanroept. Deze methode repaint mag niet overriden worden.

raphics object beheert de grafische context Controleert hoe gegevens worden getekend

De klasse Graphics is abstract Kan niet geïnstantieerd worden Draagt bij tot de overdraagbaarheid van Java

De klasse Component heeft een methode paint met als argument een Graphics objectpublic void paint( Graphics g )

Wordt aangeroepen via de methode repaint

Page 7: Hoofdstuk 12:

JAVA 7

3 Gebruik van kleuren class Color

Bevat methoden en constanten om kleuren te manipuleren

Kleuren worden gecreëerd vertrekkende van rode, groene en blauwe bestanddelen

RGB waarden: int tussen 0 en 255 float tussen 0.0 en 1.0 Java biedt een keuze aan uit 256x256x256 (16,7 miljoen)

mogelijke kleuren

Page 8: Hoofdstuk 12:

JAVA 8

Color Constante Kleur RGB waarde

public final static Color orange oranje 255, 200, 0 public final static Color pink roze 255, 175, 175 public final static Color cyan cyaan 0, 255, 255 public final static Color magenta magenta 255, 0, 255 public final static Color yellow geel 255, 255, 0 public final static Color black zwart 0, 0, 0 public final static Color white wit 255, 255, 255 public final static Color gray grijs 128, 128, 128 public final static Color lightGray Licht grijs 192, 192, 192 public final static Color darkGray donker grijs 64, 64, 64 public final static Color red rood 255, 0, 0 public final static Color green groen 0, 255, 0 public final static Color blue blauw 0, 0, 255

Statische constanten van de class Color

Page 9: Hoofdstuk 12:

JAVA 9

Methoden van de class ColorMethode Beschrijving public Color( int r, int g, int b )

Creëert een kleur gebaseerd op rode, groene en blauwe bestanddelen uitgedrukt als integers tussen 0 en 255.

public Color( float r, float g, float b )

Creëert een kleur gebaseerd op rode, groene en blauwe bestanddelen uitgedrukt als floating-point waarde tussen 0.0 en 1.0.

public int getRed() // Color class

Levert een waarde af tussen 0 en 255 die het rode bestanddeel voorstelt.

public int getGreen() // Color class

Levert een waarde af tussen 0 en 255 die het groene bestanddeel voorstelt.

public int getBlue() // Color class

Levert een waarde af tussen 0 en 255 die het blauwe bestanddeel voorstelt.

public Color getColor() // Graphics class

Levert een Color object af dat de huidige kleur van de grafische context voorstelt.

public void setColor( Color c ) // Graphics class

Stelt de huidige kleur in om te tekenen in de grafische context.

Page 10: Hoofdstuk 12:

JAVA 10

Voorbeeld

Het gebruik van enkele methoden van de class Color. Rechthoeken

en tekst worden getekend in verschillende kleuren.

Page 11: Hoofdstuk 12:

1 // Fig. 12.5: ShowColors.java 2 // Het gebruik van kleuren 3 4 // Java core packages 5 import java.awt.*; 6 import java.awt.event.*; 7 8 // Java extension packages 9 import javax.swing.*;10 11 public class ShowColors extends JFrame {12 13 // constructor geeft een titel en afmetingen aan het venster14 public ShowColors()15 {16 super( "Using colors" );17 18 setSize( 400, 130 );19 setVisible( true );20 }21 22 // teken rechthoeken en tekst in verschillende kleuren23 public void paint( Graphics g )24 {25 // aanroep van de methode paint van de superclass26 super.paint( g );27 28 // stel een kleur in met behulp van integers29 g.setColor( new Color( 255, 0, 0 ) );30 g.fillRect( 25, 25, 100, 20 );31 g.drawString( "Current RGB: " + g.getColor(), 130, 40 );32 33 // stel een kleur in met behulp van floats34 g.setColor( new Color( 0.0f, 1.0f, 0.0f ) );35 g.fillRect( 25, 50, 100, 20 );

Tekent het venster wanneer de uitvoering van de applicatie start

Methode setColor stelt de RGB waarde van de kleur in

Methode fillRect tekent een gevulde rechthoek met gegeven

coördinaten gebruikmakende van de huidige RGB waarde

Methode drawString tekent tekst in de ingestelde kleur op de

aangegeven plaats

Page 12: Hoofdstuk 12:

36 g.drawString( "Current RGB: " + g.getColor(), 130, 65 );37 38 // stel een kleur in met behulp van de statische constanten uit de klasse Color39 g.setColor( Color.blue );40 g.fillRect( 25, 75, 100, 20 );41 g.drawString( "Current RGB: " + g.getColor(), 130, 90 );42 43 // toon de individuele RGB waarden44 Color color = Color.magenta;45 g.setColor( color );46 g.fillRect( 25, 100, 100, 20 );47 g.drawString( "RGB values: " + color.getRed() + ", " +48 color.getGreen() + ", " + color.getBlue(), 130, 115 );49 }50 51 // voer de applicatie uit52 public static void main( String args[] )53 {54 ShowColors application = new ShowColors();55 56 application.setDefaultCloseOperation( 57 JFrame.EXIT_ON_CLOSE );58 }59 60 } // einde class ShowColors

Gebruik constanten uit de

class Color om de huidige

kleur in te stellen

Page 13: Hoofdstuk 12:

JAVA 13

Voorbeeld

Het gebruik van JColorChooser. Wanneer de gebruiker op de knop “Change Color”

klikt, kan hij een kleur kiezen. De achtergrond van het venster krijgt

vervolgens de gekozen kleur.

Page 14: Hoofdstuk 12:

1 // Fig. 12.6: ShowColors2.java 2 // Het gebruik van JColorChooser 3 4 // Java core packages 5 import java.awt.*; 6 import java.awt.event.*; 7 8 // Java extension packages 9 import javax.swing.*;10 11 public class ShowColors2 extends JFrame {12 private JButton changeColorButton;13 private Color color = Color.lightGray;14 private Container container;15 16 // aanmaak van de GUI17 public ShowColors2()18 {19 super( "Using JColorChooser" );20 21 container = getContentPane();22 container.setLayout( new FlowLayout() );23 24 // aanmaak van de changeColorButton en registratie van zijn event handler25 changeColorButton = new JButton( "Change Color" );26 27 changeColorButton.addActionListener(28 29 // anonieme inner class30 new ActionListener() {31 32 // toon JColorChooser wanneer de gebruiker klikt op de knop33 public void actionPerformed( ActionEvent event )34 {35 color = JColorChooser.showDialog(

De statische methode showDialog toont de “color chooser

dialog”

JColorChooser laat de gebruiker een kleur kiezen

Page 15: Hoofdstuk 12:

36 ShowColors2.this, "Choose a color", color );37 38 // stel default kleur in, wanneer er geen kleur werd geretourneerd39 if ( color == null )40 color = Color.lightGray;41 42 // wijzig de achtergrondkleur van de content pane43 container.setBackground( color );44 }45 46 } // einde van de anonieme inner class47 48 ); // einde aanroep addActionListener49 50 container.add( changeColorButton );51 52 setSize( 400, 130 );53 setVisible( true );54 }55 56 // voer de applicatie uit57 public static void main( String args[] )58 {59 ShowColors2 application = new ShowColors2();60 61 application.setDefaultCloseOperation(62 JFrame.EXIT_ON_CLOSE );63 }64 65 } // einde class ShowColors2

Page 16: Hoofdstuk 12:
Page 17: Hoofdstuk 12:

JAVA 17

JColorChooser dialoogbox

Page 18: Hoofdstuk 12:

JAVA 18

4 Gebruik van lettertypen class Font

Bevat methoden en constanten om lettertypen te manipuleren

Constructor met drie argumenten Naam

Monospaced, SansSerif, Serif, etc. Stijl

Font.PLAIN, Font.ITALIC and Font.BOLD De stijlen kunnen gecombineerd worden, zoals Font.ITALIC + Font.BOLD

Grootte Uitgedrukt in punten (1/72 inch)

Page 19: Hoofdstuk 12:

JAVA 19

Methoden van de class FontMethode of constante Beschrijving public final static int PLAIN // Font class

Een constante die een volle stijl voorstelt.

public final static int BOLD // Font class

Een constante die een vette stijl voorstelt.

public final static int ITALIC // Font class

Een constante die een cursieve stijl voorstelt.

public Font( String name, int style, int size )

Maakt een nieuw Font object met het gespecificeerde lettertype, stijl en grootte.

public int getStyle() // Font class

Levert een integer af die de huidige stijl van het lettertype weergeeft.

public int getSize() // Font class

Levert een integer af die de huidige grootte van het lettertype weergeeft.

public String getName() // Font class

Levert een string af die de huidige naam van het lettertype weergeeft.

public String getFamily() // Font class

Levert een string af die de huidige familie van het lettertype weergeeft.

Page 20: Hoofdstuk 12:

JAVA 20

Methoden van de class Font

Methode of constante Beschrijving

public boolean isPlain() // Font class

Controleert een lettertype op een volle stijl. Lvert true af bij een vol lettertype.

public boolean isBold() // Font class

Controleert een lettertype op een vette stijl. Levert true af bij een vet lettertype.

public boolean isItalic() // Font class

Controleert een lettertype op een cursieve stijl. Levert true af bij een cursief lettertype.

public Font getFont() // Graphics class

Levert een reference naar een Font object af met het huidige lettertype.

public void setFont( Font f ) // Graphics class

Stel het huidige lettertype in met de gegevens van de reference f naar een Font.

Page 21: Hoofdstuk 12:

JAVA 21

Voorbeeld

Gebruik van lettertypen. Er worden vier lettertypen

gebruikt, elk in een andere grootte.

Page 22: Hoofdstuk 12:

1 // Fig. 12.9: Fonts.java 2 // Gebruik van lettertypen 3 4 // Java core packages 5 import java.awt.*; 6 7 8 // Java extension packages 9 import javax.swing.*;10 11 public class Fonts extends JFrame {12 13 // instellen van de titel en afmetingen van het venster 14 public Fonts()15 {16 super( "Using fonts" );17 18 setSize( 420, 125 );19 setVisible( true );20 }21 22 // druk Strings af in verschillende lettertypen en kleuren23 public void paint( Graphics g )24 {25 // aanroep van de methode paint van de superclass26 super.paint( g );27 28 // stel het huidige lettertype in op Serif (Times), vet, 12pt29 // en teken een string 30 g.setFont( new Font( "Serif", Font.BOLD, 12 ) );31 g.drawString( "Serif 12 point bold.", 20, 50 );32 33 // stel het huidige lettertype in op Monospaced (Courier),34 // cursief, 24pt en teken een string 35 g.setFont( new Font( "Monospaced", Font.ITALIC, 24 ) );

Methode setFont stelt het huidige lettertype in

Methode drawString gebruikt het huidige lettertype

Page 23: Hoofdstuk 12:

36 g.drawString( "Monospaced 24 point italic.", 20, 70 );37 38 // stel het huidige lettertype in op SansSerif (Helvetica),39 // vol, 14pt en teken een string 40 g.setFont( new Font( "SansSerif", Font.PLAIN, 14 ) );41 g.drawString( "SansSerif 14 point plain.", 20, 90 );42 43 // stel het huidige lettertype in op Serif (times), vet, cursief,44 // 18pt en teken een string45 g.setColor( Color.red );46 g.setFont( 47 new Font( "Serif", Font.BOLD + Font.ITALIC, 18 ) );48 g.drawString( g.getFont().getName() + " " +49 g.getFont().getSize() +50 " point bold italic.", 20, 110 );51 }52 53 // voer de applicatie uit54 public static void main( String args[] )55 {56 Fonts application = new Fonts();57 58 application.setDefaultCloseOperation(59 JFrame.EXIT_ON_CLOSE );60 }61 62 } // einde class Fonts

Stel lettertype in: Serif, 18-pt, vet, cursief

Stel lettertype in: SansSerif,14-pt,vol

Page 24: Hoofdstuk 12:

JAVA 24

Gebruik van lettertypen Font metrics

Height Descent (amount character dips below baseline) Ascent (amount character rises above baseline) Leading (difference between descent of one line of text

and ascent of the line of text below it)

leading

ascent

baselinedescent

height Xy1Õ

Page 25: Hoofdstuk 12:

JAVA 25

Methoden mbt font metrics

Methode Beschrijving public int getAscent() // FontMetrics class

Levert een waarde af die de ascent van een lettertype voorstelt in punten.

public int getDescent() // FontMetrics class

Levert een waarde af die de descent van een lettertype voorstelt in punten.

public int getLeading() // FontMetrics class

Levert een waarde af die de leading van een lettertype voorstelt in punten.

public int getHeight() // FontMetrics class

Levert een waarde af die de height van een lettertype voorstelt in punten.

public FontMetrics getFontMetrics() // Graphics class

Levert een FontMetrics object af voor het huidige Font.

public FontMetrics getFontMetrics( Font f ) // Graphics class

Levert een FontMetrics object af voor het gespecificeerde Font argument.

Page 26: Hoofdstuk 12:

JAVA 26

Voorbeeld

Gebruik van font metrics voor twee lettertypen.

Page 27: Hoofdstuk 12:

1 // Fig. 12.12: Metrics.java 2 // Gebruik van methoden van de klasse FontMetrics en 3 // de klasse Graphics met betrekking tot font metrics 4 5 // Java core packages 6 import java.awt.*; 7 8 9 // Java extension packages10 import javax.swing.*;11 12 public class Metrics extends JFrame {13 14 // instellen van de titel en de afmetingen van het venster 15 public Metrics()16 {17 super( "Demonstrating FontMetrics" );18 19 setSize( 510, 210 );20 setVisible( true );21 }22 23 // toon font metrics24 public void paint( Graphics g )25 {26 // aanroep van de methode paint van de superclass27 super.paint( g );28 29 g.setFont( new Font( "SansSerif", Font.BOLD, 12 ) );30 FontMetrics metrics = g.getFontMetrics();31 g.drawString( "Current font: " + g.getFont(), 10, 40 );32 g.drawString( "Ascent: " + metrics.getAscent(), 10, 55 );33 g.drawString( "Descent: " + metrics.getDescent(), 10, 70 );34 g.drawString( "Height: " + metrics.getHeight(), 10, 85 );35 g.drawString( "Leading: " + metrics.getLeading(), 10, 100);

-Instellen lettertype: SansSerif, 12-pt, vet

FontMetrics object voor het huidige lettertype

Gebruik FontMetrics voor ascent, descent, height

en leading

Page 28: Hoofdstuk 12:

36 37 Font font = new Font( "Serif", Font.ITALIC, 14 );38 metrics = g.getFontMetrics( font );39 g.setFont( font );40 g.drawString( "Current font: " + font, 10, 130 );41 g.drawString( "Ascent: " + metrics.getAscent(), 10, 145 );42 g.drawString( "Descent: " + metrics.getDescent(), 10, 160);43 g.drawString( "Height: " + metrics.getHeight(), 10, 175 );44 g.drawString( "Leading: " + metrics.getLeading(), 10, 190);45 }46 47 // voer de applicatie uit48 public static void main( String args[] )49 {50 Metrics application = new Metrics();51 52 application.setDefaultCloseOperation(53 JFrame.EXIT_ON_CLOSE );54 }55 56 } // einde class Metrics

Herhaal hetzelfde voor het lettertype Serif, 14-pt,

cursief

Page 29: Hoofdstuk 12:

JAVA 29

5 Lijnen, rechthoeken enellipsen tekenen

class Graphics Voorziet methoden om lijnen,

rechthoeken en ellipsen te tekenen Alle methoden hebben argumenten width and height (positieve gehele getallen)

Page 30: Hoofdstuk 12:

JAVA 30

Methoden van Graphics

Methode Beschrijving

public void drawLine( int x1, int y1, int x2, int y2 ) Tekent een lijn tuusen het punt (x1, y1) en het punt (x2, y2).

public void drawRect( int x, int y, int width, int height ) Tekent een rechthoek met gegeven breedte en hoogte. De linkerbovenhoek van de rechthoek heeft coördinaten (x, y).

public void fillRect( int x, int y, int width, int height ) Tekent een gevulde rechthoek met gegeven breedte en hoogte. De linkerbovenhoek van de rechthoek heeft coördinaten (x, y).

public void clearRect( int x, int y, int width, int height ) Tekent een gevulde rechthoek met gegeven breedte en hoogte in de huidige achtergrondkleur. De linkerbovenhoek van de rechthoek heeft coördinaten (x, y).

public void drawRoundRect( int x, int y, int width, int height, int arcWidth, int arcHeight )

Tekent een rechthoek met afgeronde hoeken in de huidige kleur met gegeven breedte en hoogte. De arcWidth en arcHeight bepaalt de kromming van de hoeken.

public void fillRoundRect( int x, int y, int width, int height, int arcWidth, int arcHeight )

Tekent een gevulde rechthoek met afgeronde hoeken in de huidige kleur met gegeven breedte en hoogte. De arcWidth en arcHeight bepaalt de kromming van de hoeken.

Page 31: Hoofdstuk 12:

JAVA 31

Methoden van Graphics

Methode Beschrijving public void fill3DRect( int x, int y, int width, int height, boolean b )

Tekent een gevulde driedimensionale rechthoek in de huidige kleur met gegeven breedte en hoogte. De linkerbovenhoek van de rechthoek heeft als coördinaten (x, y). De rechthoek wordt verheven weergegeven als b true is en ingedrukt weergegeven als b false is.

public void drawOval( int x, int y, int width, int height )

Tekent een ellips in de huidge kleur met gegeven breedte en hoogte. De linkerbovenhoek van de omschreven rechthoek heeft coördinaten (x, y). De ellips raakt de omschreven rechthoek in het midden van elke zijde.

public void fillOval( int x, int y, int width, int height )

Tekent een gevulde ellips in de huidge kleur met gegeven breedte en hoogte. De linkerbovenhoek van de omschreven rechthoek heeft coördinaten (x, y). De ellips raakt de omschreven rechthoek in het midden van elke zijde.

Page 32: Hoofdstuk 12:

JAVA 32

Voorbeeld

Lijnen, rechthoeken en ellipsen tekenen.

Page 33: Hoofdstuk 12:

1 // Fig. 12.14: LinesRectsOvals.java 2 // Lijnen, rechthoeken en ellipsen tekenen 3 4 // Java core packages 5 import java.awt.*; 6 7 8 // Java extension packages 9 import javax.swing.*;10 11 public class LinesRectsOvals extends JFrame {12 13 // instellen van de titel en de afmetingen van het venster14 public LinesRectsOvals()15 {16 super( "Drawing lines, rectangles and ovals" );17 18 setSize( 400, 165 );19 setVisible( true );20 }21 22 // tekenen van lijnen, rechthoeken en ellipsen23 public void paint( Graphics g )24 {25 // aanroep van de methode paint van de superclass26 super.paint( g );27 28 g.setColor( Color.red );29 g.drawLine( 5, 30, 350, 30 );30 31 g.setColor( Color.blue );32 g.drawRect( 5, 40, 90, 55 );33 g.fillRect( 100, 40, 90, 55 );34 35 g.setColor( Color.cyan );

Page 34: Hoofdstuk 12:

36 g.fillRoundRect( 195, 40, 90, 55, 50, 50 );37 g.drawRoundRect( 290, 40, 90, 55, 20, 20 );38 39 g.setColor( Color.yellow ); 40 g.draw3DRect( 5, 100, 90, 55, true );41 g.fill3DRect( 100, 100, 90, 55, false );42 43 g.setColor( Color.magenta );44 g.drawOval( 195, 100, 90, 55 );45 g.fillOval( 290, 100, 90, 55 );46 }47 48 // voer de applicatie uit49 Public static void main( String args[] )50 {51 LinesRectsOvals application = new LinesRectsOvals();52 53 application.setDefaultCloseOperation(54 JFrame.EXIT_ON_CLOSE );55 }56 57 } // einde class LinesRectsOvals

Teken een gevulde afgeronde rechthoek

Teken een afgeronde rechthoek

Teken een 3D rechthoek

Teken een gevulde 3D rechthoek

Teken een ellips

Teken een gevulde ellips

Page 35: Hoofdstuk 12:

JAVA 35

De breedte en de hoogte van een boogvoor rechthoeken met afgeronde hoeken

arc width

width

height

(x, y)

arc height

•Gelijke waarden voor arc height en arc width resulteert in een vierde van een cirkel in elke hoek van de rechthoek

•Gelijke waarden voor width, height, arc height en arc width resulteert in een cirkel.

Page 36: Hoofdstuk 12:

JAVA 36

Een ellips in een omschrevenrechthoek

( x, y)

height

width

De ellips raakt het midden van elke zijde van de omschreven rechthoek.

Page 37: Hoofdstuk 12:

JAVA 37

6 Bogen tekenen Boog (arc)

Is een deel van een ellips Wordt uitgedrukt in graden tekent het aantal graden van de boog op

een ellips in een omschreven rechthoek het tekenen begint bij de starthoek

In tegenwijzerszin tekenen wordt uitgedrukt met een positief aantal graden

In wijzerszin tekenen wordt uitgedrukt met een negatief aantal graden

Page 38: Hoofdstuk 12:

JAVA 38

Positieve en negatievehoeken bij bogen

90°

0°180°

270°

90°

0°180°

270°

Positieve hoeken Negatieve hoeken

Page 39: Hoofdstuk 12:

JAVA 39

Graphics methoden om bogen te tekenenMethode Beschrijving

public void drawArc( int x, int y, int width, int height, int startAngle, int arcAngle )

Tekent een boog relatief ten opzichte van de omschreven rechthoek met (x,y) de coördinaten van de linkerbovenhoek en de gespecificeerde breedte en hoogte. De boog wordt getekend vanaf de starthoek en draait over een gegeven aantal graden.

public void fillArc( int x, int y, int width, int height, int startAngle, int arcAngle )

Tekent een gevulde boog (een sector) relatief ten opzichte van de omschreven rechthoek met (x,y) de coördinaten van de linkerbovenhoek en de gespecificeerde breedte en hoogte. De boog wordt getekend vanaf de starthoek en draait over een gegeven aantal graden.

Page 40: Hoofdstuk 12:

JAVA 40

Voorbeeld

Bogen tekenen.

Page 41: Hoofdstuk 12:

1 // Fig. 12.19: DrawArcs.java 2 // Bogen tekenen 3 4 // Java core packages 5 import java.awt.*; 6 7 8 // Java extension packages 9 import javax.swing.*;10 11 public class DrawArcs extends JFrame {12 13 // instellen van een titel en de afmetingen van het venster14 public DrawArcs()15 {16 super( "Drawing Arcs" );17 18 setSize( 300, 170 );19 setVisible( true );20 }21 22 // rechthoeken en bogen tekenen23 public void paint( Graphics g )24 {25 // aanroep van de methode paint van de superclass26 super.paint( g );27 28 // begin bij 0 en teken 360 graden29 g.setColor( Color.yellow );30 g.drawRect( 15, 35, 80, 80 );31 g.setColor( Color.black );32 g.drawArc( 15, 35, 80, 80, 0, 360 );33 34 // begin bij 0 en teken 110 graden35 g.setColor( Color.yellow );

Teken een boog van 360 graden in een gegeven omschreven rechthoek

Page 42: Hoofdstuk 12:

36 g.drawRect( 100, 35, 80, 80 );37 g.setColor( Color.black );38 g.drawArc( 100, 35, 80, 80, 0, 110 );39 40 // begin bij 0 en teken -270 graden41 g.setColor( Color.yellow );42 g.drawRect( 185, 35, 80, 80 );43 g.setColor( Color.black );44 g.drawArc( 185, 35, 80, 80, 0, -270 );45 46 // begin bij 0 en teken 360 graden47 g.fillArc( 15, 120, 80, 40, 0, 360 );48 49 // begin bij 270 en teken -90 graden50 g.fillArc( 100, 120, 80, 40, 270, -90 );51 52 // begin bij 0 en teken -270 graden53 g.fillArc( 185, 120, 80, 40, 0, -270 );54 }55 56 // voer de applicatie uit57 public static void main( String args[] )58 {59 DrawArcs application = new DrawArcs();60 61 application.setDefaultCloseOperation(62 JFrame.EXIT_ON_CLOSE );63 }64 65 } // einde van de class DrawArcs

Teken een boog van 110 graden in een

omschreven rechthoek

Teken een boog van –270 graden in een omschreven

rechthoek

Teken een gevulde boog met starthoek 0 en draai 360 graden

Teken een gevulde boog met starthoek 270 en draai -90 graden

Teken een gevulde boog met starthoek 0 en draai -270 graden

Page 43: Hoofdstuk 12:
Page 44: Hoofdstuk 12:

JAVA 44

7 Polygonen en polylijnen class Polygon

Polygoon Gesloten vorm met vele rechte zijden

Polylijn Verzameling van verbonden punten

Page 45: Hoofdstuk 12:

JAVA 45

Methoden voor polygonen en polylijnen

Methode Omschrijving

public void drawPolygon( int xPoints[], int yPoints[],int points )

Tekent een polygoon. De x-coördinaat van elk punt is gespecificeerd in de xPoints array en de y-coördinaat van elk punt is gespecificeerd in de yPoints array. Het laatste argument geeft het aantal punten. Deze methode tekent een gesloten polygoon, zelfs al is het laatste punt verschillend van het eerste punt.

public void drawPolyline( int xPoints[], int yPoints[], int points )

Tekent een verzameling van verbonden lijnen. De x-coördinaat van elk punt is gespecificeerd in de xPoints array en de y-coördinaat van elk punt is gespecificeerd in de yPoints array. Het laatste argument geeft het aantal punten. Is het laatste punt verschillend van het eerste punt, dan is de polylijn niet gesloten.

public void drawPolygon( Polygon p ) Tekent de gespecificeerde gesloten polygoon. public void fillPolygon( int xPoints[],int yPoints[], int points )

Tekent een gevulde polygoon. De x-coördinaat van elk punt is gespecificeerd in de xPoints array en de y-coördinaat van elk punt is gespecificeerd in de yPoints array. Het laatste argument geeft het aantal punten. Deze methode tekent een gesloten polygoon, zelfs al is het laatste punt verschillend van het eerste punt.

public void fillPolygon( Polygon p ) Tekent de gespecificeerde gevulde polygoon. De polygoon is gesloten. public Polygon() // Polygon class

Creëert een nieuw polygoon object. De polygoon bevat geen enkel punt.

public Polygon( int xValues[], int yValues[], int numberOfPoints ) // Polygon class

Creëert een nieuw polygoon object. De polygoon heeft numberOfPoints zijden, waarvan elk punt bestaat uit een x-coördinaat uit xValues en een y-coördinaat uit yValues.

public void addPoint(int x, int y ) Voegt een paar (x,y) toe aan de polygoon

Page 46: Hoofdstuk 12:

JAVA 46

Voorbeeld

Polygonen en polylijnen tekenen.

Page 47: Hoofdstuk 12:

1 // Fig. 12.21: DrawPolygons.java 2 // Polygonen tekenen 3 4 // Java core packages 5 import java.awt.*; 6 7 8 // Java extension packages 9 import javax.swing.*;10 11 public class DrawPolygons extends JFrame {12 13 // instellen van de titel en de afmetingen van het venster14 public DrawPolygons()15 {16 super( "Drawing Polygons" );17 18 setSize( 275, 230 );19 setVisible( true );20 }21 22 // polygonen en polylijnen tekenen23 public void paint( Graphics g )24 {25 // aanroepen van de methode paint van de superclass26 super.paint( g );27 28 int xValues[] = { 20, 40, 50, 30, 20, 15 };29 int yValues[] = { 50, 50, 60, 80, 80, 60 };30 Polygon polygon1 = new Polygon( xValues, yValues, 6 );31 32 g.drawPolygon( polygon1 );33 34 int xValues2[] = { 70, 90, 100, 80, 70, 65, 60 };35 int yValues2[] = { 100, 100, 110, 110, 130, 110, 90 };

int arrays met de punten van de Polygon polygon1

int arrays met de punten van de Polygon polygon2

Teken polygon1 op het scherm

Page 48: Hoofdstuk 12:

36 37 g.drawPolyline( xValues2, yValues2, 7 );38 39 int xValues3[] = { 120, 140, 150, 190 };40 int yValues3[] = { 40, 70, 80, 60 };41 42 g.fillPolygon( xValues3, yValues3, 4 );43 44 Polygon polygon2 = new Polygon();45 polygon2.addPoint( 165, 135 );46 polygon2.addPoint( 175, 150 );47 polygon2.addPoint( 270, 200 );48 polygon2.addPoint( 200, 220 );49 polygon2.addPoint( 130, 180 );50 51 g.fillPolygon( polygon2 );52 }53 54 // voer de applicatie uit55 public static void main( String args[] )56 {57 DrawPolygons application = new DrawPolygons();58 59 application.setDefaultCloseOperation(60 JFrame.EXIT_ON_CLOSE );61 }62 63 } // einde van de class DrawPolygons

Teken polygon2 op het scherm

Specificeer de punten van de Polygon polygon3 en teken een gevulde polygoon op het scherm

De methode addPoint voegt punten met x en y coördinaten toe aan Polygon

Page 49: Hoofdstuk 12:

DrawPolygons.java

Output

Resultaat van lijn 32

Resultaat van lijn 37

Resultaat van lijn 42

Resultaat van lijn 51

Page 50: Hoofdstuk 12:

JAVA 50

8 Java 2D API Java 2D API

Uitgebreide 2D grafische mogelijkheden java.awt java.awt.image java.awt.color java.awt.font.geom java.awt.print java.awt.image.renderable

Gebruikt de class java.awt.Graphics2D extends class java.awt.Graphics

Page 51: Hoofdstuk 12:

JAVA 51

Package java.awt.geom Ellipse2D.Double Rectangle2D.Double RoundRectangle2D.Double Arc3D.Double Lines2D.Double

Java 2D vormen

Page 52: Hoofdstuk 12:

JAVA 52

Voorbeeld

Enkele Java2D vormen en hun specifieke eigenschappen.

Page 53: Hoofdstuk 12:

1 // Fig. 12.22: Shapes.java 2 // Enkele Java2D vormen 3 4 // Java core packages 5 import java.awt.*; 6 7 import java.awt.geom.*; 8 import java.awt.image.*; 9 10 // Java extension packages11 import javax.swing.*;12 13 public class Shapes extends JFrame {14 15 // instellen van de titel en de afmetingen van het venster16 public Shapes() 17 {18 super( "Drawing 2D shapes" );19 20 setSize( 425, 160 );21 setVisible( true );22 }23 24 // teken vormen met Java2D API25 public void paint( Graphics g )26 {27 // aanroep van de methode paint van de superclass28 super.paint( g );29 30 // maak 2D door typeconversie van g naar Graphics2D31 Graphics2D g2d = ( Graphics2D ) g;32 33 // teken 2D ellips gevuld met een blauw-gele gradiënt34 g2d.setPaint( new GradientPaint( 5, 30, Color.blue, 35,35 100, Color.yellow, true ) );

Gebruik GradientPaint om de vorm te vullen met

een gradiënt

Page 54: Hoofdstuk 12:

36 g2d.fill( new Ellipse2D.Double( 5, 30, 65, 100 ) );37 38 // teken een rode 2D rechthoek39 g2d.setPaint( Color.red ); 40 g2d.setStroke( new BasicStroke( 10.0f ) ); 41 g2d.draw( new Rectangle2D.Double( 80, 30, 65, 100 ) );42 43 // teken een afgeronde 2D rechthoek met een gebufferde achtergrond44 BufferedImage buffImage = new BufferedImage(45 10, 10, BufferedImage.TYPE_INT_RGB );46 47 Graphics2D gg = buffImage.createGraphics(); 48 gg.setColor( Color.yellow ); // teken met geel49 gg.fillRect( 0, 0, 10, 10 ); // teken een gevulde rechthoek50 gg.setColor( Color.black ); // teken met zwart51 gg.drawRect( 1, 1, 6, 6 ); // teken een rechthoek52 gg.setColor( Color.blue ); // teken met blauw53 gg.fillRect( 1, 1, 3, 3 ); // teken een gevulde rechthoek54 gg.setColor( Color.red ); // teken met rood55 gg.fillRect( 4, 4, 3, 3 ); // teken een gevulde rechthoek56 57 // teken buffImage in JFrame58 g2d.setPaint( new TexturePaint(59 buffImage, new Rectangle( 10, 10 ) ) );60 g2d.fill( new RoundRectangle2D.Double(61 155, 30, 75, 100, 50, 50 ) );62 63 // teken een 2D boog met wit64 g2d.setPaint( Color.white );65 g2d.setStroke( new BasicStroke( 6.0f ) ); 66 g2d.draw( new Arc2D.Double(67 240, 30, 75, 100, 0, 270, Arc2D.PIE ) );68 69 // teken 2D lijnen met groen en geel70 g2d.setPaint( Color.green );

Vul de ellips met de gradiënt

Gebruik BasicStroke om een 2D rechthoek te tekenen

met een rode rand

BufferedImage levert een beeld dat kan

bewerkt worden

Vul BufferedImage

op

Gebruik BufferedImage als vulling bij het tekenen van een

afgeronde rechthoek

Gebruik Arc2D.PIE om een 2D boog te tekenen met een

witte rand

Page 55: Hoofdstuk 12:

71 g2d.draw( new Line2D.Double( 395, 30, 320, 150 ) );72 73 float dashes[] = { 10 };74 75 g2d.setPaint( Color.yellow ); 76 g2d.setStroke( new BasicStroke( 4, BasicStroke.CAP_ROUND,77 BasicStroke.JOIN_ROUND, 10, dashes, 0 ) ); 78 g2d.draw( new Line2D.Double( 320, 30, 395, 150 ) );79 }80 81 // voer de applicatie uit82 public static void main( String args[] )83 {84 Shapes application = new Shapes();85 86 application.setDefaultCloseOperation(87 JFrame.EXIT_ON_CLOSE );88 }89 90 } // einde van de class Shapes

Teken een volle groene lijn

Teken een gebroken gele lijn die de volle groene lijn

snijdt

Page 56: Hoofdstuk 12:

JAVA 56

Voorbeeld

Tekenen van vormen opgebouwd uit rechte lijnen en complexe curven.

Page 57: Hoofdstuk 12:

1 // Fig. 12.23: Shapes2.java 2 // Demonstratie 3 4 // Java core packages 5 import java.awt.*; 6 7 import java.awt.geom.*; 8 9 // Java extension packages10 import javax.swing.*;11 12 public class Shapes2 extends JFrame {13 14 // instellen van de titel, de afmetingen en de achtergrondkleur 15 // van het venster 16 public Shapes2()17 {18 super( "Drawing 2D Shapes" );19 20 getContentPane().setBackground( Color.yellow );21 setSize( 400, 400 );22 setVisible( true );23 }24 25 26 public void paint( Graphics g )27 {28 // aanroep van de methode paint van de superclass29 super.paint( g );30 31 int xPoints[] = 32 { 55, 67, 109, 73, 83, 55, 27, 37, 1, 43 };33 int yPoints[] = 34 { 0, 36, 36, 54, 96, 72, 96, 54, 36, 36 };35

x-y coördinaten voor de sterren

Page 58: Hoofdstuk 12:

36 Graphics2D g2d = ( Graphics2D ) g;37 38 // maak een ster met een reeks punten39 GeneralPath star = new GeneralPath();40 41 // stel de eerste coordinaat in van General Path42 star.moveTo( xPoints[ 0 ], yPoints[ 0 ] );43 44 // creëer een ster - er wordt hier geen ster getekend45 for ( int count = 1; count < xPoints.length; count++ )46 star.lineTo( xPoints[ count ], yPoints[ count ] );47 48 // sluit de vorm49 star.closePath();50 51 // verschuif de oorsprong naar (200, 200)52 g2d.translate( 200, 200 );53 54 // draai rond de oorsprong en teken sterren met willekeurige kleuren55 for ( int count = 1; count <= 20; count++ ) {56 57 // draai het coördinatenstelsel58 g2d.rotate( Math.PI / 10.0 );59 60 // instellen van de willekeurige kleur om te tekenen61 g2d.setColor( new Color( 62 ( int ) ( Math.random() * 256 ),63 ( int ) ( Math.random() * 256 ), 64 ( int ) ( Math.random() * 256 ) ) );65 66 // teken een gevulde ster67 g2d.fill( star ); 68 }69 70 } // einde method paint

GeneralPath is een vorm opgebouwd uit

rechte lijnen en complexe curven

Maak een ster

Teken 20 sterren rond de oorsprong,

gevuld met een willekeurige kleur

Page 59: Hoofdstuk 12:

71 72 // voer de applicatie uit73 public static void main( String args[] )74 {75 Shapes2 application = new Shapes2();76 77 application.setDefaultCloseOperation(78 JFrame.EXIT_ON_CLOSE );79 }80 81 } // einde van de class Shapes2

Page 60: Hoofdstuk 12:

JAVA 60

Oefeningen

Hoofdstuk 12

Page 61: Hoofdstuk 12:

JAVA 61

Oefening 1 Teken acht concentrische cirkels.

De afstand tussen de cirkels bedraagt 10 pixels.

Page 62: Hoofdstuk 12:

JAVA 62

Oefening 2 Teken lijnen van random lengte en

in random kleuren.

Page 63: Hoofdstuk 12:

JAVA 63

Oefening 3 Schrijf een applicatie die tien

random driehoeken tekent in verschillende kleuren. Elke driehoek wordt gevuld met een andere kleur. Gebruik de class GeneralPath en de methode fill van de class Graphics2D om deze driehoeken te tekenen.

Page 64: Hoofdstuk 12:

JAVA 64

Oefening 4 Teken een piramide. Maak gebruik

van de class GeneralPath en de methode draw uit de class Graphics2D.