Ajuda exercício com Caixa de Opção

Amigos, estou tentando resolver um exercício, onde o layout está pronto, apenas a programação dos botões está errada. Estou pesquisando bastante, mas não consigo de forma alguma resolver o exercício. Nele, deve-se digitar um valor, escolher entre Desconto ou juros, e em seguida escolher entre 10, 20 ou 30%. Não sei se estou errando nos if’s, mas já estou quase desistindo. Alguém conseguiria me ajudar?


    import java.awt.*;  
      
    import java.awt.event.*;  
      
    import javax.swing.*;  
      
    class Ex16 extends JFrame implements ItemListener {  
      
        JLabel rotulo1, rotulo2, rotulo3,rotulo4;  
        JTextField texto1, texto2;  
        JPanel painel1, painel2;  
        JRadioButton opcao1, opcao2, opcao3, opcao4, opcao5;  
        ButtonGroup opcoesdeRadio, opcoesdeRadio2;  
      
        float numero = 0, resposta = 0;  
      
        Color cordeFundo = new Color(150, 200, 250);  
      
        public static void main(String args[]) {  
      
            JFrame GUI = new Ex16();  
      
            GUI.setVisible(true);  
      
            GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
      
        }  
      
        Ex16() {  
      
            setTitle("GUI com Botões de Rádio ");  
      
            setSize(500, 150);  
            getContentPane().setBackground(cordeFundo);  
            setLayout(new FlowLayout(FlowLayout.CENTER));  
      
            rotulo1 = new JLabel("Digite o Valor:");  
            rotulo1.setForeground(Color.red);  
      
            rotulo2 = new JLabel("Porcentagem desse Valor:");  
            rotulo2.setForeground(Color.blue);  
      
            rotulo3 = new JLabel("Cálculo com:");  
      
            rotulo3.setForeground(Color.red);  
            
            rotulo4 = new JLabel("Valor final:");
            rotulo4.setForeground(Color.blue);
      
            texto1 = new JTextField(5);  
            texto2 = new JTextField(5);  
            texto2.setEditable(false);  
            texto2.setBackground(cordeFundo);  
            texto2.setForeground(Color.DARK_GRAY);  
            texto2.setFont(new Font("", Font.BOLD, 14));  
      
            painel1 = new JPanel();  
            painel2 = new JPanel();  
      
            opcao1 = new JRadioButton("10% do valor");  
            opcao1.setMnemonic(KeyEvent.VK_1);  
            opcao1.addItemListener(this);  
            opcao1.setBackground(cordeFundo);  
            opcao1.setForeground(Color.black);  
      
            opcao2 = new JRadioButton("20% do valor");  
            opcao2.setMnemonic(KeyEvent.VK_2);  
            opcao2.addItemListener(this);  
            opcao2.setBackground(cordeFundo);  
            opcao2.setForeground(Color.black);  
      
            opcao3 = new JRadioButton("30% do valor");  
            opcao3.setMnemonic(KeyEvent.VK_3);  
            opcao3.addItemListener(this);  
            opcao3.setBackground(cordeFundo);  
            opcao3.setForeground(Color.black);  
      
            opcao4 = new JRadioButton("Desconto");  
      
            opcao4.setMnemonic(KeyEvent.VK_4);  
      
            opcao4.addItemListener(this);  
      
            opcao4.setBackground(cordeFundo);  
      
            opcao4.setForeground(Color.black);  
      
            opcao5 = new JRadioButton("Juros");  
      
            opcao5.setMnemonic(KeyEvent.VK_5);  
      
            opcao5.addItemListener(this);  
      
            opcao5.setBackground(cordeFundo);  
      
            opcao5.setForeground(Color.black);  
      
            opcoesdeRadio = new ButtonGroup();  
      
            opcoesdeRadio2 = new ButtonGroup();  
      
            opcoesdeRadio.add(opcao1);  
            opcoesdeRadio.add(opcao2);  
            opcoesdeRadio.add(opcao3);  
      
            opcoesdeRadio2.add(opcao4);  
      
            opcoesdeRadio2.add(opcao5);  
      
            painel1.setLayout(new FlowLayout(FlowLayout.CENTER));  
            painel1.setBackground(cordeFundo);  
      
            painel2.setLayout(new GridLayout(2, 3));  
            painel2.setBackground(cordeFundo);  
      
            painel1.add(rotulo1);  
            painel1.add(texto1);  
      
            painel1.add(rotulo3);  
      
            painel1.add(opcao4);  
      
            painel1.add(opcao5);  
      
            painel2.add(opcao1);  
            
            painel2.add(opcao2);
            
            painel2.add(opcao3); 
            
            painel2.add(rotulo4);
            
            painel2.add(texto2); 
            
                  add(painel1);  
      
            add(painel2);  
        }  
      
        public void itemStateChanged(ItemEvent evento) {  
            if (texto1.getText().length() == 0) {  
                return;  
            }  
            try {  
                numero = Float.parseFloat(texto1.getText());  
                if (evento.getSource() == opcao4 && evento.getSource() == opcao1) {  
                    resposta = numero - (numero * 10) / 100;  
                }  
                if (evento.getSource() == opcao4 && evento.getSource() == opcao2) {  
                    resposta = numero - (numero * 20) / 100;  
                }  
                if (evento.getSource() == opcao4 && evento.getSource() == opcao3) {  
                    resposta = numero - (numero * 30) / 100;  
                }  
                if (evento.getSource() == opcao5 && evento.getSource() == opcao1) {  
                    resposta = numero + (numero * 10) / 100;  
                }  
                if (evento.getSource() == opcao5 && evento.getSource() == opcao2) {  
                    resposta = numero + (numero * 20) / 100;  
                }  
                if (evento.getSource() == opcao5 && evento.getSource() == opcao3) {  
                    resposta = numero + (numero * 30) / 100;  
                }  
            } catch (NumberFormatException erro) {  
                texto2.setText("Erro");  
                return;  
            }  
      
            texto2.setText(String.valueOf(resposta));  
      
        }  
    }  

Se eu trocar o bloco try pelo código abaixo, até funciona, mas descartando as opções de juros ou desconto…

 try {    
                numero = Float.parseFloat(texto1.getText());    
                            if (evento.getSource()==opcao1)
               
                resposta = (numero * 10)/100;
           
            if (evento.getSource()==opcao2)
              
                resposta = (numero * 20)/100;
            
            if(evento.getSource()==opcao3)
          
                resposta = (numero * 30)/100;       
        } 
if (evento.getSource() == opcao4 && evento.getSource() == opcao1)

sempre será false, veja

se o Source do evento for igual a opção 4 então logicamente ele é diferente da opção 1

é como dizer

if(1==1 && 1==2)

outro detalhe é o “==” para comprar objetos…

utilize o .equals();

veja se atende:

 if (opcao4.isSelected() && (evento.getSource().equals(opcao1) || evento.getSource().equals(opcao4)))

não testei mas veja se resolve

Amigo, muito obrigado pela ajuda! Realmente resolveu meu problema, o único porém é que se eu digitar o número e clicar em juros ou desconto, sem necessariamente clicar nos 10, 20 ou 30%, ele já está dando um valor no resultado final. Ou seja, ele já dá o valor antes de eu escolher a porcentagem. Mas muito obrigado cara, vou tentar resolver essa parte.

   public void itemStateChanged(ItemEvent evento) {
        if (texto1.getText().length() == 0) {
            return;
        }
        try {
            numero = Float.parseFloat(texto1.getText());
            if (opcao4.isSelected() && (evento.getSource().equals(opcao1) || evento.getSource().equals(opcao4))) {
                resposta = numero - (numero * 10) / 100;
            }
            if (opcao4.isSelected() && (evento.getSource().equals(opcao2) || evento.getSource().equals(opcao4))) {
                resposta = numero - (numero * 20) / 100;
            }
            if (opcao4.isSelected() && (evento.getSource().equals(opcao3) || evento.getSource().equals(opcao4))) {
                resposta = numero - (numero * 30) / 100;
            }
            if (opcao5.isSelected() && (evento.getSource().equals(opcao1) || evento.getSource().equals(opcao5))) {
                resposta = numero + (numero * 10) / 100;
            }
            if (opcao5.isSelected() && (evento.getSource().equals(opcao2) || evento.getSource().equals(opcao5))) {
                resposta = numero + (numero * 20) / 100;
            }
            if (opcao5.isSelected() && (evento.getSource().equals(opcao3) || evento.getSource().equals(opcao5))) {
                resposta = numero + (numero * 30) / 100;
            }
        } catch (NumberFormatException erro) {

            texto2.setText("Erro");

            return;
        }
        texto2.setText(String.valueOf(resposta));
}}
if (opcao4.isSelected() && opcao1.isSelected()) {  

acho que atende o problema de selecionar apenas ‘desconto’ e ele ja ir atribuindo valores, mas dai voce não vai trabalhar com o Source

ainda há maneiras mais bonitas de se fazer isso mas fica a dica.

Exercício resolvido. Agradeço pela ajuda, muito obrigado!