Problema ActionListener [ Novo problema ]

4 respostas
A

ae pessoal eu tenho 2 classes

public class addUserActionListener implements ActionListener {

	private JFrame frame = null;

	public addUserActionListener(JFrame frame) {
		this.frame = frame;
	}

	public void actionPerformed(ActionEvent e) {

		ContatoJFrame pContato = new ContatoJFrame();
		Usuario usuario = new Usuario(DAOagenda.getIDUser(),
				pContato.nomeJTextField.getText(), pContato.telefoneJTextField
						.getText(), pContato.emailJTextField.getText());
		DAOagenda.addUser(usuario);
		
		
		JOptionPane.showMessageDialog(frame,
				"Cadastro efetuado com sucesso!");

	}

}
public class ContatoJFrame extends JFrame {

	public JTextField nomeJTextField = null;

	public JTextField telefoneJTextField = null;

	public JTextField emailJTextField = null;

	private JButton jButton = null;


	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setText("Salvar");
			jButton.addActionListener(new addUserActionListener(this));

		}
		return jButton;
	}
private JTextField getJTextField() {
		if (nomeJTextField == null) {
			nomeJTextField = new JTextField(15);
		}
		return nomeJTextField;
	}

	private JTextField getJTextField1() {
		if (telefoneJTextField == null) {
			telefoneJTextField = new JTextField(15);
		}
		return telefoneJTextField;
	}

	private JTextField getJTextField2() {
		if (emailJTextField == null) {
			emailJTextField = new JTextField(15);
		}
		return emailJTextField;
	}

a segunda classe eu soh passei a criação dos textFields , entao meu problema!!!

a 2ª classe esta funcionado tudu certo a parte visual ! como devem ter percebido existe um botao na 2ª classe quando eu clico nesse botao ele teria q fazer a ação da outra classe!!! issso por enquanto esta acontecendo! Tanto que a menssagem ele mostra a unico problema eh q ele nao traiz nd no TextFields... eles ficaum em branco!! pq esse problema?!?!?!

flwww

4 Respostas

_Renatu

Então, pelo que eu entendi você não está conseguindo pegar os dados dos JTextField, certo?

Bom, no seu código, para seu Listener, você envia no construtor o JFrame que você está utilizando, porém dentro do actionPerformed, você cria outro!!

Desta forma ele não vai pegar os dados dos campos mesmo…

uma solução é você substituir a linha:

ContatoJFrame pContato = new ContatoJFrame();

por:

ContatoJFrame pContato = (ContatoJFrame)frame;

Assim você vai estar pegando os dados do frame q foram passados no construtor, e não um novo que você criou…

Qualquer dúvida, volte a postar…

ViniGodoy

Ou então, já que esse é um ActionListener que só funciona para o ContatoJFrame, mude o código para

public class addUserActionListener implements ActionListener {
   private ContatoJFrame frame = null;
 
   public addUserActionListener(ContatoJFrame frame) {
      if (frame == null)
        throw new IllegalArgumentException("O frame não pode ser nulo!");
      this.frame = frame;
   }
 
   public void actionPerformed(ActionEvent e) {
      Usuario usuario = new Usuario(DAOagenda.getIDUser(),
      frame.nomeJTextField.getText(), frame.telefoneJTextField.getText(), 
         frame.emailJTextField.getText());
      DAOagenda.addUser(usuario);
 		
      JOptionPane.showMessageDialog(frame, "Cadastro efetuado com sucesso!");
   }
}

Isso não só evita o cast como também o uso incorreto do ActionListener por outras classes. Além do código ficar um pouco mais claro.

PS: Talvez fosse bom você colocar uma verificação no construtor, como fiz ali, para caso alguém passe frame nulo por engano. Outra coisa, não seria melhor trocar o nome da classe addUserActionListener (que mais parece um nome de método) por UserActionListener?

A

Valeuuu mesmooo mano!!! ces saum fera…!!! os 2 funcionaraum!!!

A

ae pessoal pra eu naum criar outro topico eu vou fazer otra pergunta aqui nesse topico mesmo!

eu tenho 3 classes:

public class SairActionListener implements ActionListener {

	private JFrame frameThis = null;

	public SairActionListener(JFrame frameThis) {
		this.frameThis = frameThis;
	}

	public void actionPerformed(ActionEvent e) {

		frameThis.dispose();
	}

}
public class MenuActionListener implements ActionListener {
	private JFrame frame = null;

	public MenuActionListener(JFrame frame) {
		this.frame = frame;
	}

	public void actionPerformed(ActionEvent e) {

		ContatoJFrame contatoFrame = new ContatoJFrame();
		contatoFrame.setVisible(true);
		frame.setEnabled(false);

	}

}
private JMenuItem getNRegistro() {
		if (nRegistro == null) {
			nRegistro = new JMenuItem();
			nRegistro.setText("Registro");
			nRegistro.addActionListener(new MenuActionListener(this));
		}
		return nRegistro;
	}

ai na classe ContatoJFrame eu tenho o botão

private JButton getJButton1() {
		if (jButton1 == null) {
			jButton1 = new JButton();
			jButton1.setText("Cancelar");
			jButton1.addActionListener(new SairActionListener(this));
		}
		return jButton1;
	}

o problema eh!!! quando eu clico no menu ele abre a classe ContatoJFrame e muda no Enable da PrincipalJFrame.... porem quando ele clica no botaum da classe ContatoJFrame ele tem q mudar o enable da PrincipalJFrame.. naum consigo fazer issu!! como eu posso fazer?!?!

Criado 11 de janeiro de 2007
Ultima resposta 11 de jan. de 2007
Respostas 4
Participantes 3