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

public class ExBasico extends JFrame {

    private JLabel jLabel1, jLabel2, jLabel3, jLabel4;
    private JTextField tFNome, tFEndereco, tFCidade, tFEstado;
    private JButton btOk, btCancelar;
    private JPanel jPanel1, jPanel2, jPanel3;
    private Container janela;


  public ExBasico()
    {
    super("Exemplo Basico"); // Título da janela
    setDefaultCloseOperation(EXIT_ON_CLOSE); // operação default ao fechar janela

    jLabel1 = new JLabel("Nome: "); // Rótulo

    tFNome = new JTextField(15);   // Campo de texto
    tFNome.addFocusListener(new TFNome()); // evento de foco do campo de texto  

    jLabel2 = new JLabel("Endereço: ");
    tFEndereco = new JTextField(20);
    jLabel3 = new JLabel("Cidade: ");
    tFCidade = new JTextField(15);
    jLabel4 = new JLabel("Estado: ");
    tFEstado = new JTextField(2);

    btOk = new JButton("OK");   // Botão
    btOk.addActionListener(new BtOk()); // evento (clicar) do botão 

    btCancelar = new JButton("Cancelar");
    btCancelar.addActionListener(new BtCancelar());

    jPanel1 = new JPanel();
    jPanel2 = new JPanel();
    jPanel3 = new JPanel();

    janela = getContentPane();
    janela.setLayout(new BorderLayout()); // Layout da janela de Bordas

    jPanel1.setLayout(new GridLayout(4,1)); 
    jPanel2.setLayout(new GridLayout(4,1));
    jPanel3.setLayout(new FlowLayout());

    jPanel1.add(jLabel1);
    jPanel1.add(jLabel2);
    jPanel1.add(jLabel3);
    jPanel1.add(jLabel4);

    jPanel2.add(tFNome);
    jPanel2.add(tFEndereco);    
    jPanel2.add(tFCidade);
    jPanel2.add(tFEstado);

    jPanel3.add(btOk);
    jPanel3.add(btCancelar);

    janela.add(jPanel1,  BorderLayout.WEST);
    janela.add(jPanel2, BorderLayout.CENTER);
    janela.add(jPanel3,  BorderLayout.SOUTH);

    pack();  // pode ser usado ao inves de setSize(400, 250);
    }

  public static void main(String[] args) {
    ExBasico exBasico = new ExBasico();
    exBasico.addWindowListener(new WL());
    exBasico.show();
  }

    class BtOk implements ActionListener
        {
        public void actionPerformed(ActionEvent e)
            {
            // colocar o codigo aqui
            }
        }

    class BtCancelar implements ActionListener
        {
        public void actionPerformed(ActionEvent e)
            {
            tFNome.grabFocus();
            }
        }

    class TFNome implements FocusListener
        {
        public void focusGained(FocusEvent e)
            {
            tFNome.setText("");
            tFEndereco.setText("");
            tFCidade.setText("");
            tFEstado.setText("");
            }
        public void focusLost(FocusEvent e)
            {
            String s = tFNome.getText();
            if (s.length() == 0)
                {
                tFEndereco.setEnabled(false);
                tFCidade.setEnabled(false);
                tFEstado.setEnabled(false);
                btOk.setEnabled(false);
                }
            else
                {
                tFEndereco.setEnabled(true);
                tFCidade.setEnabled(true);
                tFEstado.setEnabled(true);
                btOk.setEnabled(true);
                tFEndereco.grabFocus();
                }
            }
        }


    static class WL extends WindowAdapter
        {
        public void windowClosing(WindowEvent e)
            {
            System.exit(0);
            }
        }

}