Vanilson 2 Denunciar post Postado Abril 20, 2011 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
Giovanni Ritchie 0 Denunciar post Postado Abril 24, 2011 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
Vanilson 2 Denunciar post Postado Maio 13, 2011 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
AmorimRob 0 Denunciar post Postado Maio 18, 2011 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
Vanilson 2 Denunciar post Postado Maio 18, 2011 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