1 / 64

Hoofdstuk 12:

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.

emera
Download Presentation

Hoofdstuk 12:

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hoofdstuk 12: Grafische mogelijkheden en Java2D JAVA

  2. 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 interface java.awt.Paint interface java.awt.Shape GeneralPath interface java.awt.Stroke Line2D RectangularShape Graphics2D Ellipse2D GradientPaint Rectangle2D TexturePaint RoundRectangle2D Gebruikte klassen en interfaces 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 Java (0, 0) X-as ( , ) x y Y –as JAVA

  6. 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 object public 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. Statische constanten van de class Color JAVA

  9. Methoden van de class Color JAVA

  10. Voorbeeld Het gebruik van enkele methoden van de class Color. Rechthoeken en tekst worden getekend in verschillende kleuren. JAVA

  11. 1 // Fig. 12.5: ShowColors.java2 // Het gebruik van kleuren3 4 // Java core packages5 import java.awt.*;6 import java.awt.event.*;7 8 // Java extension packages9 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

  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

  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. JAVA

  14. 1 // Fig. 12.6: ShowColors2.java2 // Het gebruik van JColorChooser3 4 // Java core packages5 import java.awt.*;6 import java.awt.event.*;7 8 // Java extension packages9 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( JColorChooser laat de gebruiker een kleur kiezen De statische methode showDialog toont de “color chooser dialog”

  15. 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

  16. JColorChooser dialoogbox JAVA

  17. 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

  18. Methoden van de class Font JAVA

  19. Methoden van de class Font JAVA

  20. Voorbeeld Gebruik van lettertypen. Er worden vier lettertypen gebruikt, elk in een andere grootte. JAVA

  21. 1 // Fig. 12.9: Fonts.java2 // Gebruik van lettertypen3 4 // Java core packages5 import java.awt.*;6 7 8 // Java extension packages9 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

  22. 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: SansSerif,14-pt,vol Stel lettertype in: Serif, 18-pt, vet, cursief

  23. 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) Xy1Õ leading height ascent baseline descent JAVA

  24. Methoden mbt font metrics JAVA

  25. Voorbeeld Gebruik van font metrics voor twee lettertypen. JAVA

  26. Instellen lettertype: SansSerif, 12-pt, vet FontMetrics object voor het huidige lettertype Gebruik FontMetrics voor ascent, descent, height en leading 1 // Fig. 12.12: Metrics.java2 // Gebruik van methoden van de klasse FontMetrics en3 // de klasse Graphics met betrekking tot font metrics4 5 // Java core packages6 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); -

  27. Herhaal hetzelfde voor het lettertype Serif, 14-pt, cursief 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

  28. 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

  29. Methoden van Graphics JAVA

  30. Methoden van Graphics JAVA

  31. Voorbeeld Lijnen, rechthoeken en ellipsen tekenen. JAVA

  32. 1 // Fig. 12.14: LinesRectsOvals.java2 // Lijnen, rechthoeken en ellipsen tekenen3 4 // Java core packages5 import java.awt.*;6 7 8 // Java extension packages9 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 );

  33. 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 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

  34. ( , ) x y arc height arc width height width De breedte en de hoogte van een boogvoor rechthoeken met afgeronde hoeken • 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

  35. ( , ) x y height width Een ellips in een omschrevenrechthoek 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 negatievehoeken bij bogen Positieve hoeken Negatieve hoeken 90° 90° 180° 0° 180° 0° 270° 270° JAVA

  38. Graphics methoden om bogen te tekenen JAVA

  39. Voorbeeld Bogen tekenen. JAVA

  40. Teken een boog van 360 graden in een gegeven omschreven rechthoek 1 // Fig. 12.19: DrawArcs.java2 // Bogen tekenen3 4 // Java core packages5 import java.awt.*;6 7 8 // Java extension packages9 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 );

  41. 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 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

  42. 7 Polygonen en polylijnen • class Polygon • Polygoon • Gesloten vorm met vele rechte zijden • Polylijn • Verzameling van verbonden punten JAVA

  43. Methoden voor polygonen en polylijnen JAVA

  44. Voorbeeld Polygonen en polylijnen tekenen. JAVA

  45. int arrays met de punten van de Polygon polygon1 Teken polygon1 op het scherm int arrays met de punten van de Polygon polygon2 1 // Fig. 12.21: DrawPolygons.java2 // Polygonen tekenen3 4 // Java core packages5 import java.awt.*;6 7 8 // Java extension packages9 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 };

  46. 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 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

  47. Resultaat van lijn 32 Resultaat van lijn 42 Resultaat van lijn 37 Resultaat van lijn 51 DrawPolygons.java Output

  48. 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

More Related