Hoofdstuk 12:
description
Transcript of Hoofdstuk 12:
JAVA 1
Hoofdstuk 12:
Grafische mogelijkheden en Java2D
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
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
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
JAVA 5
Coördinatenstelsel in JavaX-as
Y –as
(0, 0)
( x, y)
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
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
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
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.
JAVA 10
Voorbeeld
Het gebruik van enkele methoden van de class Color. Rechthoeken
en tekst worden getekend in verschillende kleuren.
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
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
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.
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
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
JAVA 17
JColorChooser dialoogbox
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)
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.
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.
JAVA 21
Voorbeeld
Gebruik van lettertypen. Er worden vier lettertypen
gebruikt, elk in een andere grootte.
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
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
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Õ
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.
JAVA 26
Voorbeeld
Gebruik van font metrics voor twee lettertypen.
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
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
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)
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.
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.
JAVA 32
Voorbeeld
Lijnen, rechthoeken en ellipsen tekenen.
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 );
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
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.
JAVA 36
Een ellips in een omschrevenrechthoek
( x, y)
height
width
De ellips raakt het midden van elke zijde van de omschreven rechthoek.
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
JAVA 38
Positieve en negatievehoeken bij bogen
90°
0°180°
270°
90°
0°180°
270°
Positieve hoeken Negatieve hoeken
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.
JAVA 40
Voorbeeld
Bogen tekenen.
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
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
JAVA 44
7 Polygonen en polylijnen class Polygon
Polygoon Gesloten vorm met vele rechte zijden
Polylijn Verzameling van verbonden punten
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
JAVA 46
Voorbeeld
Polygonen en polylijnen tekenen.
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
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
DrawPolygons.java
Output
Resultaat van lijn 32
Resultaat van lijn 37
Resultaat van lijn 42
Resultaat van lijn 51
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
JAVA 51
Package java.awt.geom Ellipse2D.Double Rectangle2D.Double RoundRectangle2D.Double Arc3D.Double Lines2D.Double
Java 2D vormen
JAVA 52
Voorbeeld
Enkele Java2D vormen en hun specifieke eigenschappen.
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
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
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
JAVA 56
Voorbeeld
Tekenen van vormen opgebouwd uit rechte lijnen en complexe curven.
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
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
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
JAVA 60
Oefeningen
Hoofdstuk 12
JAVA 61
Oefening 1 Teken acht concentrische cirkels.
De afstand tussen de cirkels bedraagt 10 pixels.
JAVA 62
Oefening 2 Teken lijnen van random lengte en
in random kleuren.
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.
JAVA 64
Oefening 4 Teken een piramide. Maak gebruik
van de class GeneralPath en de methode draw uit de class Graphics2D.