Ir ao conteúdo
  • Cadastre-se

Programa só roda 1 vez JFrame


Posts recomendados

Boa noite, sou leigo ainda em java e estou com um problema no meu programa. Ele só funciona 1 vez, pois depois que eu clico no botão "limpar" e adiciono novos valores para as variáveis, elas continuam com os valores da 1ª vez q eu digitei. Além disso, onde tem os check bottom de Tensão 110V ou 220V e "circuito em: serie / paralelo", como eu faço para n deixar que o usuário selecione as duas ao mesmo tempo? Alguém pode me ajudar? valeu

O código é esse:

 

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Eletrica extends JFrame implements ActionListener
{
    private double resistencia_equivalente;
    private double tensão;
    private double corrente;
    private double potencia;
    private JFrame jf = new JFrame("Instalação de Lâmpadas");

    //JLabels
    private JLabel label1 = new JLabel("Quantidade de lâmpadas: ");
    private JLabel label2 = new JLabel("Resistência de cada lâmpada: ");
    private JLabel label3 = new JLabel("Circuito em: ");
    private JLabel label4 = new JLabel("Tensão: ");
    private JLabel label5 = new JLabel("Potência (W):");
    private JLabel label6 = new JLabel("Corrente (A):");

    //JTextFields
    private JTextField field1 = new JTextField(5);
    private JTextField field2 = new JTextField(5);
    private JTextField field3 = new JTextField(5);
    private JTextField field4 = new JTextField(5);
    private JTextField field5 = new JTextField(8);
    private JTextField field6 = new JTextField(8);

    //JButtons
    private JButton button1 = new JButton("Calcular");
    private JButton button2 = new JButton("Limpar");

    //JCheckBoxs
    private JCheckBox check1 = new JCheckBox("Série");
    private JCheckBox check2 = new JCheckBox("Paralelo");
    private JCheckBox check3 = new JCheckBox("110 V");
    private JCheckBox check4 = new JCheckBox("220 V");
        
        public Eletrica()
        {
            Container c = jf.getContentPane();
            c.setLayout(new FlowLayout());
            
            //Quantidade de lampadas
            c.add(label1);
            c.add(field1);
            
            //Resistência de cada lâmpada
            c.add(label2);
            c.add(field2);
            
            //Resistência - Serie . Parelelo
            c.add(label3);
            c.add(check1);
            c.add(check2);
            
            //Tensão
            c.add(label4);
            c.add(check3);
            c.add(check4);

            
            //Botão Calcular
            c.add(button1);
            button1.addActionListener(this);
            
            //Potência
            c.add(label5);
            c.add(field5);
            
            //Corrente
            c.add(label6);
            c.add(field6);
            
            //Botão Limpar
            c.add(button2);
            button2.addActionListener(this);

            //Programando os CheckBox
            HandlerClass handler = new HandlerClass();
            check1.addItemListener(handler);
            check2.addItemListener(handler);
            check3.addItemListener(handler);
            check4.addItemListener(handler);
            
            //Configuração da janela
            jf.setTitle("Instalação de Lâmpadas");
            jf.setSize(300,250);
            jf.setLocationRelativeTo(null);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jf.setResizable(true);
            jf.setVisible(true);
        }


    

    
        public static void main (String[] args)
        {
            new Eletrica();

        }

        //Classe para programar os CheckBox
        private class HandlerClass implements ItemListener
            {
                public void itemStateChanged(ItemEvent event)
                    {    
                        //Cálculos quando tá em série        
                        if (check1.isSelected() && check3.isSelected())
                        {
                            tensão=110;
                            resistencia_equivalente = Double.parseDouble(field1.getText())*Double.parseDouble(field2.getText());
                             corrente = (tensão)/(resistencia_equivalente);
                            potencia = tensão*corrente;
                        }
                        if (check1.isSelected() && check4.isSelected())
                        {
                            tensão=220;
                             resistencia_equivalente = Double.parseDouble(field1.getText())*Double.parseDouble(field2.getText());
                             corrente = (tensão)/(resistencia_equivalente);
                            potencia = tensão*corrente;
                        }    

                        //Calculos quando tá em paralelo
                        if (check2.isSelected() && check3.isSelected())        
                        {
                            tensão=110;
                            resistencia_equivalente = Double.parseDouble(field2.getText())/Double.parseDouble(field1.getText());
                            corrente = (tensão)/(resistencia_equivalente);
                            potencia = tensão*corrente;
                        }    
                        if (check2.isSelected() && check4.isSelected())        
                        {
                            tensão=220;
                            resistencia_equivalente = Double.parseDouble(field2.getText())/Double.parseDouble(field1.getText());
                            corrente = (tensão)/(resistencia_equivalente);
                            potencia = tensão*corrente;
                        }
                        

                    }
            }

        public void actionPerformed(ActionEvent ae)
        {
            if(ae.getSource()==button2)
            {
                field1.setText(null);
                field2.setText(null);
                field3.setText(null);
                field4.setText(null);
                field5.setText(null);
                field6.setText(null);
        
            }

            else
            {
             field5.setText("" + (potencia));
             field6.setText("" + (corrente));
            }
        }
}

Link para o comentário
Compartilhar em outros sites

@Gabriel Augusto Barcelos S tudo bem?

 

if (ae.getSource() == button2) {
	field1.setText(null);
	field2.setText(null);
	field3.setText(null);
	field4.setText(null);
	field5.setText(null);
	field6.setText(null);
} else {
	field5.setText("" + (potencia));
	field6.setText("" + (corrente));
}

Esse é o seu código quando clica no botão limpar. Observe que você apenas limpa o conteúdo dos textField. Em momento algum você "reseta" as variáveis.

 

Teria que ser assim:

 

if (ae.getSource() == button2) {
	field1.setText(null);
	field2.setText(null);
	field3.setText(null);
	field4.setText(null);
	field5.setText(null);
	field6.setText(null);
	resistencia_equivalente = 0.00;
	tensão = 0.00;
	corrente = 0.00;
	potencia = 0.00;
} else {
	field5.setText("" + (potencia));
	field6.setText("" + (corrente));
}

Agora sim. Os textField vão ser limpos e as variáveis "resetadas" para o valor 0;

Link para o comentário
Compartilhar em outros sites

@Gabriel Augusto Barcelos S Ah sim, entendi. Você precisa alterar a estrutura do seu código.

 

Crie uma outra classe que será um objeto BO contendo as suas variáveis.

 

No program principal, ao invés de ter as variáveis, utilize uma lista desse objeto e, a cada vez que o programa fizer um loop, armazene o objeto com os dados na lista.

 

Dessa forma, você mantém todos os dados digitados de cada iteração do seu loop e depois pode recuperar eles fazendo um for na lista e exibindo em uma tela/prompt separado com os resultados.

 

Qualquer dúvida ou dificuldade pergunte que te forneço exemplos.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...