método equals

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();
  
}
}

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

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:

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!

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();    
}

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

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

Quis dizer,qual a diferança?

Cara aconteceu outro problema nesse codigo :frowning:

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 :frowning:
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…

[code]
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());[/code]