PowerPoint-presentatie

advertisement
Hoofdstuk 12:
Grafische mogelijkheden en
Java2D
JAVA
1
Gebruikte klassen en interfaces
Object
Color
Component
Font
FontMetrics
Graphics
Polygon
Classes and interfaces from the Java2D API that appear
in package java.awt
Graphics2D
interface
java.awt.Paint
BasicStroke
interface
java.awt.Shape
GradientPaint
interface
java.awt.Stroke
TexturePaint
Classes from the Java2D API that appear in package
java.awt.geom
GeneralPath
Line2D
RectangularShape
Arc2D
Ellipse2D
Rectangle2D
JAVA
RoundRectangle2D
2
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
3
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 ycoördinaat
De eenheid is de pixel
JAVA
4
Coördinatenstelsel in Java
(0, 0)
X-as
( x, y)
Y –as
JAVA
5
2 Grafische context en
grafische objecten

Grafische context


Maakt tekenen mogelijk op het scherm
Een graphics object beheert de grafische context


class Graphics is abstract



Controleert hoe gegevens worden getekend
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.
JAVA
6
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
7
Statische constanten van de class
Color
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
JAVA
8
Methoden van de class Color
Methode
Beschrijving
public Color( int r, int g, Creëert een kleur gebaseerd op rode, groene en blauwe
int b )
bestanddelen uitgedrukt als integers tussen 0 en 255.
public Color( float r,
Creëert een kleur gebaseerd op rode, groene en blauwe
float g, float b )
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 Stelt de huidige kleur in om te tekenen in de grafische context.
c ) // Graphics class
JAVA
9
Voorbeeld
Het gebruik van enkele methoden van
de class Color. Rechthoeken en tekst
worden getekend in verschillende
kleuren.
JAVA
10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Fig. 12.5: ShowColors.java
// Het gebruik van kleuren
// Java core packages
import java.awt.*;
import java.awt.event.*;
// Java extension packages
import javax.swing.*;
public class ShowColors extends JFrame {
Tekent het venster
// constructor geeft een titel en afmetingen aan het venster
public ShowColors()
wanneer de uitvoering
{
van de applicatie start
super( "Using colors" );
setSize( 400, 130 );
setVisible( true );
}
Methode setColor stelt de RGB
waarde van de kleur in
// teken rechthoeken en tekst in verschillende kleuren
public void paint( Graphics g )
{
// aanroep van de methode paint van de superclass
super.paint( g );
Methode fillRect tekent een
gevulde rechthoek met gegeven
coördinaten gebruikmakende van
de huidige RGB waarde
// stel een kleur in met behulp van integers
g.setColor( new Color( 255, 0, 0 ) );
g.fillRect( 25, 25, 100, 20 );
g.drawString( "Current RGB: " + g.getColor(), 130, 40 );
// stel een kleur in met behulp van floats
g.setColor( new Color( 0.0f, 1.0f, 0.0f ) );
g.fillRect( 25, 50, 100, 20 );
Methode drawString tekent
tekst in de ingestelde kleur op de
aangegeven plaats
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
g.drawString( "Current RGB: " + g.getColor(), 130, 65 );
// stel een kleur in met behulp van de statische constanten uit de klasse Color
g.setColor( Color.blue );
g.fillRect( 25, 75, 100, 20 );
g.drawString( "Current RGB: " + g.getColor(), 130, 90 );
// toon de individuele RGB waarden
Color color = Color.magenta;
g.setColor( color );
g.fillRect( 25, 100, 100, 20 );
g.drawString( "RGB values: " + color.getRed() + ", " +
color.getGreen() + ", " + color.getBlue(), 130, 115 );
}
// voer de applicatie uit
public static void main( String args[] )
{
ShowColors application = new ShowColors();
application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
}
}
// einde class ShowColors
Gebruik constanten uit de
class Color om de huidige
kleur in te stellen
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.
JAVA
13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Fig. 12.6: ShowColors2.java
// Het gebruik van JColorChooser
// Java core packages
import java.awt.*;
import java.awt.event.*;
// Java extension packages
import javax.swing.*;
public class ShowColors2 extends JFrame {
private JButton changeColorButton;
private Color color = Color.lightGray;
private Container container;
// aanmaak van de GUI
public ShowColors2()
{
super( "Using JColorChooser" );
container = getContentPane();
container.setLayout( new FlowLayout() );
JColorChooser laat de
gebruiker een kleur kiezen
// aanmaak van de changeColorButton en registratie van zijn event handler
changeColorButton = new JButton( "Change Color" );
changeColorButton.addActionListener(
// anonieme inner class
new ActionListener() {
// toon JColorChooser wanneer de gebruiker klikt op de knop
public void actionPerformed( ActionEvent event )
{
color = JColorChooser.showDialog(
De statische
methode showDialog
toont de “color chooser
dialog”
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
ShowColors2.this, "Choose a color", color );
// stel default kleur in, wanneer er geen kleur werd geretourneerd
if ( color == null )
color = Color.lightGray;
// wijzig de achtergrondkleur van de content pane
container.setBackground( color );
}
}
// einde van de anonieme inner class
); // einde aanroep addActionListener
container.add( changeColorButton );
setSize( 400, 130 );
setVisible( true );
}
// voer de applicatie uit
public static void main( String args[] )
{
ShowColors2 application = new ShowColors2();
application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
}
}
// einde class ShowColors2
JColorChooser dialoogbox
JAVA
17
4

Gebruik van lettertypen
class Font


Bevat methoden en constanten om lettertypen te
manipuleren
Constructor met drie argumenten

Naam


Stijl



Monospaced, SansSerif, Serif, etc.
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
18
Methoden van de class Font
Methode of consta nte
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
19
Methoden van de class Font
Methode of constante
public boolean isPlain()
// Font class
Beschrijving
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.
Controleert een lettertype op een volle stijl. Lvert true
af bij een vol lettertype.
public void setFont( Font f ) Stel het huidige lettertype in met de gegevens van de
// Graphics class
reference f naar een Font.
JAVA
20
Voorbeeld
Gebruik van lettertypen. Er
worden vier lettertypen gebruikt,
elk in een andere grootte.
JAVA
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Fig. 12.9: Fonts.java
// Gebruik van lettertypen
// Java core packages
import java.awt.*;
// Java extension packages
import javax.swing.*;
public class Fonts extends JFrame {
// instellen van de titel en afmetingen van het venster
public Fonts()
{
super( "Using fonts" );
setSize( 420, 125 );
setVisible( true );
}
// druk Strings af in verschillende lettertypen en kleuren
public void paint( Graphics g )
{
Methode
// aanroep van de methode paint van de superclass
super.paint( g );
setFont stelt het huidige
lettertype in
// stel het huidige lettertype in op Serif (Times), vet, 12pt
// en teken een string
g.setFont( new Font( "Serif", Font.BOLD, 12 ) );
Methode
g.drawString( "Serif 12 point bold.", 20, 50 );
// stel het huidige lettertype in op Monospaced (Courier),
// cursief, 24pt en teken een string
g.setFont( new Font( "Monospaced", Font.ITALIC, 24 ) );
drawString gebruikt
het huidige lettertype
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
g.drawString( "Monospaced 24 point italic.", 20, 70 );
// stel het huidige lettertype in op SansSerif (Helvetica),
// vol, 14pt en teken een string
g.setFont( new Font( "SansSerif", Font.PLAIN, 14 ) );
g.drawString( "SansSerif 14 point plain.", 20, 90 );
// stel het huidige lettertype in op Serif (times), vet, cursief,
// 18pt en teken een string
g.setColor( Color.red );
Stel lettertype in: SansSerif,14-pt,vol
g.setFont(
new Font( "Serif", Font.BOLD + Font.ITALIC, 18 ) );
g.drawString( g.getFont().getName() + " " +
g.getFont().getSize() +
" point bold italic.", 20, 110 );
Stel lettertype in: Serif, 18-pt, vet,
cursief
}
// voer de applicatie uit
public static void main( String args[] )
{
Fonts application = new Fonts();
application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
}
}
// einde class Fonts
Gebruik van lettertypen

Font metrics
Xy1Õ
height




leading
ascent
baseline
descent
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)
JAVA
24
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
25
Voorbeeld
Gebruik van font metrics voor
twee lettertypen.
JAVA
26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Fig. 12.12: Metrics.java
// Gebruik van methoden van de klasse FontMetrics en
// de klasse Graphics met betrekking tot font metrics
// Java core packages
import java.awt.*;
// Java extension packages
import javax.swing.*;
public class Metrics extends JFrame {
// instellen van de titel en de afmetingen van het venster
public Metrics()
{
super( "Demonstrating FontMetrics" );
setSize( 510, 210 );
setVisible( true );
}
-
// toon font metrics
Instellen
public void paint( Graphics g )
{
// aanroep van de methode paint van de superclass
super.paint( g );
lettertype: SansSerif, 12-pt, vet
g.setFont( new Font( "SansSerif", Font.BOLD, 12 ) );
FontMetrics metrics = g.getFontMetrics();
g.drawString( "Current font: " + g.getFont(), 10, 40 );
g.drawString( "Ascent: " + metrics.getAscent(), 10, 55 );
g.drawString( "Descent: " + metrics.getDescent(), 10, 70 );
g.drawString( "Height: " + metrics.getHeight(), 10, 85 );
g.drawString( "Leading: " + metrics.getLeading(), 10, 100);
FontMetrics object
voor het huidige
lettertype
Gebruik
FontMetrics voor
ascent, descent, height
en leading
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Font font = new Font( "Serif", Font.ITALIC, 14 );
metrics = g.getFontMetrics( font );
g.setFont( font );
g.drawString( "Current font: " + font, 10, 130 );
g.drawString( "Ascent: " + metrics.getAscent(), 10, 145 );
g.drawString( "Descent: " + metrics.getDescent(), 10, 160);
g.drawString( "Height: " + metrics.getHeight(), 10, 175 );
g.drawString( "Leading: " + metrics.getLeading(), 10, 190);
}
// voer de applicatie uit
public static void main( String args[] )
{
Metrics application = new Metrics();
application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
}
}
// einde class Metrics
Herhaal hetzelfde voor
het lettertype Serif, 14-pt,
cursief
5 Lijnen, rechthoeken en
ellipsen tekenen

class Graphics

Voorziet methoden om lijnen, rechthoeken
en ellipsen te tekenen

Alle methoden hebben argumenten width and
height (positieve gehele getallen)
JAVA
29
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, Tekent een rechthoek met afgeronde hoeken in de huidige kleur met gegeven
breedte en hoogte. De arcWidth en arcHeight bepaalt de kromming van de
int arcWidth, int arcHeight )
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
30
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
31
Voorbeeld
Lijnen, rechthoeken en ellipsen
tekenen.
JAVA
32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Fig. 12.14: LinesRectsOvals.java
// Lijnen, rechthoeken en ellipsen tekenen
// Java core packages
import java.awt.*;
// Java extension packages
import javax.swing.*;
public class LinesRectsOvals extends JFrame {
// instellen van de titel en de afmetingen van het venster
public LinesRectsOvals()
{
super( "Drawing lines, rectangles and ovals" );
setSize( 400, 165 );
setVisible( true );
}
// tekenen van lijnen, rechthoeken en ellipsen
public void paint( Graphics g )
{
// aanroep van de methode paint van de superclass
super.paint( g );
g.setColor( Color.red );
g.drawLine( 5, 30, 350, 30 );
g.setColor( Color.blue );
g.drawRect( 5, 40, 90, 55 );
g.fillRect( 100, 40, 90, 55 );
g.setColor( Color.cyan );
Teken een gevulde afgeronde rechthoek
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
g.fillRoundRect( 195, 40, 90, 55, 50, 50 );
g.drawRoundRect( 290, 40, 90, 55, 20, 20 );
Teken een afgeronde rechthoek
g.setColor( Color.yellow );
g.draw3DRect( 5, 100, 90, 55, true );
g.fill3DRect( 100, 100, 90, 55, false );
Teken een 3D rechthoek
Teken een gevulde 3D rechthoek
g.setColor( Color.magenta );
g.drawOval( 195, 100, 90, 55 );
g.fillOval( 290, 100, 90, 55 );
Teken een ellips
}
// voer de applicatie uit
Public static void main( String args[] )
{
LinesRectsOvals application = new LinesRectsOvals();
application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
}
}
// einde class LinesRectsOvals
Teken een gevulde ellips
De breedte en de hoogte van een boog
voor rechthoeken met afgeronde hoeken
(x, y)
arc height
arc width
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.
width
JAVA
35
Een ellips in een omschreven
rechthoek
( x, y)
height
width
De ellips raakt het midden van elke zijde van de omschreven rechthoek.
JAVA
36
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
37
Positieve en negatieve
hoeken bij bogen
Positieve hoeken
90°
180°
0°
Negatieve hoeken
90°
180°
270°
0°
270°
JAVA
38
Graphics methoden om
bogen te tekenen
Methode
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
39
Voorbeeld
Bogen tekenen.
JAVA
40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Fig. 12.19: DrawArcs.java
// Bogen tekenen
// Java core packages
import java.awt.*;
// Java extension packages
import javax.swing.*;
public class DrawArcs extends JFrame {
// instellen van een titel en de afmetingen van het venster
public DrawArcs()
{
super( "Drawing Arcs" );
setSize( 300, 170 );
setVisible( true );
}
// rechthoeken en bogen tekenen
public void paint( Graphics g )
{
// aanroep van de methode paint
super.paint( g );
van de superclass
// begin bij 0 en teken 360 graden
g.setColor( Color.yellow );
g.drawRect( 15, 35, 80, 80 );
g.setColor( Color.black );
g.drawArc( 15, 35, 80, 80, 0, 360 );
// begin bij 0 en teken 110 graden
g.setColor( Color.yellow );
Teken een boog van 360
graden in een gegeven
omschreven rechthoek
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
g.drawRect( 100, 35, 80, 80 );
g.setColor( Color.black );
g.drawArc( 100, 35, 80, 80, 0, 110 );
// begin bij 0 en teken -270 graden
g.setColor( Color.yellow );
g.drawRect( 185, 35, 80, 80 );
g.setColor( Color.black );
g.drawArc( 185, 35, 80, 80, 0, -270 );
// begin bij 0 en teken 360 graden
g.fillArc( 15, 120, 80, 40, 0, 360 );
// begin bij 270 en teken -90 graden
g.fillArc( 100, 120, 80, 40, 270, -90 );
// begin bij 0 en teken -270 graden
g.fillArc( 185, 120, 80, 40, 0, -270 );
}
// voer de applicatie uit
public static void main( String args[] )
{
DrawArcs application = new DrawArcs();
application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
}
}
// 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
7 Polygonen en polylijnen

class Polygon

Polygoon


Gesloten vorm met vele rechte zijden
Polylijn

Verzameling van verbonden punten
JAVA
44
Methoden voor polygonen en
polylijnen
Methode
Omschrijving
public void drawPolygon( int xPoints[], Tekent een polygoon. De x-coördinaat van elk punt is gespecificeerd in de
int yPoints[],int points )
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(
Tekent een verzameling van verbonden lijnen. De x-coördinaat van elk punt is
int xPoints[], int yPoints[],
gespecificeerd in de xPoints array en de y-coördinaat van elk punt is
int points )
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[], Tekent een gevulde polygoon. De x-coördinaat van elk punt is gespecificeerd in
int yPoints[], int points )
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
public Polygon( int xValues[],
int yValues[], int numberOfPoints )
// Polygon class
Creëert een nieuw polygoon object. De polygoon bevat geen enkel punt.
public void addPoint(int x, int y )
JAVA
Voegt een
paar (x,y) toe aan de polygoon
Creëert een nieuw polygoon object. De polygoon heeft numberOfPoints
zijden, waarvan elk punt bestaat uit een x-coördinaat uit xValues en een ycoördinaat uit yValues.
45
Voorbeeld
Polygonen en polylijnen tekenen.
JAVA
46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Fig. 12.21: DrawPolygons.java
// Polygonen tekenen
// Java core packages
import java.awt.*;
// Java extension packages
import javax.swing.*;
public class DrawPolygons extends JFrame {
// instellen van de titel en de afmetingen van het venster
public DrawPolygons()
{
super( "Drawing Polygons" );
setSize( 275, 230 );
setVisible( true );
}
// polygonen en polylijnen tekenen
public void paint( Graphics g )
{
// aanroepen van de methode paint van de superclass
super.paint( g );
int xValues[] = { 20, 40, 50, 30, 20, 15 };
int yValues[] = { 50, 50, 60, 80, 80, 60 };
Polygon polygon1 = new Polygon( xValues, yValues, 6 );
int arrays met de punten van
de Polygon polygon1
Teken polygon1 op het
scherm
g.drawPolygon( polygon1 );
int xValues2[] = { 70, 90, 100, 80, 70, 65, 60 };
int yValues2[] = { 100, 100, 110, 110, 130, 110, 90 };
int arrays met de punten van
de Polygon polygon2
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Teken polygon2 op het
scherm
g.drawPolyline( xValues2, yValues2, 7 );
int xValues3[] = { 120, 140, 150, 190 };
int yValues3[] = { 40, 70, 80, 60 };
Specificeer de punten van de
Polygon polygon3 en teken een
gevulde polygoon op het scherm
g.fillPolygon( xValues3, yValues3, 4 );
Polygon polygon2 =
polygon2.addPoint(
polygon2.addPoint(
polygon2.addPoint(
polygon2.addPoint(
polygon2.addPoint(
new Polygon();
165, 135 );
175, 150 );
270, 200 );
200, 220 );
130, 180 );
g.fillPolygon( polygon2 );
De methode addPoint voegt punten met x en
y coördinaten toe aan Polygon
}
// voer de applicatie uit
public static void main( String args[] )
{
DrawPolygons application = new DrawPolygons();
application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
}
}
// einde van de class DrawPolygons
Resultaat van lijn 42
Resultaat van lijn 32
DrawPolygons.java
Output
Resultaat van lijn 37
Resultaat van lijn 51
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
50
Java 2D vormen

Package java.awt.geom





Ellipse2D.Double
Rectangle2D.Double
RoundRectangle2D.Double
Arc3D.Double
Lines2D.Double
JAVA
51
Voorbeeld
Enkele Java2D vormen en hun
specifieke eigenschappen.
JAVA
52
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Fig. 12.22: Shapes.java
// Enkele Java2D vormen
// Java core packages
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
// Java extension packages
import javax.swing.*;
public class Shapes extends JFrame {
// instellen van de titel en de afmetingen van het venster
public Shapes()
{
super( "Drawing 2D shapes" );
setSize( 425, 160 );
setVisible( true );
}
// teken vormen met Java2D API
public void paint( Graphics g )
{
// aanroep van de methode paint van de superclass
super.paint( g );
// maak 2D door typeconversie van g naar Graphics2D
Graphics2D g2d = ( Graphics2D ) g;
// teken 2D ellips gevuld met een blauw-gele gradiënt
g2d.setPaint( new GradientPaint( 5, 30, Color.blue, 35,
100, Color.yellow, true ) );
Gebruik GradientPaint
om de vorm te vullen met
een gradiënt
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
g2d.fill( new Ellipse2D.Double( 5, 30, 65, 100 ) );
Vul de ellips met de gradiënt
// teken een rode 2D rechthoek
g2d.setPaint( Color.red );
g2d.setStroke( new BasicStroke( 10.0f ) );
g2d.draw( new Rectangle2D.Double( 80, 30, 65, 100 ) );
Gebruik BasicStroke om
een 2D rechthoek te tekenen
met een rode rand
// teken een afgeronde 2D rechthoek met een gebufferde achtergrond
BufferedImage buffImage = new BufferedImage(
BufferedImage
10, 10, BufferedImage.TYPE_INT_RGB );
Graphics2D gg = buffImage.createGraphics();
gg.setColor( Color.yellow ); // teken met geel
gg.fillRect( 0, 0, 10, 10 ); // teken een gevulde rechthoek
gg.setColor( Color.black ); // teken met zwart
gg.drawRect( 1, 1, 6, 6 );
// teken een rechthoek
gg.setColor( Color.blue );
// teken met blauw
gg.fillRect( 1, 1, 3, 3 );
// teken een gevulde rechthoek
gg.setColor( Color.red );
// teken met rood
gg.fillRect( 4, 4, 3, 3 );
// teken een gevulde rechthoek
// teken buffImage in JFrame
g2d.setPaint( new TexturePaint(
buffImage, new Rectangle( 10, 10 ) ) );
g2d.fill( new RoundRectangle2D.Double(
155, 30, 75, 100, 50, 50 ) );
// teken een 2D boog met wit
g2d.setPaint( Color.white );
g2d.setStroke( new BasicStroke( 6.0f ) );
g2d.draw( new Arc2D.Double(
240, 30, 75, 100, 0, 270, Arc2D.PIE ) );
// teken 2D lijnen met groen en geel
g2d.setPaint( Color.green );
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
g2d.draw( new Line2D.Double( 395, 30, 320, 150 ) );
float dashes[] = { 10 };
g2d.setPaint( Color.yellow );
g2d.setStroke( new BasicStroke( 4, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND, 10, dashes, 0 ) );
g2d.draw( new Line2D.Double( 320, 30, 395, 150 ) );
}
// voer de applicatie uit
public static void main( String args[] )
{
Shapes application = new Shapes();
application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
}
}
// einde van de class Shapes
Teken een volle
groene lijn
Teken een gebroken gele
lijn die de volle groene lijn
snijdt
Voorbeeld
Tekenen van vormen opgebouwd uit
rechte lijnen en complexe curven.
JAVA
56
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Fig. 12.23: Shapes2.java
// Demonstratie
// Java core packages
import java.awt.*;
import java.awt.geom.*;
// Java extension packages
import javax.swing.*;
public class Shapes2 extends JFrame {
// instellen van de titel, de afmetingen en de achtergrondkleur
// van het venster
public Shapes2()
{
super( "Drawing 2D Shapes" );
getContentPane().setBackground( Color.yellow );
setSize( 400, 400 );
setVisible( true );
}
public void paint( Graphics g )
{
// aanroep van de methode paint van de superclass
super.paint( g );
int xPoints[] =
{ 55, 67, 109, 73, 83, 55, 27, 37, 1, 43 };
int yPoints[] =
{ 0, 36, 36, 54, 96, 72, 96, 54, 36, 36 };
x-y coördinaten voor de sterren
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Graphics2D g2d = ( Graphics2D ) g;
// maak een ster met een reeks punten
GeneralPath star = new GeneralPath();
// stel de eerste coordinaat in van General Path
star.moveTo( xPoints[ 0 ], yPoints[ 0 ] );
GeneralPath is een
vorm opgebouwd uit
rechte lijnen en complexe
curven
// creëer een ster - er wordt hier geen ster getekend
for ( int count = 1; count < xPoints.length; count++ )
star.lineTo( xPoints[ count ], yPoints[ count ] );
Maak een
ster
// sluit de vorm
star.closePath();
// verschuif de oorsprong naar (200, 200)
g2d.translate( 200, 200 );
// draai rond de oorsprong en teken sterren met willekeurige kleuren
for ( int count = 1; count <= 20; count++ ) {
// draai het coördinatenstelsel
g2d.rotate( Math.PI / 10.0 );
// instellen van de willekeurige
g2d.setColor( new Color(
( int ) ( Math.random() * 256
( int ) ( Math.random() * 256
( int ) ( Math.random() * 256
// teken een gevulde ster
g2d.fill( star );
}
}
// einde method paint
kleur om te tekenen
),
),
) ) );
Teken 20 sterren
rond de oorsprong,
gevuld met een
willekeurige kleur
71
72
73
74
75
76
77
78
79
80
81
// voer de applicatie uit
public static void main( String args[] )
{
Shapes2 application = new Shapes2();
application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
}
}
// einde van de class Shapes2
Oefeningen
Hoofdstuk 12
JAVA
60
Oefening 1

Teken acht concentrische cirkels. De
afstand tussen de cirkels bedraagt 10
pixels.
JAVA
61
Oefening 2

Teken lijnen van random lengte en in
random kleuren.
JAVA
62
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
63
Oefening 4

Teken een piramide. Maak gebruik van
de class GeneralPath en de methode
draw uit de class Graphics2D.
JAVA
64
Download