Desenhando Retas em um JLabel com Imagem

2 respostas
D

Olá Pessoal, estou com o seguinte problema, tenho um JLabel que que é renderizado com uma imagem (seIcon()), e então devo desenhar umas retas sobre ele … mas não da, será q estou fazendo algo errado?

Icon mapImg = new ImageIcon(imgFolder.concat("map.gif")); jLabelImg.setIcon(mapImg); ... Graphics g = jLabelImg.getGraphics(); g.drawLine(coorX, coorY, x,y); jLabelImg.printAll(g);
já tentei com print e paint, na verdade a reta pisca no label, como se no repaint a imgem estivesse por cima … é isso?

2 Respostas

levimendes

olá, blz?
primeiramente crie um ponto.gif em “paint” da vida depois rode este código.

import java.awt.Color;

import java.awt.Cursor;

import java.awt.Graphics;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;
import javax.swing.Icon;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JLabel;

public class TracaReta extends JFrame implements MouseListener {

JLabel lblTeste;
Icon imgPonto = new ImageIcon(getClass().getResource("ponto.gif"));
JLabel lblPonto[] = new JLabel[2];
int x[] = new int[2];
int y[] = new int[2];
int cont;

public TracaReta() {
	super("Traçando reta no java");
	
	montaTela();
}

public void montaTela()
{
	montaLblTeste();
	montaJanela();
}

public void montaLblTeste()
{
	lblTeste = new JLabel();
	lblTeste.setBackground(Color.white);
	lblTeste.setOpaque(true);
	lblTeste.setBounds(300, 20, 200, 200);
	lblTeste.addMouseListener(this);
	add(lblTeste);
}

public void montaJanela()
{
	getContentPane().setBackground(Color.cyan);
	setLayout(null);
	setSize(800, 800);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setLocationRelativeTo(null);
	setVisible(true);
}

public void mouseClicked(MouseEvent e) {
	x[cont] = lblTeste.getMousePosition().x;
	y[cont] = lblTeste.getMousePosition().y;
	
	lblPonto[cont] = new JLabel(imgPonto);
	lblTeste.add(lblPonto[cont]);
	lblPonto[cont].setBounds(x[cont], y[cont], 5, 5);
	
	cont++;
	
	if (cont == 2){
		Graphics g = lblTeste.getGraphics();
		g.setColor(Color.red);
		g.drawLine(x[0], y[0], x[1], y[1]);
		
		lblTeste.removeMouseListener(this);
		cont = 0;
		mouseFora();
	}
}
public void mouseEntered(MouseEvent e) {
	mouseDentro();
}
public void mouseExited(MouseEvent e) {
	mouseFora();
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}

public void mouseDentro()
{
	setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
}

public void mouseFora()
{
	setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
public static void main(String[] args) {
	new TracaReta();
}

}

R

Para desenhar retas sobre um JLabel, uma saída é criar uma classe derivada de JLabel e redefinir o método paintComponent():

http://java.sun.com/docs/books/tutorial/uiswing/painting/step2.html

Boa sorte!

Criado 13 de maio de 2004
Ultima resposta 18 de ago. de 2009
Respostas 2
Participantes 3