Frage

ich habe eine jrame, auf dem ich einige JComponent Objekte hinzufügen. Jede JComponent hat eine Liste von Containern i hinzufügen, indem Sie mit JComponent.add (Component).

Jetzt in meinem Haupt JComponent Klasse, genannt MyComponent, i die geschützte Methode paintcomponent außer Kraft setzen, wo ich Dinge malen kann, was ziemlich gut funktioniert.

, aber ich nicht auf dem Haupt JComponent malen will, ich will nur auf den Behälter malen ich zu meinem Haupt JComponent hinzugefügt habe.

So in MyComponent in paintcomponent ich die folgenden Code.

protected void paintComponent( Graphics g) {
  super.paintComponent( g);

  Graphics page_g = this.getPage( "main").getGraphics();

  page_g.setColor( Color.RED);
  page_g.drawRect( 10, 10, this.getWidth() - 20, this.getHeight() - 20);
  page_g.setColor( Color.BLUE);
  page_g.drawString( "HELLO WORLD", this.getWidth() / 2, this.getHeight() / 2);
}

Die Linie this.getPage ( "main") getGraphics (). nimmt das Graphics-Objekt von einem meines Container auf die MyComponents Liste von Containern und natürlich auf die Hauptkomponente Liste hinzugefügt mit JComponents Methode hinzufügen. Der Behälter wird sichtbar geschaltet, indem die setVisible Aufruf (true); Verfahren.

Aber es passiert nichts. Der Bildschirm ist leer. Wenn ich page_g mit g ersetzen, funktioniert zwar die Malerei, weil seine Malerei auf meinem JComponent (MyComponent), aber ich auf den Behälter malen will, die ein Kinder MyComponent in diesem Fall ist.

Ich höre oft "Nie Verwendung getGraphics ()". Aber wie sonst nur auf Teilkomponenten einer Elternkomponente ziehen, wenn die Eltern paintcomponent-Methode aufgerufen wird?

War es hilfreich?

Lösung

Really the best bet is to have the classes that are actually doing the custom painting override their own paintComponent() method. Let the AWT worry about the graphics contexts.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top