2012-07-07 57 views
1

我试图创建两个组件,每个组件都有一个paintComponent()方法 - 目标是父对象将绘制默认艺术,然后子对象可以在其上绘制。一个例子可能是创建扑克牌:您有一个父类Card类,它绘制默认卡片,然后是特定于套件的类,它们扩展Card并在其上绘制其细节。用paintComponent()和继承绘制“图层”

这里是什么,我试图完成一个图: enter image description here

这里是我一起工作的代码。我的具体问题是:绘制组件时 - 如果子类没有paintComponent方法 - 绘制父母的艺术。但是,如果我对孩子实施paintComponent方法,则父母不会被抽出,只能是孩子。

这里是我的代码:

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 
    } 

    //..... 
} 

回答

0

这不是一个很好的使用继承。你应该有这样的:

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

你甚至可以有一个列表层;并绘制你需要的所有图层。

子分类是用于将您的代码分解成更小的问题。为了重用代码,你应该使用多态+对象组合。

+0

对不起,但那不是我想要完成的。我已经编辑了更具体的问题。 – 2012-07-07 20:58:07