Passar o conteudo do JTextField na classe de metodos

Bom dia pessoal!

acredito que esse assunto tenha no forum, mas como ainda nao ficou claro estou postando um exemplo para esclarecimento :wink:

seguinte… tenho a classe Tela onde é o visual para o cliente

[code]import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.*;
public class Tela extends JFrame {

private static final long serialVersionUID = 1L;
public JButton bok;
public JTextField nome;

public Tela(){
	Container tela = getContentPane();
	FlowLayout lay = new FlowLayout(FlowLayout.CENTER);
	tela.setLayout(lay);
	
	bok = new JButton("OK");
	TratarEventos trat = new TratarEventos();
	bok.addActionListener(trat);
	
	nome = new JTextField(10);
	tela.add(nome);
	tela.add(bok);
	
	pack();
	setLocationRelativeTo(null);
	setVisible(true);
	
}
public static void main(String args[]){
	Tela app = new Tela();
	app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}[/code]

na sequencia tenho uma classe TratarEvento onde trato os metodos.

[code]import java.awt.event.*;
import javax.swing.JOptionPane;

public class TratarEventos implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getActionCommand() == “OK”){
JOptionPane.showMessageDialog(null, “Evento reconhecido”);
//Ao invés de mostrar a mensagem acima
//AQUI quero mostrar o texto do JTextField name que foi criado na classe Tela
}
}
}[/code]

Como posso passar o conteudo da classe visual (Tela) para a classe de eventos?

tks

Eai cara blz!

Da forma que vc esta fazendo, poderia ser assim na classe Tela:

import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.*;
public class Tela extends JFrame {

	private static final long serialVersionUID = 1L;
	public JButton bok;
	public JTextField nome;
	
	public Tela(){
		Container tela = getContentPane();
		FlowLayout lay = new FlowLayout(FlowLayout.CENTER);
		tela.setLayout(lay);
		
		bok = new JButton("OK");
		TratarEventos trat = new TratarEventos(bok); // passar como parametro o JButton a testar
		
		bok.addActionListener(trat);
		
		nome = new JTextField(10);
		tela.add(nome);
		tela.add(bok);
		
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
		
	}
	public static void main(String args[]){
		Tela app = new Tela();
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
	}
}

E assim na classe TratarEventos:

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

public class TratarEventos implements ActionListener{
	private JButton btnEvento = new JButton();
	
	public TratarEventos(JButton btn){ // Criar um construtor com um argumento 
		this.btnEvento = btn;
	}
	
	public void actionPerformed(ActionEvent e){
		if(e.getSource() == btnEvento){ // modificar o teste de eventos
			JOptionPane.showMessageDialog(null, "Evento reconhecido");
			//Ao invés de mostrar a mensagem acima
			//AQUI  quero mostrar o texto do JTextField name que foi criado na classe Tela
		}
	}
	
}

Lembrando que isso é apenas uma sugestão!

qualquer duvida posta o codigo ai!

falows

O que vc quer passar, o conteudo do JTextField? é só vc instanciar a classe e chamar um metodo passando como parametro o JTextField (jTextField1.getText() - String);

Abraços

Fala ai! valeu pela dica mas o que realmente estou questionando é como ler o conteudo do JtextFiel nome.

A ideia é usar o conseito MVC e pelo que estou visualizando no meu projeto eu tenho apenas M (tratamento dos metodos) e V (classe visual), ou seja como posso implementar controle entre as duas classes?

o objetivo desse exemplo é como posso exibir o conteudo de Jtextfiel sendo que o tratamento de evento esta em outra classe.

de qq forma valeu pela foça :slight_smile:

Vc esta confundindo MVC, estude o conceito novamente, M é Model (Grossamente falando a comunicação com o banco), e nada a ver com classe métodos, essa sua classe de metodos ai ta mais parecendo um Controller.

Abraços

analyser valeu pela dica :wink:

no meu caso como ficaria esse exemplo?

vlw

Não conheço muito de JSE, sei mais JEE, mais acredito que não dará para vc reaproveitar estas actions, bem o modelo MVC JEE e MVC JSE, é um pouco diferente pelo o que sei, então, deixe as interfaces gráficas e actions na VIEW, os metodos de tratamentos que possam ser aproveitados em outras plataformas no CONTROLLER, e a parte do banco no MODEL, se alguem tiver uma outra ídeia posta ai.

Abraços

obrigado pelas sugestoes…

vou continuar na luta

tks!

galera … poderia dizer como vcs usam no dia a dia, a separacao do modulo visual(telas) com dos métodos ?

ate+

http://www.guj.com.br/posts/list/88156.java

Renato muito obrigado pelo link.

Vou tentar fazer aqui, caso nao consiga vou lhe pedir para postar meu exemplo com essa correçao :wink:

nao pedindo muito, é claro :lol: :lol: :lol:

valeu pela força

At,
Fabio

galera primeiramente obrigado pelas dicas :wink: espero sempre contar com ajuda desse forum.

depois de muita pesquisa e grande ajuda do nosso amigo hermano consegui resolver o meu problema usando MVC.

como perdi o resto dos meus cabelos :slight_smile: estou compartilhando para turma a maneira que eu fiz.

segue o exemplo.

[code]import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class CadastroView extends JFrame
{
private static final long serialVersionUID = 1L;

private Controller c;
private JTextField nome;
private JButton    bOk;

public CadastroView (Controller c)
{
	this.c = c;
	
	this.nome = new JTextField(15);
	
	this.bOk = new JButton("Adicionar");
	this.bOk.setName("cadastroView_adicionar");
	this.bOk.addActionListener(this.c);
	
	
	Container tela = getContentPane();
	FlowLayout lay = new FlowLayout(FlowLayout.CENTER);
	tela.setLayout(lay);

	tela.add(this.nome);
	tela.add(this.bOk);

	setLocationRelativeTo(null);

	pack();

	setVisible(true);
}

public String getNome(){
	return this.nome.getText();

}

}[/code]

[code]import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class Controller implements ActionListener
{
private CadastroView v;
private CadastroModel m;

public Controller()
{
	this.v = new CadastroView(this);
	this.m = new CadastroModel(this);
}

@Override
public void actionPerformed(ActionEvent e)
{	
	Object obj = e.getSource();
	
	if (obj instanceof JButton)
	{
		JButton b = (JButton) obj;
		
		if (b.getName().equals("cadastroView_adicionar"))
		{
			CadastroModelBean bean = new CadastroModelBean();
			
			bean.setNome(this.v.getNome());
			this.m.insert(bean);	
		}
	}
}

}[/code]

[code]public class CadastroModel
{
//private Controller c;

public CadastroModel(Controller c)
{
//	this.c = c;
}

public void insert(CadastroModelBean b)
{
	System.out.println(b.getNome());
}

}[/code]

[code]public class CadastroModelBean
{
private String nome;

public String getNome() {
	return this.nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

}[/code]

[code]public class App {

public static void main(String[] args) {
	Controller C = new Controller();
}

}[/code]

qq duvida fiquem avontade.

ate + galera :lol: