Desabiliatar repaint

2 respostas
C

Cumprimentos a todos.O negocio eh o seguinte: estou desenvolvendo uma trab para facu de teoria dos grafos(Coloraçao).Neste programa desenho o grafo colorido em um JPanel usando tres algoritmos, sendo uma grafo de coloraçao diferente para cada algoritmo, e adiciono ele em um JInternalFrame. Ateh ai tudo bem.Porem, quando executo um dos algoritmos e depois o outro quanto retorno ao primeiro o painel perde a pintura e o grafo do respectivo algoritmo eh perdido com isso tenho de gerar ele novamente.Entao pessoal o q quero eh que quando retorno ao primeiro executado ou o anterior o grafo nao seja perdido e que os paineis soh pinte quando algum algoritmo for executado.As vezes acontence de os paineis perderem a pintura com um cliq do mouse, um maximizar/minimizar de janela ou outra acao na aplicaçao.
Meu metodo paint q esta na class PanelGrafico eh o seguinte:

public void paint(Graphics g)
     {
        super.paint(g);
        if(cont)
            cont= false;
        if(!cont)
        {
            for(int k=0;k< vertice.size();k++)
            {
                 Color c = (Color)vetCor.elementAt(k);
                 Bolinha bolinha = (Bolinha)vertice.get(k);
                 Color aux=null;
                 if(c ==Color.black)
                    aux = Color.black;    
                 if(c==Color.blue)
                   aux = Color.blue;
                 if(c==Color.green)
                   aux = Color.green;  
                 if(c==Color.pink)
                    aux = Color.pink;  
                 if(c==Color.red)
                   aux =Color.red;  
                 if(c ==Color.yellow)
                   aux = Color.yellow;
                 bolinha.setNome(""+k);
                 bolinha.setCor(aux);
                 this.add(bolinha);
                 //panel.add(bolinha);
                
            }
            repaint();
            Point ptX,ptY;
            int iCont = 0;
            int iCont2=0;
            for(int k=0;k < vetElemento.size();k++)
            {
                Bolinha bolinha = (Bolinha)vertice.get(k);
                ptX = bolinha.getLocation();
                for(int j=0;j < vetElemento.size();j++)
                {
                    if(k&lt;j && matriz[k][j]==1 )
                    {
                     
                       Bolinha bolinha2 = (Bolinha)vertice.get(j);
                       ptY = bolinha2.getLocation();
           
                      g.setColor(Color.blue);
                      g.drawLine((int)ptX.getX() + 28, 
                                  (int)ptX.getY() + 35,
                                  (int)ptY.getX() + 28, 
                                  (int)ptY.getY() + 35);
                               
                    }   
                }
            }
        }
     }
    public void mouseDragged(MouseEvent e) 
    {
        Component  com = e.getComponent(); //pega a bolinha clicada
        int x = com.getX() + e.getX(); 
        int y = com.getY() + e.getY();
        com.setLocation(x, y);
        cont=true;
        com.repaint();// pinta a bolinha
        com.getParent().repaint();//pinta o panelgrafico
        com.getParent().getParent().repaint();//pinta o internalframe
    }

a class PanelGrafico implementa MouseMotionListener e class Bolinha tb eh um JPanel onde desenho a bolinha do vertice do grafo.
Concluindo fica assim: adiciono a Bolinha no PanelGrafico e o PanelGrafico no JInterFrame.
Desde jah agradeço e q a luz da razao esteja com vcs

Carlos Martins.>

2 Respostas

plentz

Só melhorando um pouquinho o seu código e a lógica dele.

public void paint(Graphics g) {
		super.paint(g);
		if (cont) {
			cont = false;
		} else {
			for (int k = 0; k < vertice.size(); k++) {
				Color c = (Color) vetCor.elementAt(k);
				Bolinha bolinha = (Bolinha) vertice.get(k);
				Color aux = null;
				if (c == Color.black) {
					aux = Color.black;
				} else if (c == Color.blue) {
					aux = Color.blue;
				} else if (c == Color.green) {
					aux = Color.green;
				} else if (c == Color.pink) {
					aux = Color.pink;
				} else if (c == Color.red) {
					aux = Color.red;
				} else if (c == Color.yellow) {
					aux = Color.yellow;
				}
				bolinha.setNome("" + k);
				bolinha.setCor(aux);
				this.add(bolinha);
				// panel.add(bolinha);

			}
			repaint();
			Point ptX, ptY;
			int iCont = 0;
			int iCont2 = 0;
			for (int k = 0; k < vetElemento.size(); k++) {
				Bolinha bolinha = (Bolinha) vertice.get(k);
				ptX = bolinha.getLocation();
				for (int j = 0; j < vetElemento.size(); j++) {
					if (k < j && matriz[k][j] == 1) {

						Bolinha bolinha2 = (Bolinha) vertice.get(j);
						ptY = bolinha2.getLocation();

						g.setColor(Color.blue);
						g.drawLine((int) ptX.getX() + 28,
								(int) ptX.getY() + 35, (int) ptY.getX() + 28,
								(int) ptY.getY() + 35);

					}
				}
			}
		}
	}

	public void mouseDragged(MouseEvent e) {
		Component com = e.getComponent(); // pega a bolinha clicada
		int x = com.getX() + e.getX();
		int y = com.getY() + e.getY();
		com.setLocation(x, y);
		cont = true;
		com.repaint();// pinta a bolinha
		com.getParent().repaint();// pinta o panelgrafico
		com.getParent().getParent().repaint();// pinta o internalframe
	}
C

diego_sl

este codigo foi os teste que fui fazendo para ver se conseguir arrumar o problemas.Mas ele funciona soh q acontece o q descrevi: ele chama o metodo repaint quando nao eh para chamar. Serah q tem alguma coisa com o paint da super classe?
No primeiro for crio os vertice (Objetos bolinhas) e add no JPanel no segundo desenho as retas nas bolinha de acordo com a matriz de adjacencia.(1 se existe aresta 0 caso contrario).
Depois cada bolinha tem um mouseDragged para poder move- la dentro do painel.Mas valeu pela ajuda

Carlos Martins

Criado 8 de julho de 2005
Ultima resposta 8 de jul. de 2005
Respostas 2
Participantes 2