Applet Problema com JButton e MouseListener [Resolvido]

Blz, galera?
Estou fazendo um applet, que implementa mouseListenner
Tenho um botão que quando clicado faz um “post” em uma URL, porém, quando clico pela segunda vez no botão ele executa o metodo adicionar() 2 vezes, e duplica o registro, na terceira vez ele triplica, e assim vai…
Aqui uns trechos de códigos para vcs entenderem melhor…

[code]//imports necessarios
public class principal extends JApplet implements MouseListener{
public JButton bt_add = new JButton;

public void init{
.
.
.
}

private void adicionar(){
try{

		url = new URL("http://localhost/"+"MM_WebService/coloca/alpha/1");
		URLConnection connection2 =  url.openConnection();
		connection2.setConnectTimeout(10); //isso não é necessario(eu acho...)

		editor.setPage(url); // aqui ele "posta" a url, esse editor é um editorpane(que não aparece ao usuário)
		

	}catch (Exception e){
			System.out.println("erro");
	}

}
private void carregaAdicionar() {
con_tela = new Container(); //esqueci de dizer que tem um container

	bt_add.setText("Adicionar Elemento");
	bt_add.addMouseListener(this); // aqui o mouselistener no botao
	bt_add.setBounds(10, 40, 150, 20);
	
	con_tela.add(bt_add);
	con_tela.add(combo);
	this.setSize(303, 350);
	
}

@Override
public void mouseClicked(MouseEvent e) {
String src = e.getSource().toString(); //aqui é só um controle banal…
if(src.contains(“Adicionar Elemento”)){ //…pra saber se o botão é o adicionar mesmo
adicionar(); //executa o adicionar ali de cima
limpa(); // o limpa só zera o container(con_tela)…
abreStatus(); // … para depois mostrar o abreStatus, que é só um método que “puxa” o que acabou de inserir…
}
}[/code]

Poxa, é um bocado de código, espero que não tenha cortado algo importante fora…
Eu até tentei fazer com actionListener, mas deu o mesmo problema… executou 2 vezes no segundo clique, e 3 vezes no terceiro…
Qualquer ajuda é bem vinda =D

Quem chama o método carregaAdicionar?

Oh , me desculpe pela demora…
O applet tem um JMenu:

this.setMenuBar(barra) //onde barra é um JMenuBar

Logo, quando vc vai em menu>> adicionar, tem um action listener que chama o abreAdicionar, que por sua vez abre o carregaAdicionar…
Esqueci completamente disso…me desculpe…

Aqui o código inteiro da parte do menu =D, sendo que o init faz uma chamada ao metodo menu…

[code]public void menu() {

	this.setSize(300, 350);
	
	barra = new JMenuBar();
	menu = new JMenu("Opções");
	menu.setMnemonic(KeyEvent.VK_O);
	
	item = new JMenuItem("Status");
	item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
	item.addActionListener(this);
	menu.add(item);
	
	item = new JMenuItem("Adicionar");
	item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK));
	item.addActionListener(this);
	menu.add(item);

	barra.add(menu);
	
	this.setJMenuBar(barra);
	con_tela = new Container();
	this.add(con_tela);
	this.setLayout(null);
	this.setVisible(true);

}

@Override
public void actionPerformed(ActionEvent e) {

	if (e.getSource() instanceof JMenuItem){
	String source = ((JMenuItem)e.getSource()).getText();
	if (source.equals("Status")){
		limpa();
		limpatxts();
		abreStatus();
	}
	if (source.equals("Adicionar")){
		limpa();
		abreAdcionar();
	}}
}[/code]

O problema está justamente em adicionar o listener várias vezes. Verifique se sua lógica não está fazendo isso.

Como assim adicionando varias vezes?
Não posso fazer isso?:

item1.addActionListener(this); item2.addActionListener(this); item3.addActionListener(this);
E depois fazer uma verificação dentro do public void actionPerformed(ActionEvent e)?

[code]public void actionPerformed(ActionEvent e) {

	if (e.getSource() instanceof JMenuItem){
	String source = ((JMenuItem)e.getSource()).getText();
	if (source.equals("Status")){
		limpa();
		limpatxts();
		abreStatus();
	}
	if (source.equals("Adicionar")){
		limpa();
		abreAdcionar();
	}}
}[/code]

Bom, mas o caso é que eu queria implementar o botão pelo mouseClick, só que acontece aquilo de duplicar , triplicar…
E só o botão “adicionar” usa o mouseClick…

Opa, acho que entendi…
Eu estou trabalhando com applet, logo quando quero “mudar a janela” eu “deleto tudo” e reconstruo a janela desejada, com isso acabo repetindo aqueles addActionListener
Como posso fazer para melhorar isso?

Olhei algumas implementações que achei na net, resolvi fazer isso:

[code]bt_add.setText(“Adicionar Elemento”);
bt_add.addActionListener(new ActionListener(){

		@Override
		public void actionPerformed(ActionEvent e) {
			if (e.getWhen() != anterior){ //anterior é uma variavel definida antes do init, direto na class, é do tipo long, inicial = zero.
				anterior = e.getWhen(); //getWhen mostra um timestamp(datetime convertido para ms)
				adicionar();
				limpa();
				abreStatus();
			}				
		}});[/code]

eu coloquei um sysout(e.getWhen()) e percebi enquanto rodava o applet que ele entrava num tipo de loop e mostrava sempre o mesmo horario, então adicionei essa verificação,…

Acho que isso é um insulto a ti Godoy, pois sou muito inesperiente, meu conceito de OO é super basico… daqui a pouco estarei programando estruturadamente e sem métodos…hehe
Desculpe-me pela demora a responder o tópico… fiquei focado em outro “bug”

Finalmente me toquei que o programa chamado o mesmo addActionListener várias vezes,… logo eu separei o addActionListener, que estava junto a criação de outros botões e labels, e coloquei no init, assim o addActionListener é criado só uma vez…

public void init(){ botao.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { String x = ((String) combo.getSelectedItem()).toLowerCase(); adicionar(x); //adiciona no meu BD o que o cara selecionou limpa(); // exclui qualquer container que haja na tela, para poder criar outro no lugar, pois isso é um applet abreStatus(); // cria a tela com labels e txtfields, era onde estava a chamada ao addActionListener } }); menu() // cria um menu }

Espero que isso seja útil a alguém…
Me desculpe pela incoveniencia…