Paint(Graphics g)

7 respostas
C

Saudacoes a todos…

Sou iniciante em java e graças ao auxilio deste forum tenho conseguido evoluir no desenvolvimento de uma aplicacao basica.

O problema é que cheguei em um ponto onde nao consigo descobrir a solucao para o problema. Aí vai:

Um JFrame é carregado, dentro dele é colocado um JPanel com um JLabel que contem uma figura. Utilizando o metodo paint(Graphics g) eu fiz com que um circulo fosse desenhado sobre a figura a cada duplo clique do mouse. Minha intencao é ligar dois pontos com uma linha reta. Tentei utilizar o drawLine(x1,y1,x2,y2) mas encontrei uma dificuldade. Seguindo um exemplo de um livro, criei um metodo para tratar os cliques do mouse e depois de tratados, chamo o metodo repaint(). Segundo a API, o metodo possui dois construtores, onde o primeiro redesenha a tela inteira e o segundo redesenha somente uma parte, fornecendo a coordenada x, y e largura e altura. Da maneira que eu implementei, nao possuo a largura e altura que precisarei. Pensei em implementar uma rotina que cuide disso, mas encontrei outro problema. E quando as linhas se cruzarem? a segunda vai apagar a area da primeira? Segundo meus testes, sim.
Resumindo…nao sei se utilizei a abordagem correta para resolver meu problema, por isso solicito a ajuda e orientacao do pessoal do forum.

Desde ja meu muito obrigado…

Forte abraço.

7 Respostas

O

de uma olhada neste tutorial para voce enteder melhor como a AWT renderiza os graficos em tela…

http://java.sun.com/docs/books/tutorial/information/download.html#OLDui

[]'s

C

Muito obrigado Oziel…

Vou dar uma olhada.

Forte Abraço.

C
Execute este codigo e clique no painel da janela para ver como funciona.As vezes te ajude.Neste caso usei um painel nao sei se com label ira proceder da mesma forma e se realmente isso q deseja,  mas de toda modo tah ai!!!

import javax.swing.<em>;

import java.awt.</em>;

import java.awt.event.<em>;

import java.util.</em>;

class PanelQuad extends JPanel implements MouseListener

{

private Vector vetPonto;

private int tam; //vai receber o numero de circulos q quer

public PanelQuad()

{

setBackground(Color.white);

addMouseListener(this);

vetPonto = new Vector();

tam=5; // 5 apenas para vc testar

}

public void mouseClicked(MouseEvent e)

{

vetPonto.add(e.getPoint());

repaint();

}

public void mouseEntered(MouseEvent e)

{

}

public  void mouseExited(MouseEvent e)

{

}

public void mousePressed(MouseEvent e)

{

}

public void mouseReleased(MouseEvent e)

{

}

public void paint(Graphics g)

{

super.paint(g);

if(vetPonto.size()>0)

{
tam--;
        if(tam > 0)
        {
           for (int i = 0; i < vetPonto.size(); i++)
           {
              Point ptX  = (Point)vetPonto.get(i);
              g.setColor(Color.black);
              g.fillOval((int)ptX.getX(),(int)ptX.getY(), 15,15);
              g.setColor(Color.white);
              g.drawString(""+ i,(int)ptX.getX() + (15/2 - 5), 
                     (int)ptX.getY() + (15/2 + 5));
            }
        }
        else
        {
            for(int i=0;i<vetPonto.size();i++)
            {
                Point ptX = (Point)vetPonto.get(i);
                for(int j=0;j<vetPonto.size();j++)
                {
                   
                   Point ptY = (Point)vetPonto.get(j);
                   g.setColor(Color.blue);
                   g.drawLine((int)ptX.getX() + (15/2), 
                              (int)ptX.getY() + (15/2),
                              (int)ptY.getX() + (15/2), 
                              (int)ptY.getY() + (15/2));
                }
            }
            for (int i = 0; i < vetPonto.size(); i++)
            {
                Point ptX  = (Point)vetPonto.get(i);
                g.setColor(Color.black);
                g.fillOval((int)ptX.getX(),(int)ptX.getY(), 15,15);
                g.setColor(Color.white);
                g.drawString(""+ i,(int)ptX.getX() + (15/2 - 5), 
                     (int)ptX.getY() + (15/2 + 5));
            }
        }
    }
}
}

public class Teste extends JFrame

{

private PanelQuad panel;

public Teste()

{

super(Evento teste);

setSize(400,300);

setLocation(100,100);

setBackground(Color.white);

getContentPane().add(new PanelQuad(),BorderLayout.CENTER);

show();

}

public static void main()

{

new Teste();

}

}

C

Quando vc for postar codigo, tenha do dos nossos pobres olhinhos e coloque-o entre as tags [ code] e [ /code], assim ele nao vira uma macarronada pos-modernista :wink:

C

C

Carlos Martins:
cv soh nao entende isso quem nao quer.E esse coisa de ficar tirando os outros eh natural de sua pessoa ou eh imprensao minha.Nao eh a primaira vez q vejo postagem suas tirando a galera.Cara vc tem agir mais e falar menos

Um abraço

cv, agindo mais e falando menos.

C

cv acho q vc esta no lugar errado deveria estar em um circo

Criado 22 de abril de 2003
Ultima resposta 3 de abr. de 2005
Respostas 7
Participantes 4