método equals

8 respostas
filipi

Estou desenvolvendo um exercio para a aula de java,e no aplicativo tenho que chamar a janela de uma classe,dentro da classe principal,até ai sem problemas,porem quando executo o codigo alem da janela que deve aparecer,aparece outra em branco.Executei essa classe em outro aplicativo como classe principal e ela rodou redondinha.Entao acredito que o erro deve estar ou no metodo equals que se estou usando ou no “if”…dêem uma olhada…

public class Principal extends Frame {
    private Pj pj;
    private Clt clt;
    String opcao;
 
    public Principal(){
     
    do {
    opcao = JOptionPane.showInputDialog(null,"Informe o tipo de colaborador (CLT ou PJ)");
    if(opcao == null){
    System.exit(0);
  }
    opcao = opcao.toUpperCase();
}while(!opcao.equals("CLT")&& !opcao.equals("PJ"));
    
    

    if(!opcao.equals("CLT")){
      pj = new Pj();
      pj.show();
    }
    else if(!opcao.equals("PJ")){
    clt = new Clt();
      clt.show();    
    }
    
    
    }
    

        public static void main ( String args []){
        Principal x = new Principal();
        x.show();
  
}
}

8 Respostas

jeffev

Olhando assim me pareceu certo. Tenta rodar em modo de debug e ve se ele entre nos 2 if ou somente em 1.

wagnerfrancisco

Me parece que esta janela que você se refere e o próprio Frame principal. Veja o que você faz:

  1. Instancia a classe Principal, que é um frame;
    No construtor da classe principal:
  2. Exibe o dialog até que o usuário digite CLT ou PJ;
  3. Exibe uma janela de CLT ou PJ;
  4. O construtor da classe principal é finalizado e você exibe o frame Principal no método main (x.show). Como não tem nenhum componente interno, este Frame é exibido em branco.

A classe principal não precisa ser um Frame. Não herde de Frame e não chame o método show (até pq não vai ter). Ela vai servir apenas para chamar as outras telas.

E outra coisa, onde você está comparando se opção é PJ ou CLT, é melhor não usar o operador de negação. Se é CLT, chame a tela Clt, fica mais legível. :smiley:

filipi

Wagner,fiz o que voce falou,removi a herança do frame e removi o show,deu certo,ficou perfeito!
A parte que voce falou de não usar um operado de negação eu não entendi!

wagnerfrancisco

Legal.

Eu me refiro a isto:

if(opcao.equals("CLT")){
   clt = new Clt();
   clt.show();    
} else if(opcao.equals("PJ")){
   pj = new Pj();
   pj.show();
}

ao invés disto:

if(!opcao.equals("CLT")){
   pj = new Pj();
   pj.show();
} else if(!opcao.equals("PJ")){
   clt = new Clt();
   clt.show();    
}
filipi

Entendi…fazendo dessa maneira,como fica a condição do “if” ?

wagnerfrancisco

Não entendi a dúvida cara… fica como postei no post anterior! ;D

filipi

Quis dizer,qual a diferança?

filipi

Cara aconteceu outro problema nesse codigo :(

Tentei dar uma função para um dos botões da GUI do aplicativo,só que na hora de executar para testar eu clico no botão e nada acontece :( Isso se repete para os outros botões,eu testei...da uma olhada pra mim para ver se tem algo errado,segue o codigo da classe da GUI...
public class Clt extends Frame implements ActionListener {

    private Label lb1, lb2, lb3, lb4, lb5, lb6;
    private TextField txt1, txt2, txt3, txt4, txt5, txt6;
    private Button jb1, jb2;
    private Panel pBot, pTxt;
    private Celetista cel;

    public Clt() {
        super("Folha de Pagamento");//titulo da janela//
        setSize(400, 400);//tamanho da janela//


        lb1 = new Label("Nome");//criando os textos e instanciando//
        txt1 = new TextField(20);
        lb2 = new Label("Endereço");
        txt2 = new TextField(20);
        lb3 = new Label("Telefone");
        txt3 = new TextField(20);
        lb4 = new Label("Rg");
        txt4 = new TextField(20);
        lb5 = new Label("Cpf");
        txt5 = new TextField(20);
        lb6 = new Label("Valor por hora");
        txt6 = new TextField(20);
        jb1 = new Button("Salvar");//criando botoes e instanciando//        
        jb2 = new Button("Calcular Pagamento");

        pTxt = new Panel(new GridLayout(12, 1));//criou o painel//
        pTxt.setBackground(Color.lightGray);
        pTxt.add(lb1);
        pTxt.add(txt1);
        pTxt.add(lb2);
        pTxt.add(txt2);
        pTxt.add(lb3);
        pTxt.add(txt3);
        pTxt.add(lb4);
        pTxt.add(txt4);
        pTxt.add(lb5);
        pTxt.add(txt5);
        pTxt.add(lb6);
        pTxt.add(txt6);
        add(pTxt, BorderLayout.CENTER);


        pBot = new Panel(new GridLayout(1, 2));
        pBot.setBackground(Color.lightGray);
        pBot.add(jb1);
        pBot.add(jb2);
        add(pBot, BorderLayout.SOUTH);

    }

     public void actionPerformed(ActionEvent event) {
        if (event.getSource() == jb2) {

            int horasTrabalhadas = -1;
            do {

                String horasTrabalhadasStr = JOptionPane.showInputDialog(null,
                        "Informe o numero de horas trabalhadas");
                if (horasTrabalhadasStr != null) {
                    horasTrabalhadas = Integer.parseInt(horasTrabalhadasStr);
                }
            } while (horasTrabalhadas < 0);

            double valHora = 0;

            valHora = Double.parseDouble(txt6.getText());
            cel.valorHora = valHora;

            cel.calcHoraExtra();
            cel.calcIrrf();
            cel.calcInss();

            System.out.println(cel.calcHoraExtra());
            System.out.println(cel.calcIrrf());
            System.out.println(cel.calcIrrf());
Criado 1 de outubro de 2012
Ultima resposta 2 de out. de 2012
Respostas 8
Participantes 3