Dúvida de iniciante. Não encontrei no forum. [RESOLVIDO]

Salve desenvolvedores,

Estou começando no Java, após 2 anos com .net estou definitivamente migrando, porém apanhando um pouco no eclipse.

Comecei a usar o swing hoje e estou com dúvidas em como passar uma ação de, por exemplo, fechar um JFrame.

Vou colar o código que foi gerado e se for possivel me darem uma explicação basicona mesmo de como o swing funciona.

Abraços.

import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Rectangle;
import javax.swing.JTextField;
import javax.swing.JButton;

public class Principal extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JLabel lbNome = null;
	private JLabel lbSobrenome = null;
	private JLabel lbDtNascimento = null;
	private JTextField txtNome = null;
	private JTextField txtSobrenome = null;
	private JTextField txtDtNasc = null;
	private JButton btnEnviar = null;
	private JButton btnFechar = null;

	/**
	 * This method initializes txtNome	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtNome() {
		if (txtNome == null) {
			txtNome = new JTextField();
			txtNome.setBounds(new Rectangle(120, 20, 150, 20));
		}
		return txtNome;
	}

	/**
	 * This method initializes txtSobrenome	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtSobrenome() {
		if (txtSobrenome == null) {
			txtSobrenome = new JTextField();
			txtSobrenome.setBounds(new Rectangle(120, 50, 150, 20));
		}
		return txtSobrenome;
	}

	/**
	 * This method initializes txtDtNasc	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtDtNasc() {
		if (txtDtNasc == null) {
			txtDtNasc = new JTextField();
			txtDtNasc.setBounds(new Rectangle(120, 80, 150, 20));
		}
		return txtDtNasc;
	}

	/**
	 * This method initializes btnEnviar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnEnviar() {
		if (btnEnviar == null) {
			btnEnviar = new JButton();
			btnEnviar.setBounds(new Rectangle(50, 146, 71, 20));
			btnEnviar.setText("Enviar");
		}
		return btnEnviar;
	}

	/**
	 * This method initializes btnFechar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnFechar() {
		if (btnFechar == null) {
			btnFechar = new JButton();
			btnFechar.setBounds(new Rectangle(171, 146, 73, 20));
			btnFechar.setText("Fechar");
		}
		return btnFechar;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Principal thisClass = new Principal();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	/**
	 * This is the default constructor
	 */
	public Principal() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(300, 200);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			lbDtNascimento = new JLabel();
			lbDtNascimento.setBounds(new Rectangle(5, 80, 105, 16));
			lbDtNascimento.setText("Data Nascimento:");
			lbSobrenome = new JLabel();
			lbSobrenome.setBounds(new Rectangle(5, 50, 70, 16));
			lbSobrenome.setText("Sobrenome:");
			lbNome = new JLabel();
			lbNome.setBounds(new Rectangle(5, 20, 40, 16));
			lbNome.setText("Nome:");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(lbNome, null);
			jContentPane.add(lbSobrenome, null);
			jContentPane.add(lbDtNascimento, null);
			jContentPane.add(getTxtNome(), null);
			jContentPane.add(getTxtSobrenome(), null);
			jContentPane.add(getTxtDtNasc(), null);
			jContentPane.add(getBtnEnviar(), null);
			jContentPane.add(getBtnFechar(), null);
		}
		return jContentPane;
	}

}

utilize:

dispose();

também tem

System.exit(0); que finaliza o programa.

ou no construtor

setDefaultCloseOperation(EXIT_ON_CLOSE);

Li sobre o dispose. Mas como o chamo?

acho que vc precisa da ultima mensagem com osetdefaultcloseoperation no construtor, tenta la… o dispose é se tiver mais de uma janela, aí ao fechar uma ou melhor ao abrir uma nova, vc fecha a antiga.
ou através de um botão para isto.

Boa tarde, então se você deseja apenas fechar o frame utilize o dispose() no actionListiner(evento) do botão que você deseja que feche a tela, porém se você deseja que alguma coisa aconteça antes de você fechar a tela use o listener abaixo:

addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { //sua ação aqui. } });

Até mais.

Ou seja, vc chama o dispose do botão que você quer que feche a janela.

Ou como raghy falou no construtor você põe este método:

Então quando o “x” do frame for apertado, apenas esta janela será fechada e não o programa.

Abaixo um exemplo de fazer uma ação, quando pedir para fechar a janela na linha do que o jgavazzisp disse:

addWindowListener(new WindowAdapter() {@Override public void windowClosing (WindowEvent e){ Index pr = new Index(); dispose(); }});
no meu exemplo, ele abre um outro JFrame.
Se conseguiu posta aki.

E aí pessoal.

Entao, o que eu realmente quero é usar o botao btnFechar que criei no template para fechar a tela e nao usar o ‘X’ do jframe.

Salve, garoto…

Pra fazer a janela fechar qdo clicar no seu botao, adiciona um evento nele (actionPerformed),
e no metodo, coloca:

this.dispose();

Abraco!

Salve novamente,

Valeu demais a ajuda de todos no forum. Consegui fazer o que queria com o botao fechar (posto mais abaixo), mas agora apareceu uma duvida um pouco maior de como usar outro evento em outro botao. Talvez da forma como eu fiz nao tenha sido a melhor…mas vamos apanhando para aprender.

Pra começar eu adicionei o implements ActionListener na classe

public class Principal extends JFrame implements ActionListener {

Criei o listener no botão

btnFechar.addActionListener(this);

Finalmente o metodo para fechar a tela

	public void actionPerformed(ActionEvent e){
		this.dispose();
	}

A dúvida agora é como implementar no botao enviar outro Listener…

O código completo segue abaixo. Valeu pessoal.


import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class Principal extends JFrame implements ActionListener {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JLabel lbNome = null;
	private JLabel lbSobrenome = null;
	private JLabel lbDtNascimento = null;
	private JTextField txtNome = null;
	private JTextField txtSobrenome = null;
	private JTextField txtDtNasc = null;
	private JButton btnEnviar = null;
	private JButton btnFechar = null;

	/**
	 * This method initializes txtNome	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtNome() {
		if (txtNome == null) {
			txtNome = new JTextField();
			txtNome.setBounds(new Rectangle(120, 20, 150, 20));
		}
		return txtNome;
	}

	/**
	 * This method initializes txtSobrenome	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtSobrenome() {
		if (txtSobrenome == null) {
			txtSobrenome = new JTextField();
			txtSobrenome.setBounds(new Rectangle(120, 50, 150, 20));
		}
		return txtSobrenome;
	}

	/**
	 * This method initializes txtDtNasc	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtDtNasc() {
		if (txtDtNasc == null) {
			txtDtNasc = new JTextField();
			txtDtNasc.setBounds(new Rectangle(120, 80, 150, 20));
		}
		return txtDtNasc;
	}

	/**
	 * This method initializes btnEnviar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnEnviar() {
		if (btnEnviar == null) {
			btnEnviar = new JButton();
			btnEnviar.setBounds(new Rectangle(50, 146, 71, 20));
			btnEnviar.setText("Enviar");
		}
		return btnEnviar;
	}

	/**
	 * This method initializes btnFechar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnFechar() {
		if (btnFechar == null) {
			btnFechar = new JButton();
			btnFechar.setBounds(new Rectangle(171, 146, 73, 20));
			btnFechar.setText("Fechar");
			btnFechar.addActionListener(this);
		}
		return btnFechar;
	}
	
	public void actionPerformed(ActionEvent e){
		this.dispose();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Principal thisClass = new Principal();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	/**
	 * This is the default constructor
	 */
	public Principal() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(300, 200);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			lbDtNascimento = new JLabel();
			lbDtNascimento.setBounds(new Rectangle(5, 80, 105, 16));
			lbDtNascimento.setText("Data Nascimento:");
			lbSobrenome = new JLabel();
			lbSobrenome.setBounds(new Rectangle(5, 50, 70, 16));
			lbSobrenome.setText("Sobrenome:");
			lbNome = new JLabel();
			lbNome.setBounds(new Rectangle(5, 20, 40, 16));
			lbNome.setText("Nome:");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(lbNome, null);
			jContentPane.add(lbSobrenome, null);
			jContentPane.add(lbDtNascimento, null);
			jContentPane.add(getTxtNome(), null);
			jContentPane.add(getTxtSobrenome(), null);
			jContentPane.add(getTxtDtNasc(), null);
			jContentPane.add(getBtnEnviar(), null);
			jContentPane.add(getBtnFechar(), null);
		}
		return jContentPane;
	}

}

Seu método actionPerformed ficaria da seguinte maneira:

public void actionPerformed(ActionEvent e)
{  
       if(e.getSource().equals(btnEnviar))
       {
              //todo código de evento do btn Enviar
       }
       else if(e.getSource().equals(btnFechar))
       {
              this.dispose(); 
       }
}

Valeu demais pessoal,

manolimars, seu post me ajudou muito. Valheu.

Segue o codigo.

PS:.depois que fiz essa mexida apareceu um erro contentPane:java.lang.IllegalArgumentException(IWAV0167E access by method
name(getContentPane) (not by Proxy) requires a receiver.)
, mas esse erro não interfere na compilação e sim na visualização do jFrame. Irei pesquisar um pouco sobre isso. Esse topico está resolvido.

Abraços.


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

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

import br.com.ConexaoBanco.ConexaoMySQL;


public class Principal extends JFrame implements ActionListener {
	
	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JLabel lbNome = null;
	private JLabel lbSobrenome = null;
	private JLabel lbDtNascimento = null;
	private JTextField txtNome = null;
	private JTextField txtSobrenome = null;
	private JTextField txtDtNasc = null;
	private JButton btnEnviar = null;
	private JButton btnFechar = null;

	/**
	 * This method initializes txtNome	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtNome() {
		if (txtNome == null) {
			txtNome = new JTextField();
			txtNome.setBounds(new Rectangle(120, 20, 150, 20));
		}
		return txtNome;
	}

	/**
	 * This method initializes txtSobrenome	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtSobrenome() {
		if (txtSobrenome == null) {
			txtSobrenome = new JTextField();
			txtSobrenome.setBounds(new Rectangle(120, 50, 150, 20));
		}
		return txtSobrenome;
	}

	/**
	 * This method initializes txtDtNasc	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtDtNasc() {
		if (txtDtNasc == null) {
			txtDtNasc = new JTextField();
			txtDtNasc.setBounds(new Rectangle(120, 80, 150, 20));
		}
		return txtDtNasc;
	}

	/**
	 * This method initializes btnEnviar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnEnviar() {
		if (btnEnviar == null) {
			btnEnviar = new JButton();
			btnEnviar.setBounds(new Rectangle(50, 146, 71, 20));
			btnEnviar.setText("Enviar");
			btnEnviar.addActionListener(this);
		}
		return btnEnviar;
	}

	/**
	 * This method initializes btnFechar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnFechar() {
		if (btnFechar == null) {
			btnFechar = new JButton();
			btnFechar.setBounds(new Rectangle(171, 146, 73, 20));
			btnFechar.setText("Fechar");
			btnFechar.addActionListener(this);
		}
		return btnFechar;
	}
	
	public void actionPerformed(ActionEvent e){
		if(e.getSource() == btnFechar){
			this.dispose();
		} else {
			ConexaoMySQL conexao = new ConexaoMySQL();
			conexao.Insert(txtNome.getText(), txtSobrenome.getText(), Integer.parseInt(txtDtNasc.getText()));
		}
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Principal thisClass = new Principal();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	/**
	 * This is the default constructor
	 */
	public Principal() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(300, 200);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			lbDtNascimento = new JLabel();
			lbDtNascimento.setBounds(new Rectangle(5, 80, 105, 16));
			lbDtNascimento.setText("Data Nascimento:");
			lbSobrenome = new JLabel();
			lbSobrenome.setBounds(new Rectangle(5, 50, 70, 16));
			lbSobrenome.setText("Sobrenome:");
			lbNome = new JLabel();
			lbNome.setBounds(new Rectangle(5, 20, 40, 16));
			lbNome.setText("Nome:");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(lbNome, null);
			jContentPane.add(lbSobrenome, null);
			jContentPane.add(lbDtNascimento, null);
			jContentPane.add(getTxtNome(), null);
			jContentPane.add(getTxtSobrenome(), null);
			jContentPane.add(getTxtDtNasc(), null);
			jContentPane.add(getBtnEnviar(), null);
			jContentPane.add(getBtnFechar(), null);			
		}
		return jContentPane;
	}

}

Olá amigo

Bem vindo ao mundo java, eu também migrei a uns dois anos atrás de Delphi para Java e não me arrependo nenhum pouco.

já que está usando swing dê uma olhada em:

http://oswing.sourceforge.net/

Silvio Guedes