H7 Vensters

Leerdoelen

Na het bestuderen van dit hoofdstuk wordt van je verwacht dat je:

  • snapt hoe een applicatie samenwerkt met een besturingssysteem
  • een idee hebt uit wat voor objecten een grafische interface is opgebouwd
  • het begrip "event-handling" kent

Theorie

Windows is een grafische interface: Afbeeldingen of opgemaakte tekst op het scherm tonen of afdrukken met de printer op papier wordt door Windows afgehandeld. Een programmeur hoeft geen hardware te benaderen om afbeeldingen af te drukken. Een in Windows geschreven programma kan elke videokaart of printer gebruiken, waarvoor in Windows een stuurprogramma beschikbaar is.

Maar Windows is meer: Windows is ook een besturingssysteem dat gebeurtenissen (events) afhandelt. In objectgeoriënteerd programmeren is een object een combinatie van code en gegevens. Een venster dat je op het scherm ziet, is een object. Elke knop, radiobutton, invoervak, label en noem alle soorten objecten maar op die op het scherm kunnen verschijnen, zijn vensters en werken in principe op dezelfde manier, omdat ze afgeleid zijn van het basisobject venster.

Als een gebruiker met de muis op een knop klikt, stuurt Windows een gebeurtenis naar de methode die bij die knop hoort: In dit geval dat er op de knop is geklikt. Een andere gebeurtenis had dubbelklikken kunnen zijn. Windows houdt intern bij welke methode bij welk venster hoort. Je kunt ook zeggen: Windows roept de methode aan die bij die knop hoort. Dit wordt in vaktermen event-handling genoemd.
De methode staat in het intern geheugen van de computer. Een aantal eigenschappen zijn standaard: Een venster is altijd rechthoekig en een knop zal zich indrukken zodra een gebruiker erop klikt. Een actief venster zal een titelbalk met blauwe achtergrond laten zien.

Een programmeur moet twee dingen doen:

  • hij moet ervoor zorgen dat het venster zichtbaar wordt op het scherm
  • hij moet aan Windows vertellen welke methode bij het venster hoort

Hoe dat praktisch in zijn werk gaat, lees je in het volgende hoofdstuk.

Vragen

  1. Je kunt in de methode init() van je applet de afmetingen van het scherm bepalen met de methode setSize(int width, int height).
    Tussen de haakjes wordt aangegeven dat deze methode twee argumenten (of parameters) van het type int verwacht. Je kunt de methode als volgt "aanroepen":

    import java.awt.*;
    import java.applet.*;
    
    public class Show extends Applet {
    
      public void init() {
        setSize(400, 300);
      }
      
      public void paint(Graphics g) {
        g.drawString("Welcome to Java!!", 50, 60 );
      }
    }
    

    Kun je in de Java API (zie web-links) deze methode ergens vinden?

  2. In welke klasse wordt deze methode gedefinieerd?

  3. Dezelfde klasse heeft een tweede methode met dezelfde naam. Wat is het verschil?

Uitwerking

De methode wordt zonder tussenkomst van een instantie van een andere klasse aangeroepen in de klasse Show die een uitbreiding van Applet is. Je had ook mogen schrijven
this.setSize(400, 300); om aan te geven dat het een methode van de eigen klasse is. In de Java API zie je bij de klasse Applet onder "Method Summary" alle methoden van de klasse opgesomd. De methode setSize() staat daar niet tussen. In het onderdeel "Methods inherited from class java.awt.Component" wordt de methode wél genoemd. Aangezien Applet een uitbreiding is van onder meer Component, erft zij alle eigenschappen, waaronder methoden.

Java API

Een klasse kan verschillende methoden bevatten met dezelfde naam, maar met verschillende argumenten. De klasse Component heeft nog een methode setSize die als argument een instantie van het type Dimension accepteert. Dit noemen we "overloading".

	Dimension dim = new Dimension(400, 300);
	this.setSize(dim);