Operações com JRadioButton

3 respostas
W

Olá pessoal, sou novo em java, o que estou tentando fazer é o seguinte: uma tela com as opções de soma, subtração, divisão e multiplicação, onde o usuário escolhe uma dessas opções para realizar, porém não estou conseguindo usar um if para determinar qual operação fz de acordo com a escolha do usuário, erro está em usar if, fico desde já grato a todos pela ajuda, segue meu código.
mport java.util.Scanner;//

import javax.swing.JOptionPane;

import javax.swing.<em>;

import java.awt.</em>;

import java.awt.event.*;
public class Calculadora  {

JLabel label;

int num1;

int num2;

String n1;

String n2;

int soma;

int subtracao;

int divisao;

int multiplicacao;
public static void main(String args[]){
          Calculadora sr = new Calculadora();

}
public Calculadora(){

JFrame frame = new JFrame("Selecione a Opção");
JRadioButton Soma = new JRadioButton("Soma");
JRadioButton Subtração = new JRadioButton("Subtração");
JRadioButton Divisão = new JRadioButton("Divisão");
JRadioButton Multiplicação = new JRadioButton("Multiplicação");

JPanel panel = new JPanel();
panel.add(Soma);
panel.add(Subtração);
panel.add(Divisão);
panel.add(Multiplicação);


Soma.addActionListener(new MyAction());
Subtração.addActionListener(new MyAction());
Divisão.addActionListener(new MyAction());
Multiplicação.addActionListener(new MyAction());

label = new JLabel("");
frame.add(panel, BorderLayout.NORTH);
frame.add(label, BorderLayout.CENTER);
frame.setSize(400, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}

	
            public class MyAction implements ActionListener{
                
            public void actionPerformed(ActionEvent e){
            
           
	Scanner scan = new Scanner(System.in);
             if (soma.isSelected()) {// O erro está em usar esse if
	n1=JOptionPane.showInputDialog("Digite o primeiro numero inteiro");
	num1 = Integer.parseInt(n1);

	n2 = JOptionPane.showInputDialog("Digite o segundo numero numero inteiro");
	num2 = Integer.parseInt(n2);

	soma = num1+num2;

	
	 JOptionPane.showMessageDialog(null,"A Soma é:" + soma );

3 Respostas

E
  1. Nunca use diretamente um JFrame. Sempre derive uma classe dele, e então faça com que os componentes sejam variáveis de instância dessa classe. Por exemplo, você poderia ter estruturado seu programa como o exemplo que vou dar daqui a pouco.
  2. Embora o Java permita, não faça a confusão de ter variáveis cujo nome difere apenas porque a primeira letra é minúscula ou maiúscula. Você confundiu “soma” com “Soma” e então acabou fazendo uma bela salada.

Vou dar um exemplo de como você poderia ter escrito essa classe. (Vou usar um truque, que é o de usar o Visual Editor do Eclipse. Mesmo assim, o código é suficientemente claro para você entender o que foi feito.)

E
package guj;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class CalculadoraFrame extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JPanel pnlBotoes = null;
    private JButton btnCalcular = null;
    private JPanel pnlEntrada = null;
    private JLabel lblPrimeiroNumero = null;
    private JTextField txtPrimeiroNumero = null;
    private JLabel lblSegundoNumero = null;
    private JTextField txtSegundoNumero = null;
    private JPanel pnlCheckBoxes = null;
    private JRadioButton rdoAdicao = null;
    private JRadioButton rdoSubtracao = null;
    private JRadioButton rdoMultiplicacao = null;
    private JRadioButton rdoDivisao = null;
    private JLabel lblResultado = null;
    private ButtonGroup btgOperacoes = null;

    /**
     * This method initializes pnlBotoes
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getPnlBotoes() {
        if (pnlBotoes == null) {
            lblResultado = new JLabel();
            lblResultado.setText("Resultado:");
            pnlBotoes = new JPanel();
            pnlBotoes.setLayout(new FlowLayout());
            pnlBotoes.add(getBtnCalcular(), null);
            pnlBotoes.add(lblResultado, null);
        }
        return pnlBotoes;
    }

    /**
     * This method initializes btnCalcular
     * 
     * @return javax.swing.JButton
     */
    private JButton getBtnCalcular() {
        if (btnCalcular == null) {
            btnCalcular = new JButton();
            btnCalcular.setText("Calcular");
            btnCalcular.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    try {
                        int n1 = Integer.parseInt(getTxtPrimeiroNumero().getText());
                        int n2 = Integer.parseInt(getTxtSegundoNumero().getText());
                        int resultado = 0;
                        if (getRdoAdicao().isSelected()) {
                            resultado = n1 + n2;
                        } else if (getRdoSubtracao().isSelected()) {
                            resultado = n1 - n2;
                        } else if (getRdoMultiplicacao().isSelected()) {
                            resultado = n1 * n2;
                        } else if (getRdoDivisao().isSelected()) {
                            resultado = n1 / n2;
                        }
                        lblResultado.setText("Resultado: " + resultado);
                    } catch (NumberFormatException ex) {
                        JOptionPane.showMessageDialog(CalculadoraFrame.this, ex.getMessage(),
                            "Erro na conversão para int - formato inválido", JOptionPane.ERROR_MESSAGE);
                    } catch (ArithmeticException ex) {
                        JOptionPane.showMessageDialog(CalculadoraFrame.this, ex.getMessage(), "Divisão por zero",
                            JOptionPane.ERROR_MESSAGE);
                    }
                }
            });
        }
        return btnCalcular;
    }

    /**
     * This method initializes pnlEntrada
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getPnlEntrada() {
        if (pnlEntrada == null) {
            lblSegundoNumero = new JLabel();
            lblSegundoNumero.setText("Segundo número inteiro:");
            lblPrimeiroNumero = new JLabel();
            lblPrimeiroNumero.setText("Primeiro número inteiro:");
            GridLayout gridLayout = new GridLayout();
            gridLayout.setRows(2);
            gridLayout.setColumns(2);
            pnlEntrada = new JPanel();
            pnlEntrada.setLayout(gridLayout);
            pnlEntrada.add(lblPrimeiroNumero, null);
            pnlEntrada.add(getTxtPrimeiroNumero(), null);
            pnlEntrada.add(lblSegundoNumero, null);
            pnlEntrada.add(getTxtSegundoNumero(), null);
        }
        return pnlEntrada;
    }

    /**
     * This method initializes txtPrimeiroNumero
     * 
     * @return javax.swing.JTextField
     */
    private JTextField getTxtPrimeiroNumero() {
        if (txtPrimeiroNumero == null) {
            txtPrimeiroNumero = new JTextField();
        }
        return txtPrimeiroNumero;
    }

    /**
     * This method initializes txtSegundoNumero
     * 
     * @return javax.swing.JTextField
     */
    private JTextField getTxtSegundoNumero() {
        if (txtSegundoNumero == null) {
            txtSegundoNumero = new JTextField();
        }
        return txtSegundoNumero;
    }

    /**
     * This method initializes pnlCheckBoxes
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getPnlCheckBoxes() {
        if (pnlCheckBoxes == null) {
            pnlCheckBoxes = new JPanel();
            pnlCheckBoxes.setLayout(new BoxLayout(getPnlCheckBoxes(), BoxLayout.Y_AXIS));
            pnlCheckBoxes.add(getRdoAdicao(), null);
            pnlCheckBoxes.add(getRdoSubtracao(), null);
            pnlCheckBoxes.add(getRdoMultiplicacao(), null);
            pnlCheckBoxes.add(getRdoDivisao(), null);
            btgOperacoes = new ButtonGroup();
            btgOperacoes.add(getRdoAdicao());
            btgOperacoes.add(getRdoSubtracao());
            btgOperacoes.add(getRdoMultiplicacao());
            btgOperacoes.add(getRdoDivisao());
        }
        return pnlCheckBoxes;
    }

    /**
     * This method initializes rdoAdicao
     * 
     * @return javax.swing.JRadioButton
     */
    private JRadioButton getRdoAdicao() {
        if (rdoAdicao == null) {
            rdoAdicao = new JRadioButton();
            rdoAdicao.setText("+ Adição");
        }
        return rdoAdicao;
    }

    /**
     * This method initializes rdoSubtracao
     * 
     * @return javax.swing.JRadioButton
     */
    private JRadioButton getRdoSubtracao() {
        if (rdoSubtracao == null) {
            rdoSubtracao = new JRadioButton();
            rdoSubtracao.setText("- Subtração");
        }
        return rdoSubtracao;
    }

    /**
     * This method initializes rdoMultiplicacao
     * 
     * @return javax.swing.JRadioButton
     */
    private JRadioButton getRdoMultiplicacao() {
        if (rdoMultiplicacao == null) {
            rdoMultiplicacao = new JRadioButton();
            rdoMultiplicacao.setText("X Multiplicação");
        }
        return rdoMultiplicacao;
    }

    /**
     * This method initializes rdoDivisao
     * 
     * @return javax.swing.JRadioButton
     */
    private JRadioButton getRdoDivisao() {
        if (rdoDivisao == null) {
            rdoDivisao = new JRadioButton();
            rdoDivisao.setText("/ Divisão");
        }
        return rdoDivisao;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                CalculadoraFrame thisClass = new CalculadoraFrame();
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                thisClass.setVisible(true);
            }
        });
    }

    /**
     * This is the default constructor
     */
    public CalculadoraFrame() {
        super();
        initialize();
    }

    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() {
        this.setSize(300, 200);
        this.setContentPane(getJContentPane());
        this.setTitle("Calculadora");
    }

    /**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(new BorderLayout());
            jContentPane.add(getPnlEntrada(), BorderLayout.NORTH);
            jContentPane.add(getPnlCheckBoxes(), BorderLayout.CENTER);
            jContentPane.add(getPnlBotoes(), BorderLayout.SOUTH);
        }
        return jContentPane;
    }

}


E

Note que para Radio Buttons funcionarem direito, é preciso SEMPRE associá-los a um ButtonGroup.

Criado 29 de dezembro de 2010
Ultima resposta 29 de dez. de 2010
Respostas 3
Participantes 2