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.
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.;
import java.awt.;
import java.awt.event.;
import java.util.;
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();
}
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
[quote=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