Programa só roda uma vez?

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

Para selecionar apenas uma opção é necessário criar um ButtonGroup e adicionar os radioButtons nele:

private final ButtonGroup grupoBotao = new ButtonGroup();

quando se quer apenas uma opção selecionada, não se usa checkbox, se usa radioButton:

JRadioButton rdbtnBtn = new JRadioButton("btn");
grupoBotao.add(rdbtnBtn);

No seu caso, deve colocar 2 ButtonGroup: um para selecionar entre série/paralelo e outro pra selecionar entre 110/220.

Valeu Fábio. Consegui fazer usando o que vc me disse. Só que agora meu maior problema é o fato do programa só rodar 1 vez, já que quando eu aperto no botao limpar, o valor das variaveis ficam preenchidos com o da primeira resposta. Eu tentei fazer assim:

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);
		corrente=0;
		tensao=0;
		resistencia_equivalente=0;


	}

}

quando eu faço desse jeito, depois do programa rodar 1 vez, todos os valores dão zero. Saberia me ajudar?

Dei uma refatorada no seu código:

  • tirei variáveis de instância desnecessárias;

  • simplifiquei o tratamento de eventos;

  • tornei o nome das variáveis mais legível.

    import java.awt.Container;
    import java.awt.FlowLayout;

    import javax.swing.ButtonGroup;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JTextField;
    import javax.swing.SwingConstants;

    public class Eletrica extends JFrame {

     public static void main(String[] args) {
     	JFrame janela = new Eletrica();
     	janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     	janela.setLocationRelativeTo(null);
     	janela.setVisible(true);
     }
    
     // variáveis de controle
     private boolean selecionou_circuito_serie;
     private boolean selecionou_tensao_110;
    
     //JTextFields
     private JTextField fieldQuantidadeLampadas;
     private JTextField fieldResistenciaCadaLampada;
     private JTextField fieldPotencia;
     private JTextField fieldCorrente;
    
     //JCheckBoxs
     private ButtonGroup groupResistencia;
     private JCheckBox checkSerie;
     private JCheckBox checkParalelo;
     private ButtonGroup groupTensao;
     private JCheckBox check110;
     private JCheckBox check220;
    
     public Eletrica() {
     	super("Instalação de Lâmpadas");
     	Container c = getContentPane();
     	c.setLayout(new FlowLayout());
    
     	//Quantidade de lampadas
     	c.add(new JLabel("Quantidade de lâmpadas: "));
     	fieldQuantidadeLampadas = new JTextField(5);
     	fieldQuantidadeLampadas.setHorizontalAlignment(SwingConstants.RIGHT);
     	c.add(fieldQuantidadeLampadas);
    
     	//Resistência de cada lâmpada
     	c.add(new JLabel("Resistência de cada lâmpada: "));
     	fieldResistenciaCadaLampada = new JTextField(5);
     	fieldResistenciaCadaLampada.setHorizontalAlignment(SwingConstants.RIGHT);
     	c.add(fieldResistenciaCadaLampada);
    
     	//Resistência - Serie . Parelelo
     	checkSerie = new JCheckBox("Série");
     	checkParalelo = new JCheckBox("Paralelo");
     	groupResistencia = new ButtonGroup();
     	groupResistencia.add(checkSerie);
     	groupResistencia.add(checkParalelo);
     	c.add(new JLabel("Circuito em: "));
     	c.add(checkSerie);
     	c.add(checkParalelo);
    
     	//Tensão
     	check110 = new JCheckBox("110 V");
     	check220 = new JCheckBox("220 V");
     	groupTensao = new ButtonGroup();
     	groupTensao.add(check110);
     	groupTensao.add(check220);
     	c.add(new JLabel("Tensão: "));
     	c.add(check110);
     	c.add(check220);
    
     	//Botão Calcular
     	JButton buttonCalcular = new JButton("Calcular");
     	c.add(buttonCalcular);
     	buttonCalcular.addActionListener(event -> calcular());
    
     	//Potência
     	c.add(new JLabel("Potência (W):"));
     	fieldPotencia = new JTextField(8);
     	fieldPotencia.setHorizontalAlignment(SwingConstants.RIGHT);
     	c.add(fieldPotencia);
    
     	//Corrente
     	c.add(new JLabel("Corrente (A):"));
     	fieldCorrente = new JTextField(8);
     	fieldCorrente.setHorizontalAlignment(SwingConstants.RIGHT);
     	c.add(fieldCorrente);
    
     	//Botão Limpar
     	JButton buttonLimpar = new JButton("Limpar");
     	c.add(buttonLimpar);
     	buttonLimpar.addActionListener(event -> limpar());
    
     	//Programando os CheckBox
     	checkSerie.addItemListener(event -> selecionou_circuito_serie = true);
     	checkParalelo.addItemListener(event -> selecionou_circuito_serie = false);
     	check110.addItemListener(event -> selecionou_tensao_110 = true);
     	check220.addItemListener(event -> selecionou_tensao_110 = false);
    
     	//Configuração da janela
     	setSize(300, 250);
    
     	// atualização dos campos
     	limpar();
     }
    
     private void limpar() {
     	fieldQuantidadeLampadas.setText("0");
     	fieldResistenciaCadaLampada.setText("0");
     	fieldPotencia.setText("0");
     	fieldCorrente.setText("0");
     	groupResistencia.setSelected(checkSerie.getModel(), true);
     	groupTensao.setSelected(check110.getModel(), true);
     }
    
     private void calcular() {
     	double quantidadeLampadas = Double.parseDouble(fieldQuantidadeLampadas.getText());
     	double resistenciaCadaLampada = Double.parseDouble(fieldResistenciaCadaLampada.getText());
    
     	double tensao = selecionou_tensao_110
     	        ? 110
     	        : 220;
    
     	double resistencia_equivalente = selecionou_circuito_serie
     	        ? quantidadeLampadas * resistenciaCadaLampada
     	        : resistenciaCadaLampada / quantidadeLampadas;
    
     	double corrente = tensao / resistencia_equivalente;
     	double potencia = tensao * corrente;
    
     	String quatroCasas = "%.4f";
     	fieldPotencia.setText(String.format(quatroCasas, potencia));
     	fieldCorrente.setText(String.format(quatroCasas, corrente));
     }
    

    }

Cara, muito obrigado. Isso aí que é saber programar. Só que por curiosidade, olhando meu código, vc saberia me falar pq ele só calcula 1 vez?

Não cheguei a testar seu código pois de cara já vi que não fazia sentido você estender JFrame e instanciar outro JFrame na variável jf.
E também no seu construtor fazia o setVisible(true).
Você não precisa desse jf, seu JFrame é a própria instância de Eletrica.