Opdrachten Cirkel
Cirkel (met Jpanel)
Bij de onderstaande opdracht behoort het bestand Panels: JPanels_1.java (map Panel) in de map Cirkel. Applicaties in Java hebben altijd een publieke klasse waarin een methode ‘main’ voorkomt. Deze methode zorgt ervoor dat er altijd één object van de klasse wordt gecreëerd. Voor het beantwoorden van de onderstaande leertaken kun je opnieuw gebruik maken van de theorie die je bij de programma’s Leegvenster en Dialogen hebt gebruikt.
Leertaak 9 A
Open het bestand JPanels_1.java en run het. Hoe ziet deze methode main er in dit bestand uit.
B
Omschrijf bij ieder onderdeel van de methode de betekenis ervan.
C
Wat is de functie van de methode main.
Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing. java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent We gaan een applicatie maken waarin een cirkel wordt getekend met een straal van variabele grootte. Daarvoor hebben we een grafische interface nodig. In dit voorbeeld wordt de interface geplaatst op een canvas. De klasse Canvas is een subklasse van de klasse Component. Op het canvas is een tekstvakje nodig waarin de gewenste straal kan worden geplaatst. Ergens moet een tekst worden neergezet waarop staat te lezen wat de gebruiker moet doen. En.. er is een stukje nodig op het canvas, waarop de cirkel wordt getekend. Tot slot is er iets nodig dat het programma de aanzet geeft om te gaan tekenen. Daarvoor gebruiken we een knop. In de methode main heb je gezien dat er panels gecreëerd worden. Deze panels zijn nodig om het canvas, het textfield, het label en de button op te plaatsen. De klassen Jtextfield, Jbutton en Jlabel zijn allemaal subklassen van de klasse Component. Tekenen gebeurt meestal op een canvas. Omdat we hier een cirkel gaan tekenen gebruiken we daarvoor een canvas.
1 van 7
Opdrachten Cirkel
Leertaak 10 A
Run het programma JPanels_1.java. Hoeveel JPanels zijn er nodig en waarvoor zijn deze nodig?
B
Kijk naar de code van het programma JPanels_1. Welke namen hebben de JPanels gekregen in het programma?
C
Aan welk Jpanel is welke component toegevoegd?
D
Voeg de knop toe aan het bovenste panel. Wat zie je gebeuren?
Het plaatsen van de Panels
In de code kom je de onderstaande regel tegen:
setLayout(new BorderLayout()); add("North",pBoven); add("Center",pMidden); add("South", pOnder); De klasse JPanel heeft de klasse Container als superklasse en dat betekent dat aan JPanel componenten kunnen worden toegevoegd. De klasse BorderLayout wordt
2 van 7
Opdrachten Cirkel
gebruikt om de panels te rangschikken. In dit voorbeeld is de indeling van de panels eenvoudig. Bij een ingewikkelder indeling wordt vaak de klasse GridBagLayout gebruikt. In het voorbeeld van Cirkel wordt de plaats van de panels bepaald door “North”, “Midden”, “West” of “South”.
Leertaak 11 A
Aan welk object wordt de actionListener toegevoegd?
B
Uit welke coderegel maak je dit op?
C
Aan welk object wordt een windowListener toegevoegd?
Het object (new WindowAdapter()) is een object (instantie) van de klasse WindowAdapter. Deze klasse wordt gebruikt om Windowevents mogelijk te maken. Het woord ‘new’ roept de constructormethode aan.
Leertaak 12 A
Omschrijf welke betekenis je toekent aan de zin:
tf.requestFocus();
Leertaak 13 A
Wat is de constructormethode van de klasse CirkelCanvas?
B
Welke parameter krijgt de constructormethode mee?
This
Binnen een methode of een constructormethode, verwijst het woord ‘this’ naar het object wiens methode of constructor wordt aangeroepen. In ons voorbeeld staat in de body van de constructor methode
class CirkelCanvas extends Canvas { JPanels_1 fr; CirkelCanvas(JPanels_1 fr) { this.fr = fr; } De regel this.fr = fr; is een assignment statement (een toekenningsopdracht). Het wijst de waarde aan de rechterkant van het ‘=’ teken toe aan de variabele aan de linkerkant.
3 van 7
Opdrachten Cirkel
Een algemene vorm van een toekenningsopdracht ziet er als volgt uit:
= De kan een constante waarde zijn (bijv. int temperatuur = 20) maar ook een veranderlijke waarde. In het cirkelprogramma wordt deze toekenning gebruikt om duidelijk te maken dat hier wordt verwezen naar het object JPanels_1 fr. Eigenlijk staat er dus dat de parameter JPanels_1 fr in de constructormethode verwijst naar de instantie JPanels_1 fr in de klasse CirkelCanvas.
Leertaak 14 In de aanroep van de methode Paint wordt een instantie van de klasse Dimension gecreëerd. De constructor van deze klasse creëert een instantie met een breedte en hoogte van o als integer waarde. De klasse bevat de breedte en hoogte van een component dat als object in een programma aanwezig is. A
Welke coderegel vraagt de breedte en hoogte op?
B
Van welke component zou Dimension d de hoogte en breedte opvragen?
Leertaak 15 A
Welke methode wordt gebruikt om de daadwerkelijke cirkel te tekenen? De methode drawOval krijgt 4 argumenten mee. drawOval (int x, int y, int width, int height) waarbij de argumenten respectievelijk doelen op de x en y coördinaat van de linkerbovenhoek van de ellips (cirkel) en op de breedte en hoogte ervan.
B
Je ziet vervolgens dat er met de opgeroepen waarden iets wordt gedaan in de coderegels:
int xC = d.width/2; int yC = d.height/2; Wat is de reden van deze berekening?
4 van 7
Opdrachten Cirkel
Cirkel_2
Bij de onderstaande opdracht behoort het bestand Panels: JPanels_2.java (map Panel) in de map Cirkel.
Leertaak 16 A
Kopieer de code uit JPanels_1.java naar een nieuw DrJava document. Sla het bestand op als JPanels_2.java. Je krijgt een foutmelding te zien. Wat is de reden van deze foutmelding?
B
Verander op de juiste plaatsen in de code van het programma de naam JPanels_1 in JPanels_2. Welke onderdelen van het programma betreft dit?
C
Verwijder de code van de klasse CirkelCanvas uit het programma en compileer het. Geef een verklaring voor de foutmelding die je terugkrijgt van de compiler?
In plaats van een cirkel gaan we nu op het canvas een rechthoek tekenen.
Leertaak 17 A
Schrijf een declaratie voor een klasse RechthoekCanvas.
B
Creëer een instantie van de klasse RechthoekCanvas binnen de klasse JPanels_2 die ervoor zorgt dat er daadwerkelijk getekend kan worden op het canvas wanneer een gebruiker op de knop klikt.
C
In de parameter van de constructormethode in de klasse RechthoekCanvas moet naar deze instantie worden verwezen. Schrijf de constructormethode van de klasse RechthoekCanvas.
D
Waarom is het nodig om JPanels_2 fr als veld aan te maken binnen de klasse RechthoekCanvas?
5 van 7
Opdrachten Cirkel
Parameters
Methoden en constructors ontvangen hun waarden via parameters. Om welke parameters het in een methode gaat is terug te vinden in de header van die methode. De constructor uit de klasse JPanels_2 (JPanels_2())heeft geen parameters omdat tussen de haken niets vermeld staat De constructor van de klasse CirkelCanvas heeft als parameter (JPanels_2 fr) zoals blijkt uit de regel CirkelCanvas(JPanels_2 fr). De parameter in een methode of een constructormethode wordt een formele parameter genoemd. De waarde die deze parameter in een object krijgt is de actuele parameter.
Tekenen met Graphics
Na het uitvoeren van leertaak 17 staat er de onderstaande code in je programma:
class RechthoekCanvas extends Canvas { JPanels_2 fr; RechthoekCanvas(JPanels_2 fr) { this.fr = fr; } } Daarmee is de klasse RechthoekCanvas gedefinieerd met een constructormethode en een veld. Om te tekenen hebben we opnieuw de klasse Graphics nodig. In de klasse CirkelCanvas werd een methode ‘drawOval’ aangeroepen om de cirkel te kunnen tekenen. Om een rechthoek te tekenen bestaat er een methode drawRect binnen de klasse Graphics. Deze methode staat als volgt gedefinieerd:
drawRect(int x, int y, int width, int height) en heeft daarmee vier formele parameters van het type int.
Int x en int y duiden op de coördinaten van de linkerbovenhoek van de rechthoek. Int width en int height geven respectievelijk de breedte en hoogte van de rechthoek aan.
Leertaak 18 A
Gebruik de klasse Dimension om de breedte en hoogte van een component op te vragen. Schrijf hiervoor de coderegels in je programma. Om welke component gaat het in dit geval?
6 van 7
Opdrachten Cirkel
B
In de klasse JPanels_1 was een tekstveld gecreëerd waarin de gebruiker de gewenste straal van de cirkel kon aangeven. Bij het tekenen van een rechthoek hebben we twee tekstvelden nodig om zowel de breedte als de hoogte van de rechthoek mee te kunnen geven. Maak twee tekstvelden aan waarin de gewenste breedte en hoogte door de gebruiker kunnen worden ingetypt.
C
Voorzie je programma van twee labels zodat de gebruiker weet in welk tekstveld ‘breedte’ en in welk ‘hoogte’ kan worden ingetypt.
D
In het programma JPanels_1 wordt een beginwaarde meegegeven aan het tekstveld voor de straal van de cirkel. Varieer de waarden in dit tekstveld. Wat is de betekenis ervan?
E
Zorg ervoor dat de rechthoek vanuit het midden van het canvas wordt getekend.
Leertaak 19 Ervan uitgaande dat je programma werkt zoals het moet doen: A
Knip de code van de klasse RechthoekCanvas uit je programma en plak het tijdelijk een notepad bestand. Run het programma opnieuw. Maakt het uit of de code van de klasse RechthoekCanvas in het bestand JPanels_2.java staat?
B
Wat is daarvan de reden?
7 van 7