Java2 1.5: Graphics

  1. Basisbegrippen
  2. De klasse Graphics
  3. Tekenen met NetBeans IDE
  4. Graphics 2D

Basisbegrippen

Dit hoofdstuk leert je hoe je lijnen, vormen en kleuren kan gebruiken binnen een toepassing.

extend JPanel

Het tekenen kan je doen op een JPanel, hiervoor gebruik je de methode paintComponent van het JPanel.
Concreet zullen we een klasse maken die overerft van JPanel, we overriden de methode paintComponent en geven deze onze eigen opvulling.

repaint

We gebruiken de methode repaint om veranderingen in de tekening weer te geven.

Kleuren

Binnen de constructor van onze eigen klasse kunnen we de achtergrondkleur van het tekenpaneel instellen.

In Java bestaan een aantal standaardkleuren waar je enkel de naam voor hoeft te kennen: deze namen werden in vorige versies van Java genoteerd met kleinen letters, men is vanaf versie 1.4 overgestapt op hoofdletters.

Oud: Color.black, Color.darkGray, Color.gray, Color.lightGray, Color.white, Color.magenta, Color.red, Color.pink, Color.orange, Color.yellow, Color.green, Color.cyan, Color.blue

Vanaf 1.4: Color.BLACK, Color.DARK_GRAY, Color.GRAY, Color.LIGHT_GRAY, Color.WHITE, Color.MAGENTA, Color.RED, Color.PINK, Color.ORANGE, Color.YELLOW, Color.GREEN, Color.CYAN, Color.BLUE

Je kan ook zelf kleuren samenstellen door aan te geven wat het aandeel rood, groen en blauw is in de kleur (int 0 - 255).

Color c = new Color(255, 255, 240);
this.setBackground(c);

Fonts

Werken met lettertypes kan met behulp van de klasse Font.
Font f;
f = new Font(String naam, int stijl, int grootte);

Waarbij de naam "serif", "sansserif", "monospaced" of een font aanwezig op het systeem is.

Stijl is een integer, waarbij je de Java-constanten Font.PLAIN. Font.BOLD, Font.ITALIC of Font.BOLD+Font.ITALIC kan gebruiken.

Grootte is een integer die de puntgrootte aangeeft, typisch een waarde in het bereik 8 - 48.

Wens je een lijst met de beschikbare lettertypes op het systeem, dan kan je dit als volgt opvragen:

String typen[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
        for(int i=0 ; i < typen.length; i++){
            System.out.println(typen[i]);
        }

Graphics

Methoden van het Graphics-object

Wanneer je de methode paintComponent van een JPanel overridet dan ontvang je een object van de klasse Graphics, meestal wordt aan dit object de naam g gegeven.

Dit object kan je gebruiken om te tekenen op het JPanel of hiervoor je eigen klasse gebruiken die overerft van JPanel.

Belangrijke methoden voor het Graphics-object, met de meest gebruikte argumenten:

methode omschrijving
drawLine(x1, y1, x2, y2) Teken een lijn
drawRect(x, y, width, height) Teken een rechthoek. x,y is de linkerbovenhoek
fillRect(x, y, width, height) Een gevulde rechthoek
drawOval(x, y, width, height) Ovaal
fillOval(x, y, width, height) Gevulde ovaal
drawArc( x, y, width, height, startAngle, arcAngle) Een cirkelboog.

Het centrum van de boog is het centrum van de rechthoek met linkerbovenhoek op positie x,y en opgegeven breedte en hoogte. De hoek die overspannen wordt geef je op in graden met een starthoek en eindhoek. O als hoekwaarde is de hoek op 3uur. Een positieve waarde zorgt voor een hoekwaarde in tegenwijzerzin.

fillArc( x, y, width, height, startAngle, arcAngle) Een gevulde cirkelboog
setFont(Font f) Stel het lettertype in
drawString(String s, x, y) Toon een tekenreeks.
drawPolyline(int[] xPoints, int[] yPoints, nPoints) Teken een lijn die de aangegeven punten verbindt.De eindpunten worden niet automatisch gesloten. Je kan geeft ook het aantal te tekenen punten op.
drawPolygon( int[] xPoints, int[] yPoints, nPoints) Teken een lijn die de aangegeven punten verbindt en sluit de eindpunten.
fillPolygon( int[] xPoints, int[] yPoints, nPoints) Opgevulden Polygon.
drawPolygon(poly) Hier geef je een Polygon-object mee aan de methode drawPolygon. Op die manier kan je de polygoon eerste samenstellen vanuit code:
Polygon poly = new Polygon();  
//punt toevoegen aan de Polygoon
poly.addPoint(x, y); 
. . .
g.drawPolygon(poly);

Dit kan je ook gebruiken bij fillPolygon.

Methoden van het JPanel

Aansluitend bij bovenstaande tabel kan je een aantal methoden toepassen op het JPanel (of een subklasse hiervan).

methode beschrijving
setPreferredSize(new Dimension(width, height)) Stel de dimensies in van het Canvas
setBackground(Color c); Stel de achtergrondkleur in.
setForeground(Color c); Stel de voorgrondkleur in (kleur van de pen).
getVisibleRect() Levert een Rectangle-object met een width en height-eigenschap om de breedte en hoogte van het tekenoppervlak te kennen
getWidth() Breedte van het tekengebied
getHeight() Hoogte van het tekengebied

Tekenen met NetBeans IDE

Werkwijze

Om een toepassing te maken met NetBeans IDE waarbij we een subklasse gebruiken van JPanel gaan we als volgt te werk:

  1. We starten een nieuw project via de Project Manager
  2. We mounten de applicatiemap: rechtsklik Filesystems en kies mount > local directory
  3. Rechtsklik de gemounte map en kies new > JFrame Form
    Geef als naam FiguurKeuze en druk finish.
  4. Rechtsklik de gemounte map en kies new > JPanel Form
    Geef als naam tekenPaneel en druk finish.
  5. Override in de code van tekenPaneel de methode paintComponent:
    protected void paintComponent(java.awt.Graphics g) {
            super.paintComponent(g);
    		...uw tekenopdrachten...
    }
    
  6. Compileer tekenPaneel
  7. Rechtsklik tekenPaneel kies copy, paste in FiguurKeuze > Form FiguurKeuze > JFrame
  8. Rechtsklik tekenePaneel1 > Properties
    Stel een PreferredSize in vb. 400, 300
  9. Vul de nodige tekenopdrachten aan in paintComponent van tekenPaneel
  10. Build en voer FiguurKeuze uit

Voorbeeld

Een voorbeeldtoepassing die het tekenen in een subklasse tekenPaneel van JPanel illustreert. In de toepassing wordt gewerkt met een instantievariabele figuur in de klasse tekenPaneel. Deze variabele is in te stellen via de methode setFiguur. In de methode paintComponent roepen we eerst de methode paintComponent van de superklasse JPanel aan met volgende opdracht:

super.paintComponent(g);
Hierna wordt in de methode paintComponent gekeken wat de waarde van deze variabele figuur is, en de juiste tekenopdracht wordt uitgevoerd.

In het hoofdprogramma FiguurKeuze kan de gebruiker met behulp van een JMenuBar een figuur kiezen. Hierbij wordt de variabele figuur ingesteld en de methode repaint van tekenPaneel1 uitgevoerd, waardoor de methode paintCompontent van tekenPaneel1 opnieuw wordt uitgevoerd.

TIP: roep nooit zelf de methode paintComponent opnieuw op, maar werk met de methode repaint van het tekenPaneel-object.

Download dit voorbeeld in zip-formaatToon /verberg

Graphics 2D

De graphics 2D - elementen vormen een uitbreiding en aanvulling op de elementen en mogelijkheden van de klasse Graphics.

Meer hierover bij Sun.

Meer tutorials:
leer ook: html | xhtml | css | asp | asp.net | c# | ado.net | linq | ajax | java | javascript
Valid HTML 4.01! Valid CSS! © - Cursusweb