Material‎ > ‎

MyComponent

MyComponent ohne Veränderungen


Wenn das folgende Programm läuft, dann zeigt die neue Komponente MyComponent dasselbe Verhalten, wie Component, da alle Eigenschaften unverändert vererbt werden.  Das normale Verhalten besteht daraus, einfach einen leeren grauen Hintergrund anzuzeigen.

Das main-Programm tut die Komponente in ein Fenster und zeigt sie an.

import java.awt.*;

public class MyComponent extends Component {

    // (keine Änderung)

    // das main-Programm erzeugt einfach nur die Komponente
    // und tut sie auf den Bildschirm

    public static void main(String[] args) {
        MyComponent c = new MyComponent();
        Frame f = new Frame();
        f.add(c);
        f.setLocation(200,200); 
        f.setSize(200,200);
        f.setVisible(true);
    }
}

MyComponent mit Paint Methode


Unsere neue Komponente soll einen roten Kreis anzeigen.  Dazu müssen wir die paint-Methode durch eine neue Implementierung ersetzen.  Die paint-Methode wird aufgerufen, wenn der Fensterinhalt gemalt werden soll.  Die neue Version wählt eine rote Vordergrundfarbe und malt dann den Kreis.  Das Argument g ist ein Objekt, das die ganzen Graphikoperationen enthält, die auf dem Fensterinhalt ausgeführt werden können.

import java.awt.*;

public class MyComponent1 extends Component {

    // Die neue Version der Komponente vererbt alle Methoden,
    // gibt aber eine neue Implementierung der paint-Methode.

    public void paint(Graphics g) {
        g.setColor(Color.red);
        g.fillOval(100,100,50,50);
    }

    public static void main(String[] args) {
        Component c = new MyComponent1();
        c.setBackground(Color.blue);
        Frame f = new Frame();
        f.add(c);
        f.setLocation(200,200); 
        f.setSize(200,200);
        f.setVisible(true);
    }
}

MyComponent mit Hintergrund


Wir wollen jetzt noch die Hintergrundfarbe der neuen Komponente setzen können.  Hintegrundfarben von Komponenten werden mit setBackground gesetzt.  Wir speichern die Hintergrundfarbe in einer Instanzvariable ab, die wir dann benutzen, um den Hintergrund im Fenster einzufüllen.  

Da die setBackground Methode noch andere, unbekannte Funktionen haben kann, rufen wir die alte Version der Methode in der Superklasse auf.  Dies können wir mit der "super"-Variable tun (die ist ähnlich der "this" Variable).

import java.awt.*;

public class MyComponent2 extends Component {
    Color bg;

    public void paint(Graphics g) {
        g.setColor(bg);
        g.fillRect(0,0,2000,2000);
        g.setColor(Color.red);
        g.fillOval(100,100,50,50);
    }

    public void setBackground(Color c) {
        bg = c;
        super.setBackground(c);
    }

    public static void main(String[] args) {
        Component c = new MyComponent2();
        c.setBackground(Color.blue);
        Frame f = new Frame();
        f.add(c);
        f.setLocation(200,200); 
        f.setSize(200,200);
        f.setVisible(true);
    }
}
Comments