Question

i ont un jrame sur lequel j'ajouter quelques objets JComponent. Chaque JComponent a une liste des conteneurs i ajouter à l'aide JComponent.add (Component).

Maintenant dans ma classe principale JComponent, appelée MyComponent, i substituer la méthode protégée paintComponent où je peux peindre les choses, ce qui fonctionne très bien.

Mais je ne veux pas peindre sur la principale JComponent, je veux seulement peindre sur les conteneurs que j'ai ajoutés à mon principal JComponent.

Donc MyComponent dans paintComponent je fais ce qui suit.

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);
}

L'this.getPage de ligne ( "main") des getGraphics (). prend l'objet graphique d'un de mes conteneurs ajoutés à la liste des MyComponents des conteneurs et bien sûr à la liste principale composante en utilisant JComponents ajouter la méthode. Le récipient est réglée sur visible en appelant la setVisible (true); méthode.

Mais rien ne se passe. L'écran est vide. Quand je remplace page_g avec g, puis les travaux de peinture, parce que sa peinture sur mon JComponent (MyComponent), mais je veux peindre sur le récipient qui est un enfant de MyComponent dans ce cas.

J'ai souvent entendu "Ne jamais utiliser getGraphics ()". Mais comment pouvez seulement tirer sur les sous composantes d'un composant parent lorsque les parents méthode paintComponent est appelée?

Était-ce utile?

La solution

Vraiment le meilleur pari est d'avoir les classes qui sont en train de faire le remplacement de la peinture sur mesure leur propre méthode paintComponent (). Laissez le souci AWT sur les contextes graphiques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top