另一个类中的链表可从一个方法访问,但不能从另一个方法访问

时间:2012-11-24 13:28:17

标签: java model-view-controller iterator linked-list paint

好的,我真的不明白为什么这不起作用。

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时,它说'元素无法解决'。我错过了什么吗?

1 个答案:

答案 0 :(得分: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()