Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vanilson

Herança

Recommended Posts

Pessoal seguinte, por curiosidade e por eu achar que é o mais correcto decidi tentar aplicar o conceito de herança nos casos em que precisamos de validar os dados do formulario, a ideia é de primeiramente declarar as minhas textfields como public e de seguida dar um extends na minha classe que valida, o q está a acontecer é que ele manda a msg de erro mesmo q o campo esteja vazio e duplica a minha janela. Eis o codigo:

 

Classe Formularioaluno

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package cursojava;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
/**
*
* @author Vanilson
*/
public class Formularioaluno extends JFrame implements ActionListener {

   private JLabel lblnomealuno, lbldatanascimento, lblestadocivil, lblsexo;
   public JTextField txtnomealuno, txtdatanascimento;
   String[] estadocivil = {"Masculino","Femenino"};
   private JComboBox cboestadocivil;
   private JPanel painellabeltext, painelbotoes, painelsexo;
   private JOptionPane sexo;
   private JButton btnguardar, btnvisualizar, btnlimpar;
   private JRadioButton masculino, femenino;

   public Formularioaluno(){
       super("Cadastro de aluno");
       constrFormulario();
       setVisible(true);
       setSize(350,200);
setResizable(false);
       setLocationRelativeTo(null);
   }
   public void constrFormulario(){

       painellabeltext = new JPanel();
       painellabeltext.setLayout(new GridLayout(4,2));
       lblnomealuno = new JLabel("Aluno");
       lbldatanascimento = new JLabel("Data de nascimento");
       lblestadocivil = new JLabel("Estado civil");
       lblsexo = new JLabel("Sexo");

       txtnomealuno = new JTextField();
       txtdatanascimento = new JTextField();
       masculino = new JRadioButton("Masculino");
       femenino = new JRadioButton("Femenino");
       cboestadocivil = new JComboBox(estadocivil);

       btnguardar = new JButton("Guardar");
       btnguardar.addActionListener(this);
       btnvisualizar = new JButton("Visualizar");
       btnvisualizar.addActionListener(this);
       btnlimpar = new JButton("Limpar");
       btnlimpar.addActionListener(this);

       painellabeltext.add(lblnomealuno);
       painellabeltext.add(txtnomealuno);

       painellabeltext.add(lbldatanascimento);
       painellabeltext.add(txtdatanascimento);

       painellabeltext.add(lblestadocivil);
       painellabeltext.add(cboestadocivil);

       painellabeltext.add(lblsexo);
       painelsexo = new JPanel();
       //painelsexo.add(lblsexo);
       painelsexo.add(masculino);
       painelsexo.add(femenino);

       painelbotoes = new JPanel();
       painelbotoes.add(btnguardar);
       painelbotoes.add(btnvisualizar);
       painelbotoes.add(btnlimpar);

       getContentPane().add(painellabeltext,BorderLayout.NORTH);
       getContentPane().add(painelsexo,BorderLayout.CENTER);
       getContentPane().add(painelbotoes,BorderLayout.SOUTH);

       this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);	       
   }
   public void actionPerformed(ActionEvent e) {
       Beanaluno beanaluno = new Beanaluno();
       Validaaluno validaaluno = new Validaaluno();
       if(e.getSource() == btnguardar){
           validaaluno.validacoes();
           //beanaluno.setNomealuno(txtnomealuno.getText());
       }
       else
           if(e.getSource() == btnvisualizar){
               JOptionPane.showMessageDialog(null,"Dados do aluno " + beanaluno.getNomealuno());
           }
       else
           if(e.getSource() == btnlimpar){
               txtnomealuno.setText(null);
               txtdatanascimento.setText(null);
           }
   }
}

Classe Validaaluno

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package cursojava;

import javax.swing.JOptionPane;

/**
*
* @author Vanilson
*/
public class Validaaluno extends Formularioaluno  {

   public Validaaluno(){

   }
   public void validacoes(){
       if(txtnomealuno.getText().equals(""))
           JOptionPane.showMessageDialog(null, "Digite o nome");
   }

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Vanilson, tranq? Alguma duvida?? Nao ficou claro se você quer apenas demonstrar o exemplo ou tem alguma duvida...

 

Minha OBS sobre seu codigo:

Uma das coisas que faz realmente OO ser tao recomendada e tao difundida é o fato dela nos permitir expressar em forma de código situações "reais"..

você está assumindo que "Validaaluno" é um"Formularioaluno".. Agora pensa no que realmente você deseja fzr com esse metodo de validacao e responda: "Validaaluno" é um/deve ser um "Formularioaluno"??

 

Quem deve ser responsavel por validar seus proprios atributos/campos/propriedades?

 

[OFF]

Se você quiser colocar restricoes na validacao da data, certamente JTextField nao eh o componente que você quer usar... Pode usar o JFormattedTextField e usar algumas mascaras ou formatters nele... Ai depende..

 

Abraco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Vanilson, tranq? Alguma duvida?? Nao ficou claro se você quer apenas demonstrar o exemplo ou tem alguma duvida...

 

Minha OBS sobre seu codigo:

Uma das coisas que faz realmente OO ser tao recomendada e tao difundida é o fato dela nos permitir expressar em forma de código situações "reais"..

você está assumindo que "Validaaluno" é um"Formularioaluno".. Agora pensa no que realmente você deseja fzr com esse metodo de validacao e responda: "Validaaluno" é um/deve ser um "Formularioaluno"??

 

Quem deve ser responsavel por validar seus proprios atributos/campos/propriedades?

 

[OFF]

Se você quiser colocar restricoes na validacao da data, certamente JTextField nao eh o componente que você quer usar... Pode usar o JFormattedTextField e usar algumas mascaras ou formatters nele... Ai depende..

 

Abraco

 

Ritchie seguinte, andei a ver os conceitos de POO mais especificamente herança e encapsulamento e notei que o codigo n está a respeitar esses conceitos primeiro é q não posso ter as JTextField declaradas como public, e o segundo ponto tem haver com a tua pergunta ValidaAluno não é um FormularioAluno.

 

Se você quiser colocar restricoes na validacao da data, certamente JTextField nao eh o componente que você quer usar... Pode usar o JFormattedTextField e usar algumas mascaras ou formatters nele... Ai depende..

 

Eu fiz esse codigo apenas para testar se é possivel fazer as validações em uma classe a parte, então n me preocupei tanto com a data e cheguei a

conclusão que isso não é possivel porque eu tenho que validar o form antes dos dados irem para o modelo(sets e gets) mais posso sim é fazer um metodo na propria classe que retorna um booleano para tornar o codigo mais limpo. Eis os metodo valida e o metodo actionPerformed:

 

   public void actionPerformed(ActionEvent e){
       if(e.getSource()==btnGuardar){
            if(valida())
                //obterDados();
                guardar();
       }
       else
           if(e.getSource()==btnVer){
               ver();
           }
       else
           if(e.getSource()==btnLimpar){
               limpar();
           }
   }
   public boolean valida(){
       if(txtNome.getText().equals("")){
           JOptionPane.showMessageDialog(null, "Digite o nome");
           return false;
       } 
       else
           if(txtNumero.getText().equals("")){
              JOptionPane.showMessageDialog(null, "Digite o numero");
              return false;
           }

       else
           if(txtEndereco.getText().equals("")){
              JOptionPane.showMessageDialog(null, "Digite o endereço"); 
              return false;
           }
       return true;       
   }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, c você quiser que uma outra classe veja um atributo sem que ele seja public, você pode atribuir ele protect

 

Qualquer duvida !

 

Abs! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, c você quiser que uma outra classe veja um atributo sem que ele seja public, você pode atribuir ele protect

 

Qualquer duvida !

 

Abs! :)

 

Valeu pela dica

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.