[Resolvido]Comandar o botão de uma classe atraves de outra

5 respostas
D

Pessoal,eu estou desenvolvendo uma aplicação extremamente simples com os conceitos de MVC(view model controller) para a faculdade mas estou com muita dificuldade
a principio eu apenas quero que meu botão “sair” feche a aplicação,porem o ActionListener nao pode estar na classe da Interface e sim numa classe de controle
eu sei que preciso utilizar os comandos observer e observable mas nao consigo entender como isso funciona,alguem ai pode me ajudar ?

essa é a interface

package view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//implements ActionListener

public class Interface extends JFrame implements Observer {
	
	
	
	//criação das labels

	private JPanel Painel = new JPanel();
	private JLabel LblNProduto = new JLabel("Nome do Produto : ");
	private JLabel LblCodigo= new JLabel("Codigo do Produto: ");
	private JLabel LblFabricante= new JLabel("Fabricante: ");
	private JLabel LblQtdEstoque = new JLabel("Quantidade em Estoque: ");
	private JLabel LblDataReposicao = new JLabel("Data da ultima reposição: ");
	private JLabel LblDescricao = new JLabel("Descrição do Produto: ");
	
	//criação das text fields
	
	private JTextField TxtNomeProduto = new JTextField();
	private JTextField TxtCodigo = new JTextField();
	private JTextField TxtFabricante= new JTextField();
	private JTextField TxtQtdEstoque = new JTextField();
	private JTextField TxtDataReposicao = new JTextField();
	private JTextArea TxtDescricao = new JTextArea();
	
	private JButton BtnAdd = new JButton("Adicionar Produto");
	private JButton BtnRenovar = new JButton("Adicionar unidade ao Estoque");
	private JButton BtnRemoverUnidade = new JButton("Remover Unidade");
	private JButton BtnRemoverProduto = new JButton("Remover Produto");
	private JButton BtnSair = new JButton("Sair");
	
	Interface(){
		
		setResizable(false);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);  //fecha programa ao fechar janela
		setTitle("Controle de Estoque");
		setSize(570,500);

		this.setContentPane(Painel);
		
		
		Painel.setSize(620, 480);
		Painel.setVisible(true);
		Painel.setLayout(null);

		// adicionando labels
		
		Painel.add(LblNProduto);
		Painel.add(LblCodigo);
		Painel.add(LblFabricante);
		Painel.add(LblQtdEstoque);
		Painel.add(LblDataReposicao);
		Painel.add(LblDescricao);
		
		Painel.add(TxtNomeProduto);
		Painel.add(TxtCodigo);
		Painel.add(TxtFabricante);
		Painel.add(TxtQtdEstoque);
		Painel.add(TxtDataReposicao);
		Painel.add(TxtDescricao);
		
		Painel.add(BtnAdd);
		Painel.add(BtnRemoverProduto);
		Painel.add(BtnRenovar);
		Painel.add(BtnRemoverUnidade);
		Painel.add(BtnSair);
		
		
		
		
		//os valores do setbound são (eixo "X") (eixo "Y") (largura) (altura)
		
		
		LblNProduto.setBounds(20, 20, 110, 30);
		LblCodigo.setBounds(335, 20, 110, 30);
		LblFabricante.setBounds(20, 60, 110, 30);
		LblQtdEstoque.setBounds(335, 60, 145, 30);
		LblDataReposicao.setBounds(20, 100, 160, 30);
		LblDescricao.setBounds(20, 140, 160, 30);
	
		
		TxtNomeProduto.setBounds(170, 25, 150, 25);
		TxtCodigo.setBounds(450, 25, 100, 25);
		TxtFabricante.setBounds(170, 60, 150, 25);
		TxtQtdEstoque.setBounds(480, 60, 68 ,25);
		TxtDataReposicao.setBounds(170, 100, 150, 25);
		TxtDescricao.setBounds(25, 180, 520, 100);  //essa é uma JTextArea
		
		BtnAdd.setBounds(25, 300, 150, 25);
		BtnRemoverProduto.setBounds(25, 340, 150, 25);
		BtnRenovar.setBounds(200, 300, 220, 25);
		BtnRemoverUnidade.setBounds(200, 340, 220, 25);
		BtnSair.setBounds(430, 300, 120, 25);
		
		
		
		
		
	}
			
	public static void main(String[] args) {
		
		new Interface();
		
		

	}
	
	

	@Override
	public void update(Observable arg0, Object arg1) {
		// TODO Auto-generated method stub
		
	}
		
	}

Essa é a classe de controle(nao sei nem por onde começar)

package Controler;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;

public class Controlador extends Observable implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent e) {
		
		
		// TODO Auto-generated method stub
		
	}

}

eu quero que essa classe controle o “btnSair” da outra classe atraves do observer
alguem ai pode me ajudar ? obrigado

5 Respostas

michetti

Você precisar entender conceitos de orientação a objetos… pois o padrão MVC se você não souber OO (Orientação a Objetos) você não consegue fazer nada…

Neste caso eu não sou nenhuma expert então não tenho certeza se você consegue fechar um jFrame de uma classe controladora…

D

Sim…durante o primeiro semestre eu peguei um pessimo professor de LPOO(linguagem de programação orientada a objetos) e tambem nao havia adiquirido muito interesse ao aprender a linguagem,agora esse semestre as coisas estao um pouco mais “avançadas” e estou fazendo o que posso,estou estudando por conta propria e tudo mais,tentando adiquirir os conceitos que preciso saber antes de programar,o que eu preciso é só de um pontapé inicial para terminar minha aplicação,é possivel controlar uma classe atraves de outra sim,atraves do “observer” e “observable” porém nao entendi direito como aplicar os comandos o que eu preciso é de uma solução para esse meu codigo simples ou encontrar algum artigo ou apostla que me ensine do basico todo o conceito de MVC aplicado em java.

michetti

Eu não disse que não é possivel controlar outra classe apartir de uma classe controlador… e sim que acho que não é possível fechar uma aplicação pois usa o System.exit(0) para fechar tudo…

D

e existe alguma forma simples de “contornar” essa situação?/

D

Bom...eu consegui resolver o que havia perguntado,me desculpem por talvez formular a pergunta de maneira errada mas de qualquer forma vou deixar minha solução aqui
para fechar o topico e tambem para ajudar alguem com a mesma duvida,vale ressaltar que essa talvez nao seja essa a forma correta mas pelo menos deu certo o/

Interface Grafica

package view;



import java.util.Observable;
import java.util.Observer;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import Controler.Controlador;

//implements ActionListener

public class Interface extends JFrame implements Observer {
	
	
	
	//criação das labels

	public JPanel Painel = new JPanel();
	public JLabel LblNProduto = new JLabel("Nome do Produto : ");
	public JLabel LblCodigo= new JLabel("Codigo do Produto: ");
	public JLabel LblFabricante= new JLabel("Fabricante: ");
	public JLabel LblQtdEstoque = new JLabel("Quantidade em Estoque: ");
	public JLabel LblDataReposicao = new JLabel("Data da ultima reposição: ");
	public JLabel LblDescricao = new JLabel("Descrição do Produto: ");
	
	//criação das text fields
	
	public JTextField TxtNomeProduto = new JTextField();
	public JTextField TxtCodigo = new JTextField();
	public JTextField TxtFabricante= new JTextField();
	public JTextField TxtQtdEstoque = new JTextField();
	public JTextField TxtDataReposicao = new JTextField();
	public JTextArea TxtDescricao = new JTextArea();
	
	public JButton BtnAdd = new JButton("Cadastrar produto");
	public JButton BtnRenovar = new JButton("Adicionar unidade ao Estoque");
	public JButton BtnRemoverUnidade = new JButton("Remover Unidade");
	public JButton BtnRemoverProduto = new JButton("Remover Produto");
	public JButton BtnAvancar = new JButton(">>");
	public JButton BtnVoltar = new JButton("<<");
	public JButton BtnSair = new JButton("Sair");
	
	Interface(){
		

		
		
		setResizable(false);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);  //fecha programa ao fechar janela
		setTitle("Controle de Estoque");
		setSize(570,500);

		this.setContentPane(Painel);
		
		
		Painel.setSize(620, 480);
		Painel.setVisible(true);
		Painel.setLayout(null);

		// adicionando labels
		
		Painel.add(LblNProduto);
		Painel.add(LblCodigo);
		Painel.add(LblFabricante);
		Painel.add(LblQtdEstoque);
		Painel.add(LblDataReposicao);
		Painel.add(LblDescricao);
		
		Painel.add(TxtNomeProduto);
		Painel.add(TxtCodigo);
		Painel.add(TxtFabricante);
		Painel.add(TxtQtdEstoque);
		Painel.add(TxtDataReposicao);
		Painel.add(TxtDescricao);
		
		
		TxtQtdEstoque.setText("01");
		TxtCodigo.setEditable(false);
				
		Controlador cont = new Controlador(this);
		cont.addObserver(this);
		
		
		//adicionando um listener para cada botao e passando ele para a classe controladora
		BtnSair.addActionListener(cont);
		BtnAdd.addActionListener(cont);	
		BtnRemoverProduto.addActionListener(cont);
		BtnRenovar.addActionListener(cont);
		BtnRemoverUnidade.addActionListener(cont);
		BtnVoltar.addActionListener(cont);
		BtnAvancar.addActionListener(cont);
		
		
		Painel.add(BtnAdd);
		Painel.add(BtnRemoverProduto);
		Painel.add(BtnRenovar);
		Painel.add(BtnRemoverUnidade);
		Painel.add(BtnAvancar);
		Painel.add(BtnVoltar);
		Painel.add(BtnSair);
				
		//os valores do setbound são (eixo "X") (eixo "Y") (largura) (altura)
				
		LblNProduto.setBounds(20, 20, 110, 30);
		LblCodigo.setBounds(335, 20, 110, 30);
		LblFabricante.setBounds(20, 60, 110, 30);
		LblQtdEstoque.setBounds(335, 60, 145, 30);
		LblDataReposicao.setBounds(20, 100, 160, 30);
		LblDescricao.setBounds(20, 140, 160, 30);
	
		
		TxtNomeProduto.setBounds(170, 25, 150, 25);
		TxtCodigo.setBounds(450, 25, 100, 25);
		TxtFabricante.setBounds(170, 60, 150, 25);
		TxtQtdEstoque.setBounds(480, 60, 68 ,25);
		TxtDataReposicao.setBounds(170, 100, 150, 25);
		TxtDescricao.setBounds(25, 180, 520, 100);  //essa é uma JTextArea
		
		BtnAdd.setBounds(25, 300, 150, 25);
		BtnRemoverProduto.setBounds(25, 340, 150, 25);
		BtnRenovar.setBounds(200, 300, 220, 25);
		BtnRemoverUnidade.setBounds(200, 340, 220, 25);
		BtnVoltar.setBounds(430, 340, 50, 25);
		BtnAvancar.setBounds(500, 340, 50, 25);
		BtnSair.setBounds(430, 300, 120, 25);	
		
		
						
	}
			
	public static void main(String[] args) {
		
		new Interface();
		

	}
	
	@Override
	public void update(Observable arg0, Object arg1) {
		// TODO Auto-generated method stub
		
	}
		
	}

Classe que controla a interface

package Controler;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;

import javax.swing.JOptionPane;



import Model.DAO.AtenderSolicitacao;

import view.Interface;

public class Controlador extends Observable implements ActionListener {
	
	Interface   Int;
	
	
	//construtor da controladora que ao ser chamada na interface "pega" as funcionalidades da janela e "passa" para ca
	public Controlador(Interface I){
		Int = I;
		
	}
	
	
	
	
	public void VerDadosNaInterface(){
		String vetor[] = new String[6];
		
		AtenderSolicitacao Atd = new AtenderSolicitacao();
		vetor = Atd.FazerConsulta(1);
		Int.TxtCodigo.setText(vetor[0]);
		Int.TxtNomeProduto.setText(vetor[1]);
		Int.TxtFabricante.setText(vetor[2]);
		Int.TxtQtdEstoque.setText(vetor[3]);
		Int.TxtDataReposicao.setText(vetor[4]);
		Int.TxtDescricao.setText(vetor[5]);
		
	}
	
	public void actionPerformed(ActionEvent EventoBotao) {
		
		if (EventoBotao.getSource().equals(Int.BtnAdd)){

			AtenderSolicitacao Atd = new AtenderSolicitacao();
			if(Atd.AdicionarDados(Int.TxtNomeProduto.getText(), Int.TxtFabricante.getText(),Integer.parseInt(Int.TxtQtdEstoque.getText()), 
					Int.TxtDataReposicao.getText(),Int.TxtDescricao.getText()))
				JOptionPane.showMessageDialog(null, "Dados Inseridos com Sucesso");
			
		}
		
		else if (EventoBotao.getSource().equals(Int.BtnRemoverProduto)){
			System.out.println("btn remover produto pressionado");
		}
		
		else if (EventoBotao.getSource().equals(Int.BtnRenovar)){
			System.out.println("btnRenovar pressionado");
		}
		else if (EventoBotao.getSource().equals(Int.BtnRemoverUnidade)){
			System.out.println("BtnRemoverUnidade  pressionado");
		}
		else if (EventoBotao.getSource().equals(Int.BtnVoltar)){
			System.out.println("BtnVoltar pressionado");
		}
		else if (EventoBotao.getSource().equals(Int.BtnAvancar)){
			System.out.println("BtnAvancar pressionado");
		}
		
		else if(EventoBotao.getSource().equals(Int.BtnSair)){
			
			System.exit(0);			
		}
						
	}

}
Criado 15 de novembro de 2013
Ultima resposta 24 de nov. de 2013
Respostas 5
Participantes 2