2. Tekenen in een applet

In de methode paint() kun je goed tekenen. Laten we eens een tekening maken van een cirkel waarvan het middelpunt precies midden in het appletvenster ligt. De klasse Graphics kent een methode om een ellips te maken, die er zo uitziet:

g.drawOval (x, y, breedte, hoogte);

Dat levert een ellips (of "ovaal") op waarvan de maten afhankelijk zijn van de "omsluitende rechthoek", dus zo:

Wil je de rechthoek tekenen, die hierboven gestippeld getekend is, dan kan dat met:

g.drawRect (x, y, breedte, hoogte);

Een cirkel is feitelijk een ellips waarvan breedte en hoogte gelijk zijn. We gaan een cirkel tekenen waarvan het middelpunt precies midden in het appletvenster ligt. Een probleempje daarbij is dat het middelpunt in de methode drawOval(x,y,breedte,hoogte) helemaal niet voorkomt. We moeten dus even gaan rekenen.

In de onderstaande figuur kun je goed zien dat je x en y kunt berekenen als je de coördinaten van het middelpunt (xm, ym) weet, en de straal (r). Dus:

x = xm - r
y = ym - r

Het appletvenster dat wij in deze cursus gebruiken is 320 pixels breed en 240 pixels hoog. Dus kunnen we x en y (voor een cirkel met een straal van 100 pixels in het midden van het appletvenster) als volgt berekenen:

x = 320/2 - r = 160 - 100 = 60
y = 240/2 - r = 120 - 100 = 20

De volgende applet tekent die cirkel:

// Een cirkel getekend door het
// midden van het appletvenster
import java.applet.*;
import java.awt.*;
public class CirkelDoorMidden extends Applet {
   public void paint (Graphics g)  {
      g.drawOval (60, 20, 200, 200);
   }
}

Willen we deze cirkel een andere straal geven, dan zouden we alle vier de getallen bij drawOval moeten veranderen - terwijl er in feite maar één gegeven verandert: de straal. Het is handiger om gebruik te maken van variabelen.

Je kunt de lengte (100 pixels) van de straal als volgt laten opslaan:

int straal = 100;

Hiermee reserveren we een stukje geheugen voor een heel getal (int), dat we straal noemen. We kunnen ook de breedte en hoogte van appletvenster op die manier in variabelen stoppen met:

int breedte = 320, hoogte = 240;

Door het gebruik van variabelen worden programma's efficiënter en veel makkelijker aan te passen. Met variabelen ziet onze cirkel-applet er zo uit:

// Een cirkel getekend door het midden van het
// appletvenster met behulp van variabelen.
import java.applet.*;
import java.awt.*;
public class CirkelDoorMidden2 extends Applet {
public void paint (Graphics g) {
   int breedte=320, hoogte=240, straal=100;
   int x=breedte/2-straal, y=hoogte/2-straal;
   g.drawOval (x, y, 2*straal, 2*straal);
}

   

Variabelen met tekst erin: strings

De variabelen die we tot dusver hebben gebruikt waren van het type int (hele getallen).

Een heel apart soort variabelen zijn de zogenaamde strings. Deze kunnen reeksen van tekens bevatten. Vandaar dat ze in het Nederlands wel eens tekenreeksen worden genoemd. Ze kunnen elk soort teken bevatten, bijvoorbeeld:

String naam = "Linus Torvalds";
String streep = "--------------------------";
String som = "2 + 3 = 5";

Verder in deze cursus zul je zien dat strings interessante mogelijkheden bieden. Maar je kunt er niet mee rekenen. Kijk maar eens naar het volgende programmafragment:

String s1 = "12", s2 = "13";
String tekst = "De som van " + s1 + " en " + s2; 
g.drawString (tekst + " is " + s1 + s2, 10, 100);

Dit levert dit merkwaardige beeld op:

   

Opdracht 2.1

Schrijf een applet waarin twee even grote rechthoeken naast elkaar worden afgebeeld. De afstand tussen de rechthoeken en de afstand links en rechts tot aan de rand van het venster moet net zo groot zijn als de breedte van elk van de rechthoeken. De afstand onder en boven de rechthoeken moet net zo groot zijn als de hoogte van de rechthoeken.

Bereken de maten niet met getallen, maar met behulp van de twee variabelen:

int breedte = 320, hoogte = 240;

(c) 2003-2008, Thomas J.H.Luif