1

それぞれメソッドを持つ 2 つのコンポーネントを作成しようとしていますpaintComponent()- 目標は、親オブジェクトがデフォルトのアートをペイントし、子オブジェクトがそれをペイントできるようにすることです。例として、トランプの作成がありCardます。デフォルトのカードを描画する親クラスがあり、Cardその上に詳細を拡張して描画するスイート固有のクラスがあります。

これが私が達成しようとしていることの図です: ここに画像の説明を入力

ここに私が取り組んでいるコードがあります。私の特定の問題は次のとおりです。コンポーネントが描画されると、子クラスにメソッドがない場合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
    }

    //.....
}
4

1 に答える 1

0

継承の使い方が悪い。次のようなものが必要です。

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

リスト レイヤーを使用することもできます。必要なすべてのレイヤーをペイントします。

サブクラス化は、コードを小さな問題に分割するためのものです。コードを再利用するには、ポリモーフィズム + オブジェクト構成を使用する必要があります。

于 2012-07-07T17:58:06.640 に答える