2012-07-07 5 views
1

Je tente de créer deux composants qui ont chacun une méthode paintComponent() - Le but étant que l'objet parent va peindre art par défaut, et l'objet enfant peut alors peindre dessus . Un exemple pourrait être de créer des cartes à jouer: vous avez une classe parente Card qui peint une carte par défaut, puis des classes spécifiques à la suite qui étendent Card et peignent leurs détails par-dessus.Peinture en "couches" avec paintComponent() et l'héritage

Voici un diagramme de ce que je suis en train d'accomplir: enter image description here

Voici le code, je travaille avec. Mon problème spécifique est: lorsque le composant est dessiné - si la classe enfant n'a pas de méthode paintComponent - l'art des parents est dessiné. Cependant, si j'implémente une méthode paintComponent sur l'enfant, les parents ne sont pas dessinés, seulement les enfants.

Voici mon code:

import javax.swing.*; 
import java.awt.*; 
import java.awt.geom.*; 

abstract public class Tile extends JPanel { 

    public static final int DEFAULT_WIDTH = 100; 
    public static final int DEFAULT_HEIGHT = 100; 

    @Override public void paintComponent(Graphics g){ 

     //Set Size 
     setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT); 

     Graphics2D g2 = (Graphics2D)g; 

     //Draw default art 


    } 
    @Override public Dimension getMinimumSize() 
    { return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT); } 

    @Override public Dimension getPreferredSize() 
    { return getMinimumSize(); } 

    //..... 

} 

import javax.swing.*; 
import java.awt.*; 

public class CharacterTile extends Tile { 

    protected char symbol; 

    public CharacterTile(char symbol){ 
     this.symbol = symbol; 
    } 
    @Override public void paintComponent(Graphics g){ 
     super.paintComponents(g); 
     Graphics2D g2 = (Graphics2D)g; 
     //Draw details 
    } 

    //..... 
} 

Répondre

0

Ce n'est pas un bon usage de l'héritage. Vous devriez avoir quelque chose comme:

Card 
{ 
    Art front; 
    Art back; 
    paintComponent() 
    { 
     back.paintComponent(); 
     front.paintComponent(); 
    } 
} 

Vous pourriez même avoir une liste de couches; et peignez toutes les couches dont vous avez besoin. Le sous-classement permet de diviser votre code en plus petits problèmes. Pour réutiliser le code, vous devez utiliser le polymorphisme + la composition de l'objet.

+0

Je suis désolé, mais ce n'est pas ce que j'essaie d'accomplir. J'ai modifié la question pour être plus précis. –