-1

プロジェクトで問題が発生しています。

したがって、基本的に私が持っているのは、いくつかのサブクラス( ShapeRectangle、ShapeTriangle など)を持つクラス Shape です。各サブクラスで、outputShape メソッドを取得しました: g.fillRect(getX(), getY(), getWidth(), getHeight());

別のクラス showShapes で、サブクラスを含む配列を取得しました。

配列を介してメソッドを実行したいと思います。

それを行う方法はありますか?

編集: showShapes の配列は Shape[] 配列です。

これが ShapeRect のコードです (申し訳ありませんが、ビットはフランス語です): import java.awt.Color; java.awt.Graphics をインポートします。

public class FormeRectangulaire extends Forme {
  public FormeRectangulaire(int x, int y, int width, int height){
    setX(x);
    setY(y);
    setWidth(width);
    setHeight(height);
    setColor(Color.RED);
  }

  public void afficherForme(Graphics g){
    g.setColor(getColor());
    g.fillRect(getX(), getY(), getWidth(), getHeight());
  }
}

形状は次のとおりです。java.awt.Graphics をインポートします。

public class Forme {

private int x;
private int y;
private int width;
private int height;
private Color color;

/*public void afficherForme(Graphics g){
    afficherForme(g);
}*/

public int getX() {
    return x;
}
public void setX(int x) {
    this.x = x;
}

public int getY() {
    return y;
}
public void setY(int y) {
    this.y = y;
}

public Color getColor(){
    return color;
}

public void setColor(Color color){
    this.color = color;
}

public int getWidth() {
    return width;
}
public void setWidth(int width) {
    this.width = width;
}

public int getHeight() {
    return height;
}
public void setHeight(int height) {
    this.height = height;
}

}

各クラスを配列内に配置する方法は次のとおりです。

    public void creerArrayFormes(){
    String[][] donnes = getDatas();

    if(donnes[getDatasElement()][0].equals("CARRE") || donnes[getDatasElement()][0].equals("RECTANGLE")){
        FormeRectangulaire rect = new FormeRectangulaire(Integer.parseInt(donnes[getDatasElement()][1]),Integer.parseInt(donnes[getDatasElement()][2]),Integer.parseInt(donnes[getDatasElement()][3]),Integer.parseInt(donnes[getDatasElement()][4]));

        setFormes(rect, getDatasElement());
    }

}
4

2 に答える 2

1

配列オブジェクトまたはSuperClassListを作成する必要があります:

List<Form> shapes = new ArrayList<Form>();
//List<Form> shapes = new ArrayList<>(); in JDK 7
shapes.add(new ShapeRectangle());
shapes.add(new ShapeTriangle());
//....

オブジェクトを取得するループを作成します。

  for(int i = 0; i<shapes.size();i++){
      Object obj = shapes.get(i);
      if(objinstanceof ShapeRectangle){
         ((ShapeRectangle)obj).fillRect(....);
      }
      else if(list.get(i)
    }
于 2013-05-22T14:52:21.420 に答える
1

outputShape を Shape クラスに追加することを強くお勧めします。Shape が自然に抽象的である場合 (実際に新しい Shape() を作成することは想定されていない)、それは抽象的である可能性があります。

これを行うと、Shape[] を反復処理して、要素の outputShape を呼び出すことができます。これにより、要素の実際のクラスの outputShape のバージョンが呼び出されます。

for(Shape s: shapes) {
  s.outputShape();
}
于 2013-05-22T15:10:06.770 に答える