Passar o conteudo do JTextField na classe de metodos

11 respostas
debug

Bom dia pessoal!

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

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

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);
	
	}

na sequencia tenho uma classe TratarEvento onde trato os metodos.

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
	}
	}
}

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

tks

11 Respostas

FilhoDoRei

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

analyser

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

debug

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:

analyser

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

debug

analyser valeu pela dica :wink:

no meu caso como ficaria esse exemplo?

vlw

analyser

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

debug

obrigado pelas sugestoes…

vou continuar na luta

tks!

debug

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

ate+

renatocustodio

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

debug

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

debug

galera primeiramente obrigado pelas dicas ;) 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 :) estou compartilhando para turma a maneira que eu fiz.

segue o exemplo.

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();
	
	}
}
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);	
			}
		}
	}

}
public class CadastroModel 
{
	//private Controller c;
	
	public CadastroModel(Controller c)
	{
	//	this.c = c;
	}
	
	public void insert(CadastroModelBean b)
	{
		System.out.println(b.getNome());
	}
}
public class CadastroModelBean 
{
	private String nome;

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

	public void setNome(String nome) {
		this.nome = nome;
	}
}
public class App {
	
	public static void main(String[] args) {
		Controller C = new Controller();
	}
}

qq duvida fiquem avontade.

ate + galera :lol:

Criado 28 de maio de 2008
Ultima resposta 6 de jun. de 2008
Respostas 11
Participantes 4