Listener combobox e textfield

5 respostas
T

Olá!
estou fazendo uma calculadora usando um combobox pra pegar o operador e um botão que começa pra calcular, porém tá dando esse erro:

"Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JButton cannot be cast to javax.swing.JComboBox
at ex3$Listener.actionPerformed(ex3.java:54)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6268)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6033)
at java.awt.Container.processEvent(Container.java:2045)
at java.awt.Component.dispatchEventImpl(Component.java:4629)
at java.awt.Container.dispatchEventImpl(Container.java:2103)
at java.awt.Component.dispatchEvent(Component.java:4455)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4633)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4297)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4227)
at java.awt.Container.dispatchEventImpl(Container.java:2089)
at java.awt.Window.dispatchEventImpl(Window.java:2517)
at java.awt.Component.dispatchEvent(Component.java:4455)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649)
at java.awt.EventQueue.access$000(EventQueue.java:96)
at java.awt.EventQueue$1.run(EventQueue.java:608)
at java.awt.EventQueue$1.run(EventQueue.java:606)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116)
at java.awt.EventQueue$2.run(EventQueue.java:622)
at java.awt.EventQueue$2.run(EventQueue.java:620)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:619)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)"

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


public class ex3 extends JFrame{
    
    private final JPanel panel;
    private JLabel label = new JLabel("=");
      private JLabel resposta = new JLabel("    0");
    private JTextField txt1 = new JTextField("",15);
    private JTextField txt2 = new JTextField("",15);
    String[] opStrings = { "Soma", "Subtrai", "Multiplica", "Divide" };
    JComboBox opList = new JComboBox(opStrings);
    private Button calcular = new Button("Calcular");
    
    GridBagConstraints cons = new GridBagConstraints();
GridBagLayout layout = new GridBagLayout();
char op;
    boolean ok =false;
    ex3(){
        JFrame f = new JFrame("Editor de texto");
        f.setSize(600, 300);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        f.add(panel=new JPanel(layout), BorderLayout.CENTER);
        f.setVisible(true);
      
        cons.fill = GridBagConstraints.BOTH;
          
        cons.gridy = 0; cons.gridx = 0;
        panel.add(txt1, cons);
        cons.gridy = 0; cons.gridx = 1;
        panel.add(opList, cons);
        cons.gridy = 0; cons.gridx = 2;
        panel.add(txt2, cons);
        cons.gridy = 0; cons.gridx = 3;
        panel.add(label, cons);
        cons.gridy = 0; cons.gridx = 4;
        panel.add(resposta, cons);
        cons.gridwidth = 4; 
        cons.gridy = 1; cons.gridx = 0;
        panel.add(calcular, cons);
        pack();
        Listener l = new Listener();
        opList.addActionListener(l);
        calcular.addActionListener(l);
        
}
    class Listener implements ActionListener {
    	  public void actionPerformed(ActionEvent e) {
    		  Button jtxt = (Button) e.getSource();
    	        JComboBox comboBox = (JComboBox) e.getSource();
         
                Object selected = comboBox.getSelectedItem();
               
                if (jtxt == calcular)     
         	   {
         		   ok = true;
         	   } 
                
    	   if(ok){
    	   if (selected == "Soma")  
    	    {
    	    op = '+'; 
    	    calcula();
    	    }
    	   else
    	    if (selected == "Subtrai")
    	    {op = '-';    calcula();
    	    }
    	    else
    	    if (selected == "Multiplica")
    	    {op = '*';    calcula();
    	        
    	    }
    	    else
    	    if (selected == "Divide")
    	    {op = '/';    calcula();
    	   
    	    }
    	  
    	   } 
    	       
    	    }
    	  
    	    public void calcula() {  
    	        
    	        try {  
    	              System.out.println("op ");
    	           Double v1 = new Double(txt1.getText());  
    	           Double v2 = new Double(txt2.getText());  
    	          
    	           double resultado;  
    	          
    	           switch (op) {  
    	             
    	              case '+': { resultado = v1.doubleValue() + v2.doubleValue(); break; }  
    	              case '-': { resultado = v1.doubleValue() - v2.doubleValue(); break; }  
    	              case '/': { resultado = v1.doubleValue() / v2.doubleValue(); break; }  
    	              case '*': { resultado = v1.doubleValue() * v2.doubleValue(); break; }  
    	              default:{ resultado = 0; break; }  
    	           }  
    	             
    	              resposta.setText(String.valueOf(resultado)); 
    	        }  
    	        catch (Exception exp) {  
    	           JOptionPane.showMessageDialog(null, "Verifique os números digitados.");  
    	        }  
    	       
    	  }  	  
    	  
  }
    
    
    
   public static void main(String[] args)
    { 
        new ex3();
        
    }
}

já tentei várias coisas, mas nada dá certo, alguém sabe como consertar isso?

5 Respostas

thiagof

Opa!!!

essa é facil hen!!!

é so ler a sua exception

"Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: javax.swing.JButton cannot be cast to javax.swing.JComboBox
at ex3$Listener.actionPerformed(ex3.java:54) "

Temos um problema de casting (conversão de tipos) na linha 54 :wink:

vc ta tentando converter um javax.swing.JButton em um javax.swing.JComboBox !!! (não entendi o porque hehhe)
aquele e.getSource() da linha 54 te retorna um objeto JButton, o JComboBox vc vai ter que pegar de outra forma :frowning:

dá uma olhada lá, vai ver vc escreveu o código errado sem perceber

T

então até entendi ± q era isso… mas não sei o q fazer pra arrumar =/
acho q foi o primeiro exercício com listener pro combobox então não sabia como usar e tbm não achie nenhum exemplo com listener do combobox e textfield junto

d34d_d3v1l

cara…

o evento só tem UMA SOURCE (uma fonte) de cda vez…
Ou quem diaparou o evento foi o botao, ou foi o combo…

Olha o q vc ta fazendo:

Button jtxt = (Button) e.getSource();  
  JComboBox comboBox = (JComboBox) e.getSource();

Nao da pra fazer assim…
ou vc faz if pra descobrir qual a fonte,
ou vc cria um listener para cada componente.

abraz

Murad

Não precisa criar esse monte de Objeto.

e.getSource() == calcular
e
opList.getSelectedIndex() == 3

Testa ai.

abcs

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


public class ex3 extends JFrame{
    
    private final JPanel panel;
    private JLabel label = new JLabel("=");
      private JLabel resposta = new JLabel("    0");
    private JTextField txt1 = new JTextField("",15);
    private JTextField txt2 = new JTextField("",15);
    String[] opStrings = { "Soma", "Subtrai", "Multiplica", "Divide" };
    JComboBox opList = new JComboBox(opStrings);
    private Button calcular = new Button("Calcular");
    
    GridBagConstraints cons = new GridBagConstraints();
GridBagLayout layout = new GridBagLayout();
char op;
    boolean ok =false;
    ex3(){
        JFrame f = new JFrame("Editor de texto");
        f.setSize(600, 300);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        f.add(panel=new JPanel(layout), BorderLayout.CENTER);
        f.setVisible(true);
      
        cons.fill = GridBagConstraints.BOTH;
          
        cons.gridy = 0; cons.gridx = 0;
        panel.add(txt1, cons);
        cons.gridy = 0; cons.gridx = 1;
        panel.add(opList, cons);
        cons.gridy = 0; cons.gridx = 2;
        panel.add(txt2, cons);
        cons.gridy = 0; cons.gridx = 3;
        panel.add(label, cons);
        cons.gridy = 0; cons.gridx = 4;
        panel.add(resposta, cons);
        cons.gridwidth = 4; 
        cons.gridy = 1; cons.gridx = 0;
        panel.add(calcular, cons);
        pack();
        Listener l = new Listener();
        opList.addActionListener(l);
        calcular.addActionListener(l);
        
}
    class Listener implements ActionListener {
    	  public void actionPerformed(ActionEvent e) {
    		
    		  
    		  
    	   if (e.getSource() == calcular) {
    		   // Troca isso por um switch case
    		   if (opList.getSelectedIndex() == 0)    
               {  
               op = '+';   
               calcula();  
               }  
              else  
               if (opList.getSelectedIndex() == 1)  
               {op = '-';    calcula();  
               }  
               else  
               if (opList.getSelectedIndex() == 2)  
               {op = '*';    calcula();  
                     
               }  
               else  
               if (opList.getSelectedIndex() == 3)  
               {op = '/';    calcula();  
                
               }  
    		   
    		   
    		   
    	   }
    		  
    		  
    		  
    		  
    		  
    	    }
    	  
    	   } 
    	       
    	    
    	  
    	    public void calcula() {  
    	        
    	        try {  
    	              System.out.println("op ");
    	           Double v1 = new Double(txt1.getText());  
    	           Double v2 = new Double(txt2.getText());  
    	          
    	           double resultado;  
    	          
    	           switch (op) {  
    	             
    	              case '+': { resultado = v1.doubleValue() + v2.doubleValue(); break; }  
    	              case '-': { resultado = v1.doubleValue() - v2.doubleValue(); break; }  
    	              case '/': { resultado = v1.doubleValue() / v2.doubleValue(); break; }  
    	              case '*': { resultado = v1.doubleValue() * v2.doubleValue(); break; }  
    	              default:{ resultado = 0; break; }  
    	           }  
    	             
    	              resposta.setText(String.valueOf(resultado)); 
    	        }  
    	        catch (Exception exp) {  
    	           JOptionPane.showMessageDialog(null, "Verifique os números digitados.");  
    	        }  
    	       
    	  }  	  
    	  
  
    
    
    
   public static void main(String[] args)
    { 
        new ex3();
        
    }
}
T

vlw Murad !
deu certo =D

Criado 30 de abril de 2012
Ultima resposta 1 de mai. de 2012
Respostas 5
Participantes 4