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();
}
}
Me parece que esta janela que você se refere e o próprio Frame principal. Veja o que você faz:
Instancia a classe Principal, que é um frame;
No construtor da classe principal:
Exibe o dialog até que o usuário digite CLT ou PJ;
Exibe uma janela de CLT ou PJ;
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.
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!
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…
[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]