Re: Estrutura do Vértice
[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: Estrutura do Vértice



Olá para todos,

On Mon, 28 Apr 2003, Francisco Nogueira Calmon Sobral wrote:

> Olá
> 
> Fiz uma estrutura de um vértice, dando continuidade ao programa que constrói
> grafos ingênuos. Como esta estrutura altera bastante vários trechos de funções,
> principalmente aquelas que usam a matriz de adjacências (que eu acho que ficará
> desnecessária nessa estrutura), acho interessante botá-la em discussão antes de
> começar a fazer qualquer outra alteração.

A classe que o Francisco propões começa com:

|class Vertice {
|    
|    Point pos;
|    Vector adj = new Vector(); // Vetor de vertices
| ...

Suponho que ele deseje: 
 - pos: é (x,y), posição atual do vértice na tela                       
 - adj: vetor de vértices adjacentes (se dirigido tb funciona)

Proponho acrescentar:  
 - em Vertice: "String nome" para nomear vértices
 - nova classe, para cada aresta
   public class Aresta {
     Vertice v1; // origem da aresta
     Vertice v2; // final da aresta

E os métodos correspondentes, para eliminar aresta e vértices. Lembre-se
de guardar em Vertice.adj a referência para o vértice adjacente e o mesmo
em Aresta.v1 e Aresta.v2, possibilitando remoções corretas.

> Agora, mudando de assunto, o seguinte trecho:
> 
> Graphics g = getGraphics();
> g.translate(....);
> g.setXORMode( getBackground() );
> drawRetangulo(...);
> 
> o que ele faz???
> getBackground() pega a COR de fundo ou considera tudo o que está no fundo como
> cor de fundo (tipo Print Screen) ???

Pega a cor de fundo do "java.awt.Component" que contém esta chamada (esta
cor é definida em um "setBackground(java.awt.Color)".

> Tive esta duvida pq quando se tem na funcao addRetangulo(...) o que garante que
> todos e mais este novo retângulo serão desenhados juntos na tela??

Na verdade esta foi uma construção não elegante que fiz (e só agora
percebi...). Eu não deveria ter colocado os comandos de desenho no
"addRetangulo(...)", deveria ter deixado tudo junto à chamada dese
método (no "AreaDesenho"). O "AreaDesenho" é o responsável por todos os
desenhos na tela.

Eu poderia ter trocado o Graphics lá, por um "repaint()" após a chamada de
"addRetangulo(...)".

Mas talvez sua dúvida seja: onde é re-desenhado todas as figuras. É no
"paint" do "AreaDesenho". É lá que devem estar TODAS as chamadas para
desenhar na tela, todos os objetos gráficos. Já a "animação" para mover
vértices é conseguida com o método "moveObjetos" chamado em
"mouseMoved(MouseEvent evt)".

> Falow
> 
> -- 
> Francisco Sobral

Em anexo vai a nova versão do vértice, agora chamada
"Vertice.java" (sugiro melhorar a documentação da classe).

[]s
Leônidas
 --------------------------------------------------------------------------
 Leônidas de Oliveira Brandão  -  Computer Science Dep. of IME-USP (Brazil)
 leo@ime.usp.br - http://www.ime.usp.br/~leo - +55 (011) 3091 [6298 | 6135] 
 Interessado em Matemática?  Visite o "iMatica":   http://www.matematica.br
// [28/04/2003]
// Francisco Sobral

import java.util.Vector;
import java.awt.Point;

class Vertice {

    Point pos; // posição atual do vértice na tela (x,y)
    Vector adj = new Vector(); // vetor de vértices adjacentes (se dirigido tb funciona)  
    private int tipo;
    String nome; // nome do vértice

    Vertice( Point p, int tipo ) {

	pos = new Point( p );
	tipo = this.tipo;
    }

    Vertice( int x, int y, int tipo ) {

	pos = new Point( x, y );
	tipo = this.tipo;
    }

    int mostraTipo() {
	return tipo;
    }

    void alteraTipo( int novoTipo, Inicia inicia ) {

	tipo = novoTipo;
	inicia.repaint(); // Estah certo??
    }

}