[Resolvido]Formulário - Adicionando evento aos botões

10 respostas
ezbueno

Boa noite galera!

É o seguinte, estou fazendo um formulário, criei alguns campos e quatro botões(alterar, buscar, excluir, incluir) e uma label Status, onde ao clicar em um dos botões, deverá ser enviada para a label uma mensagem dizendo qual foi o botão pressionado. Alguém poderia me ajudar?
Abaixo o código:

import javax.swing.*;
import java.awt.event.*;

public class Formulario implements ActionListener, KeyListener{ 
		
	public void criarTela(){
				
		JFrame f = new JFrame();
		f.setSize(380,300);
		f.setLocation(320,200);
		f.setTitle("Formulário");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel pl = new JPanel();
		pl.setLayout(null);
		
		//IdAluno
		JLabel lblIdAluno = new JLabel("IdAluno: ");
		lblIdAluno.setBounds(10,10,60,20);
		pl.add(lblIdAluno);
		JTextField txtIdAluno = new JTextField("");
		txtIdAluno.setBounds(100,10,60,20);
		pl.add(txtIdAluno);
		
		//Endereço
		JLabel lblEnd = new JLabel("Endereço: ");
		lblEnd.setBounds(10,40,90,20);
		pl.add(lblEnd);
		JTextField txtEnd = new JTextField("");
		txtEnd.setBounds(100,40,170,20);
		pl.add(txtEnd);
		
		//Cep
		JLabel lblCep = new JLabel("Cep: ");
		lblCep.setBounds(10,70,200,20);
		pl.add(lblCep);
		JTextField txtCep = new JTextField("");
		txtCep.setBounds(100,70,170,20);
		pl.add(txtCep);
		
		//Cidade
		JLabel lblCidade = new JLabel("Cidade: ");
		lblCidade.setBounds(10,100,60,20);
		pl.add(lblCidade);
		JTextField txtCidade = new JTextField("");
		txtCidade.setBounds(100,100,170,20);
		pl.add(txtCidade);
		
		//Estado
		JLabel lblEstado = new JLabel("Estado: ");
		lblEstado.setBounds(10,130,60,20);
		pl.add(lblEstado);
		JTextField txtEstado = new JTextField("");
		txtEstado.setBounds(100,130,170,20);
		pl.add(txtEstado);
		
		//País

		JLabel lblPais = new JLabel("País: ");
		lblPais.setBounds(10,160,60,20);
		pl.add(lblPais);
		JTextField txtPais = new JTextField("");
		txtPais.setBounds(100,160,170,20);
		pl.add(txtPais);
		
		
		//Alterar
		JButton cmdAlterar = new JButton("Alterar");
		cmdAlterar.setBounds(10,200,80,20);
		pl.add(cmdAlterar);
		
		//Buscar
		JButton cmdBuscar = new JButton("Buscar");
		cmdBuscar = new JButton("Buscar");
		cmdBuscar.setBounds(100,200,80,20);
		pl.add(cmdBuscar);
		
		//Excluir
		JButton cmdExcluir = new JButton("Excluir");
		cmdExcluir.setBounds(190,200,80,20);
		pl.add(cmdExcluir);
		
		//Incluir
		JButton cmdIncluir = new JButton("Incluir");
		cmdIncluir.setBounds(280,200,80,20);
		pl.add(cmdIncluir);
		
		//Status
		JLabel lblStatus = new JLabel("Status: ");
		lblStatus.setBounds(10,240,100,20);
		pl.add(lblStatus);
		f.add(pl);
		f.setVisible(true);
		
		//Adicionando Menus
		JMenuBar mnuBarra = new JMenuBar();
		JMenu mnuEditar = new JMenu();
		JMenuItem mnuAlterar = new JMenuItem();
		JMenuItem mnuBuscar = new JMenuItem();
		JMenuItem mnuExcluir = new JMenuItem();
		JMenuItem mnuIncluir = new JMenuItem();
		
		//Adicionando manipuladores de Eventos
		cmdAlterar.addActionListener(this);
		cmdBuscar.addActionListener(this);
		cmdExcluir.addActionListener(this);
		cmdIncluir.addActionListener(this);
		
		//Adicionando os objetos ao painel
		pl.add(lblIdAluno);
		pl.add(txtIdAluno);
		pl.add(lblEnd);
		pl.add(txtEnd);
		pl.add(lblCep);
		pl.add(txtCep);
		pl.add(lblCidade);
		pl.add(txtCidade);
		pl.add(lblEstado);
		pl.add(txtEstado);
		pl.add(lblPais);
		pl.add(txtPais);
		pl.add(cmdAlterar);
		pl.add(cmdBuscar);
		pl.add(cmdExcluir);
		pl.add(cmdIncluir);
		pl.add(lblStatus);
		
		//Menus
		mnuEditar.add(mnuAlterar);
		mnuEditar.add(mnuBuscar);
		mnuEditar.add(mnuExcluir);
		mnuEditar.add(mnuIncluir);
		mnuEditar.add(new JSeparator());
		mnuAlterar.addActionListener(this);
		mnuBuscar.addActionListener(this);
		mnuExcluir.addActionListener(this);
		mnuIncluir.addActionListener(this);
		f.setJMenuBar(mnuBarra);
		//Adicionando o painel ao formulário
		f.getContentPane().add(pl);
		f.setVisible(true);		
	}

		
		public void actionPerformed(ActionEvent e){
			Object o = e.getSource();
		
			if ((o == cmdAlterar) || (o == mnuAlterar)){
				alterar();
			}
			if ((o == cmdBuscar) || (o == mnuBuscar)){
				buscar();
			}
			if ((o == cmdExcluir) || (o == mnuExcluir)){
				excluir();
			}
			if ((o == cmdIncluir) || (o == mnuIncluir)){
				incluir();	
				}
		}
			void alterar(){
				lblStatus.setText("Alterar");
			}
			void buscar(){
				lblStatus.setText("Buscar");
			}
			void excluir(){
				lblStatus.setText("Excluir");
			}
			void incluir(){
				lblStatus.setText("Incluir");
			}
			public void KeyTyped(KeyEvent e){
				char tecla = e.getKeyChar();
				lblStatus.setText("Tecla: " + tecla);
			}
			public void KeyReleased(KeyEvent e){
	}

}

Desde já,
Obrigado.

10 Respostas

ViniGodoy

E qual é a dúvida?

Outra coisa, procure postar tópicos sobre interface gráfica no fórum “Interface Gráfica”.

ezbueno

A dúvida é que os botões não estão funcionando, quando clico neles, não acontece nada. O correto seria, quando clicar em um dos botões, enviar e mostrar na label “Status”, qual foi o botão pressionado.
E foi uma falha minha não ter postado no Fórum Interface Gráfica, sorry!

ViniGodoy

Você deve fazer o addActionListener para o botão, igual já faz para os menus.

cmdAlterar.addActionListener(this);  
   cmdBuscar.addActionListener(this);  
   cmdExcluir.addActionListener(this);  
   cmdIncluir.addActionListener(this);
ezbueno

Isso eu já fiz, no código que postei, tem uma parte do código que foi até comentada, referindo-se a isso. Mesmo feito desta maneira, os botões não estão funcionando. Tem mais alguma coisa que pode ser feito?

ViniGodoy

Estranho. Tentou rodar com um depurador?

ezbueno

Sim, rodei com o depurador e não da nenhum tipo de erro.

ViniGodoy

E ele entra no método? O problema é só nos botões, ou nos menus também ocorre?

ViniGodoy

Ok. Testei seu código do post inicial aqui e ele sequer compila. Como você está fazendo para testa-lo?

Eis o código corrigido.

Só precisei declarar as variáveis fora dos métodos:
import javax.swing.*;
import java.awt.event.*;

public class Formulario implements ActionListener, KeyListener {
	private JMenuItem mnuAlterar = new JMenuItem();
	private JMenuItem mnuBuscar = new JMenuItem();
	private JMenuItem mnuExcluir = new JMenuItem();
	private JMenuItem mnuIncluir = new JMenuItem();

	private JButton cmdAlterar = new JButton("Alterar");
	private JButton cmdBuscar = new JButton("Buscar");
	private JButton cmdExcluir = new JButton("Excluir");
	private JButton cmdIncluir = new JButton("Incluir");

	private JLabel lblStatus = new JLabel("Status: ");

	public void criarTela() {
		JFrame f = new JFrame();
		f.setSize(380, 300);
		f.setLocationRelativeTo(null);
		f.setTitle("Formulário");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel pl = new JPanel();
		pl.setLayout(null);

		// IdAluno
		JLabel lblIdAluno = new JLabel("IdAluno: ");
		lblIdAluno.setBounds(10, 10, 60, 20);
		pl.add(lblIdAluno);
		JTextField txtIdAluno = new JTextField("");
		txtIdAluno.setBounds(100, 10, 60, 20);
		pl.add(txtIdAluno);

		// Endereço
		JLabel lblEnd = new JLabel("Endereço: ");
		lblEnd.setBounds(10, 40, 90, 20);
		pl.add(lblEnd);
		JTextField txtEnd = new JTextField("");
		txtEnd.setBounds(100, 40, 170, 20);
		pl.add(txtEnd);

		// Cep
		JLabel lblCep = new JLabel("Cep: ");
		lblCep.setBounds(10, 70, 200, 20);
		pl.add(lblCep);
		JTextField txtCep = new JTextField("");
		txtCep.setBounds(100, 70, 170, 20);
		pl.add(txtCep);

		// Cidade
		JLabel lblCidade = new JLabel("Cidade: ");
		lblCidade.setBounds(10, 100, 60, 20);
		pl.add(lblCidade);
		JTextField txtCidade = new JTextField("");
		txtCidade.setBounds(100, 100, 170, 20);
		pl.add(txtCidade);

		// Estado
		JLabel lblEstado = new JLabel("Estado: ");
		lblEstado.setBounds(10, 130, 60, 20);
		pl.add(lblEstado);
		JTextField txtEstado = new JTextField("");
		txtEstado.setBounds(100, 130, 170, 20);
		pl.add(txtEstado);

		// País

		JLabel lblPais = new JLabel("País: ");
		lblPais.setBounds(10, 160, 60, 20);
		pl.add(lblPais);
		JTextField txtPais = new JTextField("");
		txtPais.setBounds(100, 160, 170, 20);
		pl.add(txtPais);

		// Alterar
		cmdAlterar.setBounds(10, 200, 80, 20);
		pl.add(cmdAlterar);

		// Buscar
		cmdBuscar.setBounds(100, 200, 80, 20);
		pl.add(cmdBuscar);

		// Excluir
		cmdExcluir.setBounds(190, 200, 80, 20);
		pl.add(cmdExcluir);

		// Incluir
		cmdIncluir.setBounds(280, 200, 80, 20);
		pl.add(cmdIncluir);

		// Status
		lblStatus.setBounds(10, 240, 100, 20);
		pl.add(lblStatus);
		f.add(pl);
		f.setVisible(true);

		// Adicionando Menus
		JMenuBar mnuBarra = new JMenuBar();
		JMenu mnuEditar = new JMenu();

		// Adicionando manipuladores de Eventos
		cmdAlterar.addActionListener(this);
		cmdBuscar.addActionListener(this);
		cmdExcluir.addActionListener(this);
		cmdIncluir.addActionListener(this);

		// Adicionando os objetos ao painel
		pl.add(lblIdAluno);
		pl.add(txtIdAluno);
		pl.add(lblEnd);
		pl.add(txtEnd);
		pl.add(lblCep);
		pl.add(txtCep);
		pl.add(lblCidade);
		pl.add(txtCidade);
		pl.add(lblEstado);
		pl.add(txtEstado);
		pl.add(lblPais);
		pl.add(txtPais);
		pl.add(cmdAlterar);
		pl.add(cmdBuscar);
		pl.add(cmdExcluir);
		pl.add(cmdIncluir);
		pl.add(lblStatus);

		// Menus
		mnuEditar.add(mnuAlterar);
		mnuEditar.add(mnuBuscar);
		mnuEditar.add(mnuExcluir);
		mnuEditar.add(mnuIncluir);
		mnuEditar.add(new JSeparator());
		mnuAlterar.addActionListener(this);
		mnuBuscar.addActionListener(this);
		mnuExcluir.addActionListener(this);
		mnuIncluir.addActionListener(this);
		f.setJMenuBar(mnuBarra);
		// Adicionando o painel ao formulário
		f.getContentPane().add(pl);
		f.setVisible(true);
	}

	public void actionPerformed(ActionEvent e) {
		Object o = e.getSource();

		if ((o == cmdAlterar) || (o == mnuAlterar)) {
			alterar();
		}
		else if ((o == cmdBuscar) || (o == mnuBuscar)) {
			buscar();
		}
		else if ((o == cmdExcluir) || (o == mnuExcluir)) {
			excluir();
		}
		else if ((o == cmdIncluir) || (o == mnuIncluir)) {
			incluir();
		}
	}

	void alterar() {
		lblStatus.setText("Alterar");
	}

	void buscar() {
		lblStatus.setText("Buscar");
	}

	void excluir() {
		lblStatus.setText("Excluir");
	}

	void incluir() {
		lblStatus.setText("Incluir");
	}

	public void KeyTyped(KeyEvent e) {
		char tecla = e.getKeyChar();
		lblStatus.setText("Tecla: " + tecla);
	}

	public void KeyReleased(KeyEvent e) {
	}

	@Override
	public void keyPressed(KeyEvent arg0) {
	}

	@Override
	public void keyReleased(KeyEvent arg0) {
	}

	@Override
	public void keyTyped(KeyEvent arg0) {
	}

	public static void main(String[] args) {
		new Formulario().criarTela();
	}
}
Para executar usei:
new Formulario().criarTela();

Esse código tem uma série de más práticas. Daqui a pouco vou postar uma versão melhorada dele.

ViniGodoy

Esse código aqui já está mais adequado as boas práticas do Swing. Falou apenas se livrar do null layout. Usar setBounds não permite redimensionamento do formulário e não funciona bem em ambiente multiplataforma. Procure se informar sobre o BorderLayout, GridBagLayout e FlowLayout para substituir o null.

Algumas dicas:
1. Normalmente nossa classe de formulário é filha de JFrame.
2. Evite implementar listeners diretamente, pois isso expõe seus métodos públicos.
3. Também dê um nome mais significativo. Se esse é um formulário de alunos, indique isso no nome.
4. Agrupe a construção de objetos em métodos de acesso. Use esses métodos para acessar os objetos;
5. Use Listeners diferentes para objetos diferentes. Deixa o código mais claro e evita aquele monte de testes que você fazia no if.
6. Não tenha preguiça de dar o nome correto aos objetos. Não tem porque abreviar "txtEnd". Como o formulário é de alunos, não tem porque sufixar as coisas com a palavra "Aluno" (txtIdAluno pode ser somente txtId).
7. JAMAIS chame setVisible no construtor;
8. Use métodos para agrupar comandos, e não comentários.

Quanto estava refatorando seu código, também percebi que você deu "add" duas vezes nos componentes.
Foi um problema causado pela má organização.

import javax.swing.*;

import java.awt.BorderLayout;
import java.awt.event.*;

@SuppressWarnings("serial")
public class FrmAluno extends JFrame {
	private JPanel pnlCentro;
	private JLabel lblId;
	private JLabel lblEndereco;
	private JLabel lblCep;
	private JLabel lblCidade;
	private JLabel lblEstado;
	private JLabel lblPais;

	private JTextField txtId;
	private JTextField txtEndereco;
	private JTextField txtCep;
	private JTextField txtCidade;
	private JTextField txtEstado;
	private JTextField txtPais;

	private JButton cmdAlterar;
	private JButton cmdBuscar;
	private JButton cmdExcluir;
	private JButton cmdIncluir;

	JMenuBar mbBarra;
	JMenu mnuEditar;

	private JMenuItem mnuAlterar;
	private JMenuItem mnuBuscar;
	private JMenuItem mnuExcluir;
	private JMenuItem mnuIncluir;

	private JLabel lblStatus;

	// O método onde construímos o formulário geralmente é o construtor.
	public FrmAluno() {
		super("Formulário");

		setSize(380, 300);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// Adicionando Menus
		setJMenuBar(getMbBarra());

		// Adicionando o painel ao formulário
		add(getPnlCentro(), BorderLayout.CENTER);
	}

	private void alterar() {
		getLblStatus().setText("Alterar");
	}

	private void buscar() {
		getLblStatus().setText("Buscar");
	}

	private void excluir() {
		getLblStatus().setText("Excluir");
	}

	private void incluir() {
		getLblStatus().setText("Incluir");
	}

	public static void main(String[] args) {
		new FrmAluno().setVisible(true);
	}

	// Barra de menu
	private JMenuBar getMbBarra() {
		if (mbBarra == null) {
			mbBarra = new JMenuBar();
			mbBarra.add(getMnuEditar());
		}
		return mbBarra;
	}

	private JMenu getMnuEditar() {
		if (mnuEditar == null) {
			mnuEditar = new JMenu("Editar");
			mnuEditar.add(getMnuBuscar());
			mnuEditar.add(new JSeparator());
			mnuEditar.add(getMnuAlterar());
			mnuEditar.add(getMnuExcluir());
			mnuEditar.add(getMnuIncluir());
		}
		return mnuEditar;
	}

	private JMenuItem getMnuAlterar() {
		if (mnuAlterar == null) {
			mnuAlterar = new JMenuItem("Alterar");
			mnuAlterar.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent arg0) {
					alterar();
				}
			});
		}
		return mnuAlterar;
	}

	private JMenuItem getMnuBuscar() {
		if (mnuBuscar == null) {
			mnuBuscar = new JMenuItem("Buscar");
			mnuBuscar.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent arg0) {
					buscar();
				}
			});
		}
		return mnuBuscar;
	}

	private JMenuItem getMnuExcluir() {
		if (mnuExcluir == null) {
			mnuExcluir = new JMenuItem("Excluir");
			mnuExcluir.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent arg0) {
					excluir();
				}
			});
		}
		return mnuExcluir;
	}

	private JMenuItem getMnuIncluir() {
		if (mnuIncluir == null) {
			mnuIncluir = new JMenuItem("Incluir");
			mnuIncluir.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent arg0) {
					incluir();
				}
			});
		}
		return mnuIncluir;
	}

	private JPanel getPnlCentro() {
		if (pnlCentro == null) {
			pnlCentro = new JPanel();
			pnlCentro.setLayout(null);

			// IdAluno
			pnlCentro.add(getLblId());
			pnlCentro.add(getTxtId());

			// Endereço
			pnlCentro.add(getLblEndereco());
			pnlCentro.add(getTxtEndereco());

			// Cep
			pnlCentro.add(getLblCep());
			pnlCentro.add(getTxtCep());

			// Cidade
			pnlCentro.add(getLblCidade());
			pnlCentro.add(getTxtCidade());

			// Estado
			pnlCentro.add(getLblEstado());
			pnlCentro.add(getTxtEstado());

			// País
			pnlCentro.add(getLblPais());
			pnlCentro.add(getTxtPais());

			// Botões
			pnlCentro.add(getCmdAlterar());
			pnlCentro.add(getCmdBuscar());
			pnlCentro.add(getCmdExcluir());
			pnlCentro.add(getCmdIncluir());

			// Status
			pnlCentro.add(getLblStatus());

		}
		return pnlCentro;
	}

	// Labels
	private JLabel getLblCidade() {
		if (lblCidade == null) {
			lblCidade = new JLabel("Cidade: ");
			lblCidade.setBounds(10, 100, 60, 20);
		}
		return lblCidade;
	}

	private JLabel getLblEstado() {
		if (lblEstado == null) {
			lblEstado = new JLabel("Estado: ");
			lblEstado.setBounds(10, 130, 60, 20);
		}
		return lblEstado;
	}

	private JLabel getLblCep() {
		if (lblCep == null) {
			lblCep = new JLabel("Cep: ");
			lblCep.setBounds(10, 70, 200, 20);
		}
		return lblCep;
	}

	private JLabel getLblEndereco() {
		if (lblEndereco == null) {
			lblEndereco = new JLabel("Endereço: ");
			lblEndereco.setBounds(10, 40, 90, 20);
		}
		return lblEndereco;
	}

	private JLabel getLblId() {
		if (lblId == null) {
			lblId = new JLabel("IdAluno: ");
			lblId.setBounds(10, 10, 60, 20);
		}
		return lblId;
	}

	private JLabel getLblPais() {
		if (lblPais == null) {
			lblPais = new JLabel("País: ");
			lblPais.setBounds(10, 160, 60, 20);
		}
		return lblPais;
	}

	// Caixas de texto
	private JTextField getTxtPais() {
		if (txtPais == null) {
			txtPais = new JTextField("");
			txtPais.setBounds(100, 160, 170, 20);
		}
		return txtPais;
	}

	private JTextField getTxtEstado() {
		if (txtEstado == null) {
			txtEstado = new JTextField("");
			txtEstado.setBounds(100, 130, 170, 20);
		}

		return txtEstado;
	}

	private JTextField getTxtCidade() {
		if (txtCidade == null) {
			txtCidade = new JTextField("");
			txtCidade.setBounds(100, 100, 170, 20);
		}
		return txtCidade;
	}

	private JTextField getTxtCep() {
		if (txtCep == null) {
			txtCep = new JTextField("");
			txtCep.setBounds(100, 70, 170, 20);
		}
		return txtCep;
	}

	private JTextField getTxtEndereco() {
		if (txtEndereco == null) {
			txtEndereco = new JTextField("");
			txtEndereco.setBounds(100, 40, 170, 20);
		}
		return txtEndereco;
	}

	private JTextField getTxtId() {
		if (txtId == null) {
			txtId = new JTextField("");
			txtId.setBounds(100, 10, 60, 20);
		}
		return txtId;
	}

	// Labels
	private JLabel getLblStatus() {
		if (lblStatus == null) {
			lblStatus = new JLabel("Status: ");
			lblStatus.setBounds(10, 220, 100, 20);
		}
		return lblStatus;

	}

	// Botões
	private JButton getCmdIncluir() {
		if (cmdIncluir == null) {
			cmdIncluir = new JButton("Incluir");
			cmdIncluir.setBounds(280, 200, 80, 20);
			cmdIncluir.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent arg0) {
					incluir();
				}
			});
		}
		return cmdIncluir;
	}

	private JButton getCmdExcluir() {
		if (cmdExcluir == null) {
			cmdExcluir = new JButton("Excluir");
			cmdExcluir.setBounds(190, 200, 80, 20);
			cmdExcluir.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent arg0) {
					excluir();
				}
			});
		}
		return cmdExcluir;
	}

	private JButton getCmdBuscar() {
		if (cmdBuscar == null) {
			cmdBuscar = new JButton("Buscar");
			cmdBuscar.setBounds(100, 200, 80, 20);
			cmdBuscar.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent arg0) {
					buscar();
				}
			});
		}
		return cmdBuscar;
	}

	private JButton getCmdAlterar() {
		if (cmdAlterar == null) {
			cmdAlterar = new JButton("Alterar");
			cmdAlterar.setBounds(10, 200, 80, 20);
			cmdAlterar.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent arg) {
					alterar();
				}
			});
		}
		return cmdAlterar;
	}
}

O código pode ficar um pouco mais longo, mas é infinitamente mais fácil de manter. Para ajustar um campo, basta ir até seu método "get" e altera-lo. Mesmo que um outro programador mexa na janela, é pouco provável que ele vá espalhar código, pois essa organização induz ele a manter as coisas separadas.

Também note que o método construtor ficou extremamente simples, pois só faz "add" nos dois componentes principais.

ezbueno

Boa noite!
A classe que eu utilizei para compilar é esta:

public class IniciarTela {

	public static void main(String[] args) {
			Formulario f = new Formulario();
			f.criarTela();
			}
	}

O segundo código é bem mais adequado, estarei me informando sobre o BorderLayout, GridBagLayout e FlowLayout e me atentar em organizar melhor o código . Ambos funcionaram perfeitamente.

Obrigado pela ajuda.

Criado 5 de junho de 2011
Ultima resposta 6 de jun. de 2011
Respostas 10
Participantes 2