Metodo dispose não funciona de jeito nenhum no MVC

2 respostas
AnotherAlex

Pessoal, boa tarde!

Estou encaminhando abaixo o codigo só para voces terem uma ideia do que está acontecendo. já tentei tudo, o form pisca mas não fecha de jeito nenhum. é hiper irritante, porque estou com um projeto e não consigo andar por esse simples detalhe.

qualquer ajuda é bem vinda. estou usando uma classe de controle como segue abaixo:

package controle;

import visao.*;
import java.awt.event.*;

public class Controle {

	private TelaPrincipal TP;
	public Controle (TelaPrincipal TP) {
		
		this.TP = TP;
		this.TP.addMenuListener(new MenuListener());

	}
	class MenuListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			if (e.getActionCommand().equals("Empresa"))
			{
				TelaEmpresa TE = new TelaEmpresa();
				TE.addEmpresaListener(new EmpresaListener(TE));
			}
		}
	}

	class EmpresaListener implements ActionListener
	{
		private TelaEmpresa TE;
		public EmpresaListener (TelaEmpresa TE){
			this.TE = TE;
		}

		public void actionPerformed(ActionEvent e)
		{
			TelaEmpresa T = new TelaEmpresa();
			if (e.getActionCommand().equals("Sair"))
			{
				T.fechaTela();
				
			}
		}
	}
}

Será que dá pra ver algum erro, algo que justifique o que está acontecendo?
Dai a tela é formada pelo seguinte codigo:

package visao;

import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class TelaEmpresa {

	private JFrame jFrame = null;
	private JPanel jContentPane = null;
	private JPanel jPanel = null;
	private JPanel jPanel1 = null;
	private JButton jButton4 = null;
	private JLabel jLabel = null;
	private JLabel jLabel1 = null;
	private JTextField jTextField = null;
	private JTextField jTextField1 = null;

	public TelaEmpresa () {
		getJFrame();
	}
	
	private JFrame getJFrame() {
		if (jFrame == null) {
			jFrame = new JFrame();
			jFrame.setTitle("Empresa");
			jFrame.setContentPane(getJContentPane());
			jFrame.setSize(new Dimension(450, 221));
			jFrame.setVisible(true);
		}
		return jFrame;
	}

	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJPanel(), null);
			jContentPane.add(getJPanel1(), null);
		}
		return jContentPane;
	}

	private JPanel getJPanel() {
		if (jPanel == null) {
			jLabel1 = new JLabel();
			jLabel1.setBounds(new Rectangle(86, 37, 38, 16));
			jLabel1.setText("Valor");
			jLabel = new JLabel();
			jLabel.setBounds(new Rectangle(85, 11, 38, 16));
			jLabel.setText("Cod");
			jPanel = new JPanel();
			jPanel.setLayout(null);
			jPanel.setBounds(new Rectangle(29, 14, 408, 68));
			jPanel.add(jLabel, null);
			jPanel.add(jLabel1, null);
			jPanel.add(getJTextField(), null);
			jPanel.add(getJTextField1(), null);
		}
		return jPanel;
	}

	private JPanel getJPanel1() {
		if (jPanel1 == null) {
			jPanel1 = new JPanel();
			jPanel1.setLayout(null);
			jPanel1.setBounds(new Rectangle(28, 102, 432, 36));
			jPanel1.add(getJButton4(), null);
		}
		return jPanel1;
	}
	private JButton getJButton4() {
		if (jButton4 == null) {
			jButton4 = new JButton();
			jButton4.setBounds(new Rectangle(250, 4, 60, 26));
			jButton4.setText("Sair");
		}
		return jButton4;
	}

	private JTextField getJTextField() {
		if (jTextField == null) {
			jTextField = new JTextField();
			jTextField.setBounds(new Rectangle(136, 10, 171, 20));
		}
		return jTextField;
	}

	private JTextField getJTextField1() {
		if (jTextField1 == null) {
			jTextField1 = new JTextField();
			jTextField1.setBounds(new Rectangle(135, 35, 174, 20));
		}
		return jTextField1;
	}
	public void fechaTela(){
		this.jFrame.dispose();
	}
	public void addEmpresaListener (ActionListener l) {
		jButton4.addActionListener(l);
	}	
}

2 Respostas

ViniGodoy

Na linha 39, você chama T.fechaTela(). Mas você faz isso criando uma nova tela.

Troque por TE.fechaTela(). E não há necessidade daquele TelaEmpresa T = new TelaEmpresa();

Não adianta abrir um tela e tentar fechar outra.

AnotherAlex

É claro!
Muito Obrigado pela ajuda!

Criado 11 de setembro de 2009
Ultima resposta 14 de set. de 2009
Respostas 2
Participantes 2