Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Wie kann das doppelt gezeichnete Fenster unterbunden werden?
Das Pgm. in Kürze:
class Filter {
Filter() {
panel.add(new MyPanel() );
content.add(panel,BorderLayout.CENTER);
this.setVisible(true); // dieses Fenster wird beim Starten zweimal gezeichnet.
}
Nach dem Start des Pgm`s erscheinen zwei Fenster. Das 2.Fenster ist etwas nach unten versetzt.
Wie könnte es etwas besser gemacht werden? Vielen Dank Harald
Die Methode "paint" ist eingebunden in einen "callback" ("Wiederholungsbesuch") Mechanismus zum Zeichnen.
Das heißt, daß das Toolkit (sowohl Swing als auch AWT) diese Methode aufruft, wenn es Zeit ist zu malen.
Wenn das Toolkit diese Methode aufruft, ist der Parameter "Graphics g" mit dem passenden Zustand für das Zeichnen auf dieser bestimmten Komponente vorkonfiguriert:
* Die Farbe des Graphics Objektes wird auf die foreground-Eigenschaft der Komponente eingestellt.
* Die Schriftart des Graphics Objektes wird auf die font-Eigenschaft der Komponente eingestellt.
* Die "translation" des Graphics Objektes wird so eingestellt, daß die Koordinate (0,0) die obere linke Ecke der Komponente darstellt.
* Das "clip"-Rechteck des Graphics Objektes wird auf den Bereich der Komponente eingestellt, der neu gezeichnet werden muss.
Programme müssen dieses Graphics Object verwenden um die Oberfläche darzustellen. Sie sind frei, den Zustand des Graphics Objektes so zu ändern wie es benötigt wird. Hier ist ein einfaches Beispiel von einem paint callback, der ein Bild innerhalb einer Komponente darstellt:
Code:
public void paint(Graphics g) {
g.drawImage(bild, 0, 0, this);
}
Swing unterteilt den paint() Aufruf in drei verschiedene Methoden, die in folgender Reihenfolge aufgerufen werden:
Swingprogramme sollten paintComponent() anstelle von paint() überschreiben. Obgleich die API es erlaubt, gibt es im Allgemeinen keinen Grund paintBorder() oder paintChildren() zu überschreiben (und wenn du es tust, sei dir sicher was du tust!). Dies macht es den Programmen einfacher, nur den Teil des Zeichnens zu überschreiben, den sie erweitern müssen.
Unterklassen von Swingkomponenten, sollten ausserdem super.paintComponent() innerhalb ihrer paintComponent Überschreibung aufrufen um die offscreen Graphics zu bereinigen und einem eventuellen "UI Delegate"* das Zeichnen zu ermöglichen:
Vielen, vielen Dank für Deine ausführliche Erläuterung.
Du hast mir sehr geholfen.Jetzt weiß ich uch, warum bei paint(Graphics g) {g.drawImage(bild,0,0,this) }
keine Null-PointerException aufgerufen wird.