Graphics2D ajudem-me

7 respostas
Alkamavo

BOa Noite
Tnho uma duvida o meu metodo abaixo desenha três elipses de cor preta e adiciona num array de elipse ate aqui ele funciona bem.

public void desenhaElipses(Graphics2D g) {
ArrayList<Ellipse2D> elipses;

		g.setStroke(new BasicStroke(4.0f));
		g.setColor(Color.RED);
		Ellipse2D aux;

		for (int i = 0; i < 3; i++) {

			aux = new Ellipse2D.Double(300, (100 + 20 * i + 10), 10, 10);
			g.draw(aux);
                       elipses.add(aux);


			

		}

	}

.meu problema é na hora de implementar outro metodo que recebe o array e uma dada posiçao e tem de pintar a elipse que esta nesta posição.
algo do tipo

public void pintaElipse(Graphics2D g,  int pos,  ArrayList<Ellipse2D> elipses ) {


		g.setStroke(new BasicStroke(4.0f));
		g.setColor(Color.BLUE);
                 g.draw(elipses.get(pos));
	
			

		}

:cry:

7 Respostas

ViniGodoy

Use o método fill, no lugar do draw.

P

Como é um array, no final do método de pintar, use o método repaint();

pode ser isso…

ViniGodoy

Jamais deve-se usar o método repaint durante os métodos de pintura.
Se fizer isso, você vai cair num loop, já que o repaint() chamará o método de pintura, e vice-versa.

P

Então, como ficaria se eu tenho uma classe chamada DesenhaElemento que extende Jpanel e onde eu sobrepus o método paintComponent();

public void paintComponent(Graphics gs) {
        super.paintComponent(gs);

        desenha(gs);
  
        repaint();
         
    }


public void desenha(Graphics g) {
        Elemento elemento;

        for (int i = 0; i <
                lista.size(); i++) {


            elemento = lista.get(i);

            elemento.desenhaElemento(g);

            if (elemento.isSelecionado()) {
                elemento.desenhaRetangulo(g);
                setUltimoSelecionado(elemento);
            }

        }
    }

Como eu faria isso sem o Repaint? Pois eu testo sem o repaint e não funciona..

ViniGodoy

Você deve dar repaint quando adicionar algum elemento a essa lista. Para garantir, você ainda pode chamar o invalidate() antes do repaint().

Repaint é um método que serve para informar ao Swing de que alguma coisa mudou no componente, e ele deve ser atualizado. A forma que essa atualização é feita é através do paintComponent. Um repaint no interior de um paintComponent vai fazer seu programa ser constantemente repintado, o que é um desperdício enorme de performance.

Para testar isso, coloque um:

No seu método de pintura atual e veja como ele é constantemente chamado.

P

Muito obrigado pela dica Vini, peguei o projeto pelo meio e essa classe já estava implementada.

Alkamavo
Eu resolvi a minha questao assim : desenha elipse
public void desenhaelipse(Graphics2D g) {

		g.setStroke(new BasicStroke(4.0f));
		g.setColor(Color.BLACK);
		Ellipse2D aux;

		for (int i = 0; i < 3; i++) {

			aux = new Ellipse2D.Double(300, (100 + 20 * i + 10), 10, 10);
			g.draw(aux);
			elipses.add(aux);

		}

	}

e para repintar

public void PreencheEllipse2D(Graphics2D g, int position) {

		g.setStroke(new BasicStroke(4.0f));
		g.setColor(Color.RED);
		g.fill(getEllipse2D(position));

	}

}

maldito o prof pk mandou fazer estas elipsinhas..pk disse que n podiamos usar JradioButton pk é uma avaliaçao do Java2D e nao da SWING!!! :twisted:
Felizmente safei.me e fiz na boa..mas tem cara sofrendo com isso!!!

Criado 25 de novembro de 2008
Ultima resposta 27 de nov. de 2008
Respostas 7
Participantes 3