1

わかりました、なぜこれが機能しないのか本当にわかりません。

class SketcherModel extends Observable implements Iterable<Element>{

    public Iterator<Element> iterator(){
        return elements.iterator();
    }   

    public LinkedList<Element> elements = new LinkedList<Element>();
}

Elementしたがって、アプリケーションの「モデル」部分のクラスに LinkedList があります。以下のコードに示すように、アプリの「ビュー」部分がpaint()メソッドを実行すると、リンクされたリストにアクセスし、そこに含まれるそれぞれを描画するという考え方です。Element

public class SketcherView extends JComponent implements Observer{
    public SketcherView(Sketcher theApp){
        this.theApp = theApp;

        //Testing to see if I can access the linked list, 'elements', outside of the paint() method;
        Element test = theApp.getModel().elements.iterator().next() 
    }

    public void update(Observable o, Object rectangle){
        //Code to respond to changes in model...
    }

    public void paint(Graphics g){
        Graphics2D g2D = (Graphics2D)g;
        for(Element element : theApp.getModel()){
            element = (Element)elements.iterator().next();
            g2D.setPaint(element.getColor());
            g2D.draw(element.getShape());
        }    
    } 

クラスコンストラクターからリンクリストにアクセスするelementsと、問題なく見つかるようですが、コレクションベースの for ループをelements使用してイテレーターを使用して実行すると、「要素を解決できません」と表示されます。何か不足していますか?

4

1 に答える 1

2
public void paint(Graphics g){
    Graphics2D g2D = (Graphics2D)g;
    for(Element element : theApp.getModel()){
        element = (Element)elements.iterator().next();
        g2D.setPaint(element.getColor());
        g2D.draw(element.getShape());
    } 
}

elementsメソッドに変数がありません。また、ループの現在の要素は for ループで既に宣言されています。コードは

for(Element element : theApp.getModel()){
    g2D.setPaint(element.getColor());
    g2D.draw(element.getShape());
} 

paintComponent()別の未実現の問題は、ではなくをオーバーライドする必要があることですpaint()

于 2012-11-24T13:33:11.830 に答える