Evento no botao

alguém pode me ajudar onde foi q errei… acredito q algo haver com evento no botão!
package Call;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TelaCall implements ActionListener {

	JFrame frame;
	JPanel contentPane;
	JTextField ENTcomprimento;
	JTextField ENTaltura;
	JTextField ENTlargura;
	JLabel resposta;
	JButton botao;
	Formula F = new Formula();

	public TelaCall() {
		frame = new JFrame("L'Cubico");
		frame.setSize(250, 200);
		frame.setLocationRelativeTo(null);
		frame.setResizable(false);
		frame.setLayout(null);
		Formula f = new Formula();
		// BK
		contentPane = new JPanel();
		contentPane.setBounds(0, 0, 250, 200);
		contentPane.setBackground(new Color(140, 140, 140));
		contentPane.setLayout(null);
		frame.setContentPane(contentPane);
		// imagem
		//Icon imagem = new ImageIcon(getClass().getResource("/Call/res.cubo.jpg"));
		// Botão
		botao = new JButton("Calcular");
		botao.setBounds(70, 90, 100, 25);
		botao.setFocusable(false);

		frame.getContentPane().add(botao);
		botao.addActionListener(f);

		// textos
		JLabel comp = new JLabel("Comp:");
		comp.setBounds(15, 120, 50, 25);
		frame.getContentPane().add(comp);

		JLabel alt = new JLabel("Alt:");
		alt.setBounds(113, 120, 50, 25);
		frame.getContentPane().add(alt);

		JLabel larg = new JLabel("Larg:");
		larg.setBounds(193, 120, 50, 25);
		frame.getContentPane().add(larg);

		resposta = new JLabel("adicione os valores para calcular!");
		resposta.setBounds(10, 20, 200, 25);
		frame.getContentPane().add(resposta);

		// Entrada de dados
		ENTcomprimento = new JTextField();
		ENTcomprimento.setBounds(5, 140, 60, 20);
		contentPane.add(ENTcomprimento);

		ENTaltura = new JTextField();
		ENTaltura.setBounds(90, 140, 60, 20);
		contentPane.add(ENTaltura);

		ENTlargura = new JTextField();
		ENTlargura.setBounds(175, 140, 60, 20);
		contentPane.add(ENTlargura);

		// importante
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		
		TelaCall tela = new TelaCall();
		
	}

//============================================================

	public JTextField getENTcomprimento() {
		return ENTcomprimento;
	}

	public void setENTcomprimento(JTextField eNTcomprimento) {
		ENTcomprimento = eNTcomprimento;
	}

	public JTextField getENTaltura() {
		return ENTaltura;
	}

	public void setENTaltura(JTextField eNTaltura) {
		ENTaltura = eNTaltura;
	}

	public JTextField getENTlargura() {
		return ENTlargura;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		F.converter();
	}
}

package Call;


public class Formula extends TelaCall {

	int comp = 0;
	int alt = 0;
	int larg = 0;
	int total = 0;
	TelaCall c = new TelaCall();


	TelaCall c1 = new TelaCall();
	public Formula(){

	}

	public void converter(){
		if(c.getENTcomprimento() != null){
		String l = c.getENTcomprimento().getText();
		comp= Integer.parseInt(l);
		System.out.println(comp);
		}
		if(c.getENTaltura() != null){
			String a = c.getENTaltura().getText();
			alt= Integer.parseInt(a);
			System.out.println(comp);
			}
		if(c.getENTlargura() != null){
			String l = c.getENTlargura().getText();
			larg= Integer.parseInt(l);
			System.out.println(larg);
			}
		total= comp * alt * larg;

		System.out.println(total);

	}

}
1 curtida

Sua estrutura de classes está muito estranha.
Você tem uma classe TelaCall, que instancia uma classe Formula que também é uma TelaCall.
Aí, na superclasse você está adicionando a classe filha como listener de um botão da super classe.

Isso está muito bagunçado.

Dicas:

Não implementar os listeners diretamente nas suas telas, crie classes anônimas ou expressões lâmbda para seus listeners de componentes.

Reveja sua estrutura de classes, não é boa prática uma superclasse fazer composição com uma classe filha.
O que exatamente você quer fazer que o levou a modelar dessa forma?

kkk iniciante eu, mas reconheço q ficou bagunça mesmo, era para se só uma revisão de getts e setters, ai foi virando esse frankenstein. vou refazer e melhorar. para ver… mas sua dica me ajudou muito tb.

Outra mancada é que dentro da classe Formula você estava novamente instanciando a classe TelaCall, duas vezes.

No construtor da TelaCall você também estava fazendo o setVisible do JFrame que ela encapsula.
Entenda que a função do construtor é inicializar o objeto de uma classe, ele não deveria fazer nada além disso, é responsabilidade de quem instanciou, chamar o método pra apresentar a janela.

Você também criou getters e setters para os componentes, não faz sentido.

Eu dei uma refatorada no seu código, dá uma olhada:.

import java.awt.Color;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TelaCall {

    private JFrame frame;
    private JTextField txtComprimento;
    private JTextField txtAltura;
    private JTextField txtLargura;
    private JLabel labelResposta;

    private final Formula formula = new Formula(this);

    public TelaCall() {
        frame = new JFrame("L'Cubico");
        frame.setSize(250, 200);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.setLayout(null);

        // BK
        JPanel contentPane = new JPanel();
        contentPane.setBounds(0, 0, 250, 200);
        contentPane.setBackground(new Color(140, 140, 140));
        contentPane.setLayout(null);
        frame.setContentPane(contentPane);
        // imagem
        // Icon imagem = new ImageIcon(getClass().getResource("/Call/res.cubo.jpg"));
        // Botão
        JButton botao = new JButton("Calcular");
        botao.setBounds(70, 90, 100, 25);
        botao.setFocusable(false);

        frame.getContentPane().add(botao);
        botao.addActionListener(event -> clicouNoBotao());

        // textos
        JLabel comp = new JLabel("Comp:");
        comp.setBounds(15, 120, 50, 25);
        frame.getContentPane().add(comp);

        JLabel alt = new JLabel("Alt:");
        alt.setBounds(113, 120, 50, 25);
        frame.getContentPane().add(alt);

        JLabel larg = new JLabel("Larg:");
        larg.setBounds(193, 120, 50, 25);
        frame.getContentPane().add(larg);

        labelResposta = new JLabel("adicione os valores para calcular!");
        labelResposta.setBounds(10, 20, 200, 25);
        frame.getContentPane().add(labelResposta);

        // Entrada de dados
        txtComprimento = new JTextField();
        txtComprimento.setBounds(5, 140, 60, 20);
        contentPane.add(txtComprimento);

        txtAltura = new JTextField();
        txtAltura.setBounds(90, 140, 60, 20);
        contentPane.add(txtAltura);

        txtLargura = new JTextField();
        txtLargura.setBounds(175, 140, 60, 20);
        contentPane.add(txtLargura);
    }

    private void clicouNoBotao() {
        int resposta = formula.converter();
        this.labelResposta.setText(String.valueOf(resposta));
    }

    public static void main(String[] args) {
        TelaCall tela = new TelaCall();
        tela.apresentar();
    }

    public void apresentar() {
        frame.setVisible(true);
    }

    public int getComprimento() {
        String text = txtComprimento.getText();
        return text == null || (text = text.trim()).isEmpty() ? 0 : Integer.parseInt(text);
    }

    public int getAltura() {
        String text = txtAltura.getText();
        return text == null || (text = text.trim()).isEmpty() ? 0 : Integer.parseInt(text);
    }

    public int getLargura() {
        String text = txtLargura.getText();
        return text == null || (text = text.trim()).isEmpty() ? 0 : Integer.parseInt(text);
    }
}



public class Formula {

    private final TelaCall telaCall;

    public Formula(TelaCall tela) {
        this.telaCall = tela;
    }

    public int converter() {
        int comp = telaCall.getComprimento();
        System.out.println(comp);

        int alt = telaCall.getAltura();
        System.out.println(alt);

        int larg = telaCall.getLargura();
        System.out.println(larg);

        int total = comp * alt * larg;

        System.out.println(total);
        return total;
    }
}
1 curtida

a brother muito obrigado pela ajuda^^