traçar retas no JLabel

Olá pessoal, tudo bem com vocês?
Estou desenvolvendo um sistema desktop e estou apanhando feio para fazer uma tarefa (que deve ser para alguns uma tarefa simples).
A tarefa é a seguinte eu preciso traçar retas, estou utilizando o método drawLine() e estou conseguindo traçar a reta, o problema é o seguinte, quando eu traço a(s) reta(s) e minimizo a aplicação (quando necessário) a(s) reta(s) simplesmente desaparecem.
Sou novo no fórum e na linguagem Java, se alguém puder me dar esse help eu agradeço.
Até mais.

O java não guarda o estado da pintura.

Faça o seguinte. Crie um filho de JLabel, que será usa Label com retas.

Depois, sobrescreva o método paintComponent, e nesse método, faça a parte do desenho das retas.

O Java chamará o paintComponent sempre que a Label tiver que ser repintada.

Um link que ilustra a sugestão do ViniGodoy:

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

E aí ViniGodoy, blz?
Desde aquele dia que vc me passou a idéia de criar um filho do JLabel eu tenho tentado poré sem sucesso.
Vc sabe me dizer aonde eu estou errando (dá uma olhada no meu código).
Até mais.

import javax.swing.*;

import java.awt.event.;
import java.awt.
;

class DesenhaReta extends JLabel
{
public void paintComponents(Graphics g)
{
Teste1 t = new Teste1();

	t.lblTeste.paintComponents(g);

	g.setColor(Color.red);
	g.drawLine(t.x[0], t.y[0], t.x[1], t.y[1]);	
	g.drawString("não estou conseguindo traçar a reta", 20, 200);
}

}

class Teste1 extends JFrame implements MouseListener
{
JLabel lblTeste, lblEscolha;
JLabel lblPonto[] = new JLabel[2];
JButton btnReativa, btnCarregaImagem;
int x[] = new int[2];
int y[] = new int[2];
int cont;
Icon imgPonto = new ImageIcon(getClass().getResource(“ponto.gif”));
JLabel lblponto[] = new JLabel[2];

public Teste1()
{
	super("Isto é apenas um teste");
	
	montaTela();
}

 public void montaTela()
 {
 	montaLblEscolha();
 	montaLblTeste();
 	montaBotaoReativa();
 	montaJanela();
 }	
 	
 public void montaLblTeste()
 {
 	lblTeste = new JLabel();     	
 	lblTeste.setBounds( 120, 20, 250, 250 );
 	lblTeste.setBackground( Color.white );
 	lblTeste.setOpaque( true );
 	lblTeste.addMouseListener( this );
 	add( lblTeste );
 }
 
 public void montaLblEscolha()
 {
 	lblEscolha = new JLabel("Selecione dois pontos na área branca.");
 	lblEscolha.setBounds(130, 7, 230, 10);
 	add(lblEscolha);
 }
 
 public void montaBotaoReativa()
 {
 	btnReativa = new JButton("Reativa Mouse");
 	btnReativa.setBounds(150, 300, 120, 25);
 	btnReativa.addActionListener(new ActionListener()
 	{
 		public void actionPerformed(ActionEvent evt)
 		{
 			reativaMouse();
 		}
 	});
 	add(btnReativa);
 }
 
 
 public void reativaMouse()
 {
 	lblTeste.addMouseListener(this);
 }
 
 public void montaJanela()
 {
 	getContentPane().setBackground( Color.cyan );
 	setLayout( null );
 	setSize( 800, 400 );
 }
 
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], 3, 3);
	
	cont++;
	
	if ( cont == 2 ) {
		lblTeste.add(new DesenhaReta());
		
		cont = 0;
		lblTeste.removeMouseListener(this);
		mouseFora();
	}
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){
	mouseDentro();
}
public void mouseExited(MouseEvent e){
	mouseFora();
}

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

public void mouseFora()
{
	setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

}

public class Programa {
public static void main(String[] args)
{
Teste1 teste = new Teste1();

	teste.setLocationRelativeTo( null );
	teste.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
 	teste.setVisible( true );
}	

}