Reconhecer objetos de uma stack / Utilização Iterator

0 respostas
L
public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.setColor(Color.GRAY);
        g.fillRect(0, 8, 250, 34);
        
        for(int i = 0; i<stack.size(); i++)
        {
            stack.elementAt(i).desenhar(g);
            if(stack.elementAt(i).colorir)
                stack.elementAt(i).colorir(g, stack.elementAt(i).getX(), stack.elementAt(i).getY());      
        }
        repaint();
    }
    
    class Listener implements ActionListener
    {
        public JButton b;
        private Mouse mouse;
        
        public Listener(JButton b)
        {
            this.b = b;
        }        

        public void actionPerformed(ActionEvent e) 
        {
            addMouseListener(mouse = new Mouse());
            mediator.setDisable(buttons, b);
            Poligono.desenhar = true;
            
            if(b == desfazer)
            {
                mediator.setEnable(buttons);
                stack.remove(stack.lastElement());
                    /*stack.iterator().next();
                    
                    if(stack.iterator().next() == stack.lastElement())
                        stack.iterator().remove();*/
                
            }
            
            if(b == desfazerCirculo)
            {
                mediator.setEnable(buttons);
            }    
        }
        
        class Mouse implements MouseListener
        {
            
            public void mouseClicked(MouseEvent e) {
                if(b == quadrado && Quadrado.desenhar)
                {
                    stack.push(new Quadrado(e.getX(), e.getY(), 50, 50));
                    Poligono.desenhar = false;
                    mediator.setEnable(buttons);
                    removeMouseListener(mouse);
                }
                else if(b == circulo && Circulo.desenhar)
                {
                    stack.push(new Circulo(e.getX(), e.getY(), 50, 50));
                    Poligono.desenhar = false;
                    mediator.setEnable(buttons);
                    removeMouseListener(mouse);
                }
                else if(b == pintar)
                {
                    for(int i = 0; i<stack.size(); i++)
                    {
                        if(e.getX()>= stack.elementAt(i).getX() && e.getY()>=stack.elementAt(i).getY() && e.getX()<=(stack.elementAt(i).getX()+stack.elementAt(i).getWidth()) && e.getY()<=(stack.elementAt(i).getY()+stack.elementAt(i).getHeight()))
                        {
                            stack.elementAt(i).colorir = true;
                        }
                    }
                    mediator.setEnable(buttons);
                    removeMouseListener(mouse);
                }  
            }

Esse código é parte dum trabalho que tenho que entregar. Estou com alguns problemas: deveria ser feita uma pilha de figuras, o que eu fiz (chamei a classe de Polígono). Nesse mini-paint devem existir métodos de desfazer a última figura, desfazer o último quadrado e desfazer o último círculo. O problema está na implementação desses 2 segundos métodos, pois eu não tenho idéia de como ler da pilha se o Poligono é um círculo ou quadrado. Além disso gostaria de ter uma orientação para percorrer e remover elementos da pilha usando Iterator, visto que é um dos requisitos do trabalho.

Obrigado

Criado 13 de setembro de 2008
Respostas 0
Participantes 1