java - 另一个类中的链表可以通过一种方法访问,但不能从另一种方法访问

标签 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。这个想法是,当应用程序的“view”部分执行 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 时> 使用迭代器它说“元素无法解析”。我错过了什么吗?

最佳答案

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()

关于java - 另一个类中的链表可以通过一种方法访问,但不能从另一种方法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541659/

相关文章:

JavaFX编程ActionHandler

javascript - IE9 在 iframe 中加载脚本时抛出异常。为什么?

java - 如何在 ListIterator(反向)迭代期间正确添加对象?

c# - 使用 Linq 迭代元组列表中的列

c++ - 迭代 Boost fusion::vector

java - 通常为不同的项目创建一个父POM吗?

Java:初始化一个新的 LinkedList 集合

javascript - 如何在 Backbone.js 中编写可重用的模型和 View

java - Android 应用 NPE : Unable to invoke virtual method setOnClickListener on null object

java - 调度程序 View 模式和 MVC