だから私はループで構築したクラスを持っています。コンストラクターには、円の「グリッド」を作成する 2 つの while ループがあります。授業用のマフラーのはずですが、かっこいいのでチェーンメイルと呼んでいます。とにかく、別の (クライアント) クラスでスカーフの色を変更できるはずです。色を変更するには、明らかに mutator メソッドを追加する必要があります。幸いなことに、objectdraw には setColor() という名前のミューテーターがあります。このクラスに追加しようとすると、グリッドの最後の円のみが変更されることを除いて、問題なく動作します。なぜこれが起こるのかはわかっていますが、それを修正する方法がわかりません。クラスで使用している「典型的な」ミューテーターをコメントアウトしました。
編集:混乱してすみません...これは単なるクラスです。新しいChainMail()を呼び出してから.setColor()を実行するクライアントがありますが、すべてではなく最後のframedovalのみを変更します。それが問題だ
import objectdraw.*;
import java.awt.*;
public class ChainMail {
private FramedOval link;
public ChainMail(int rows,int links,
Location p,Color rgb,
DrawingCanvas c) {
double numRows = 0;
// create the number of rows specified
while (numRows < rows) {
double numLinks = 0;
// create the number of links specified
while (numLinks < links) {
link = new FramedOval(p,12,12,c);
link.setColor(rgb);
// update the position
p.translate(8,0);
numLinks++;
}
// move position back to front col and down one row
p.translate(-8*links,8);
numRows++;
}
}
public ChainMail(int rows,int links,Location p,DrawingCanvas c) {
this(rows,links,p,Color.BLACK,c);
}
/* this doesn't work, only changes last circle
* public void setColor(Color c) {
* link.setColor(c);
* }
*/
}