Foros del Web » Programación para mayores de 30 ;) » Java »

JComboBox y sus eventos problema

Estas en el tema de JComboBox y sus eventos problema en el foro de Java en Foros del Web. Hola buenas. estoy tratando de hacer una aplicacion para conversion de temperatura(centrigrado,farenheit,kelvin); bien pero tengo una duda y es que no se como usar los ...
  #1 (permalink)  
Antiguo 21/03/2011, 11:04
 
Fecha de Ingreso: enero-2011
Ubicación: Venezuela, Táchira
Mensajes: 96
Antigüedad: 13 años, 10 meses
Puntos: 10
JComboBox y sus eventos problema

Hola buenas. estoy tratando de hacer una aplicacion para conversion de temperatura(centrigrado,farenheit,kelvin);
bien pero tengo una duda y es que no se como usar los eventos de los JComboBox para enviarlos al metodo y convertir la temperatura
el codigo que tengo es este:

Código PHP:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class 
NewMain extends JFrame{

    private 
JLabel eDe,eA,cant,salida;
    private 
JTextField cantidad;
    private 
JComboBox de,a;
    private 
JButton convertirsalir;
    private 
String nombres[] = {"Centigrados","Farenheit","Kelvin"};

    public 
NewMain(){
        
super("Conversor de temperatura.");

        
Container contenedor getContentPane();
        
contenedor.setLayout(new FlowLayout());

        
eDe = new JLabel("De:     ");
        
eA = new JLabel("       A:");
        
JPanel panel1 = new JPanel();
        
panel1.add(eDe);
        
panel1.add(eA);
        
contenedor.add(panel1);
        
//Combo Boxes
        
de = new JComboBox(nombres);
        
de.setMaximumRowCount(3);
        
de.addItemListener(
            new 
ItemListener(){
                public 
void itemStateChanged(ItemEvent e){
                    if(
e.getStateChange() == ItemEvent.SELECTED){
                        
//No se que hacer aqui
                    
}
                }
            }
        );

        
= new JComboBox(nombres);
        
a.setMaximumRowCount(3);
        
a.addItemListener(
            new 
ItemListener(){
                public 
void itemStateChanged(ItemEvent e){
                    if(
e.getStateChange() == ItemEvent.SELECTED){
                        
//No se que hacer aqui
                    
}
                }
            }
        );
        
JPanel panel2 = new JPanel();
        
panel2.add(de);
        
panel2.add(a);
        
contenedor.add(panel2);
        
//Etiqueta y Campo de texto para ingresar la cantidad
        
cant = new JLabel("Cantidad:");
        
cantidad = new JTextField(10);
        
JPanel panel3 = new JPanel();
        
panel3.add(cant);
        
panel3.add(cantidad);
        
contenedor.add(panel3);
        
//Botones
        
convertir = new JButton("Convertir");
        
convertir.addActionListener(
            new 
ActionListener(){
                public 
void actionPerformed(ActionEvent e){
                    
convertir();
                }
            }
        );
        
salir = new JButton("Salir");
        
salir.addActionListener(
            new 
ActionListener(){
                public 
void actionPerformed(ActionEvent e){
                    
System.exit(0);
                }
            }
        );
        
JPanel panel4 = new JPanel();
        
panel4.add(convertir);
        
panel4.add(salir);
        
contenedor.add(panel4);
        
//Etiqueta para mostrar la salida
        
salida = new JLabel("Salida");
        
JPanel panel5 = new JPanel();
        
panel5.add(salida);
        
contenedor.add(panel5);

        
setSize(250,250);
        
setVisible(true);
        
setResizable(false);
    }

    public 
void convertir(){


    }

    public static 
void main(String[] args) {
        
NewMain conversor = new NewMain();
        
conversor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

por favor si alguien me guiara.. a y otra cosita alguien me puede decir como hacer para que la ultima etiqueta la que dice "Salida" aparezca debajo de los botones? esa es otra duda que tengo ya intente con setLocation pero nada :/ ojala me ayuden gracias de ante mano
  #2 (permalink)  
Antiguo 21/03/2011, 12:16
Avatar de sivadmp  
Fecha de Ingreso: febrero-2011
Ubicación: La Paz - Bolivia
Mensajes: 293
Antigüedad: 13 años, 9 meses
Puntos: 20
Respuesta: JComboBox y sus eventos problema

tienes que utilizar el metodo addActionListener
__________________
agradecer no cuesta nada
Entre más información proporciones más fácil será ayudarte, y asi evitar adivinar el problema con el que cuentas.
  #3 (permalink)  
Antiguo 21/03/2011, 12:18
 
Fecha de Ingreso: enero-2011
Ubicación: Venezuela, Táchira
Mensajes: 96
Antigüedad: 13 años, 10 meses
Puntos: 10
Respuesta: JComboBox y sus eventos problema

Hola buenas. estoy tratando de hacer una aplicacion para conversion de temperatura(centrigrado,farenheit,kelvin);
bien pero tengo una duda y es que no se como usar los eventos de los JComboBox , lo que pasa es que debo seleccionar un item de cada combobox y luego si seleccionar los que quiero para que funcione como puedo arreglar eso?? aqui el codigo que llevo:

Código PHP:
//Ejercicios 13.12 y 13.13 Capitulo 13
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class 
NewMain extends JFrame{

    private 
JLabel eDe,eA,cant,salida;
    private 
JTextField cantidad;
    private 
JComboBox de,a;
    private 
JButton convertirsalir;
    private 
String DE=""A="";

    public 
NewMain(){
        
super("Conversor de temperatura.");

        
Container contenedor getContentPane();
        
contenedor.setLayout(new FlowLayout());

        
eDe = new JLabel("De:     ");
        
eA = new JLabel("       A:");
        
JPanel panel1 = new JPanel();
        
panel1.add(eDe);
        
panel1.add(eA);
        
contenedor.add(panel1);
        
//Combo Boxes
        
de = new JComboBox();
        
de.addItem("Centigrados");
        
de.addItem("Fahrenheit");
        
de.addItem("Kelvin");
        
de.setMaximumRowCount(3);
        
de.addItemListener(
            new 
ItemListener(){
                public 
void itemStateChanged(ItemEvent e){
                    if(
e.getStateChange() == ItemEvent.SELECTED){
                        
DE de.getSelectedItem().toString();
                    }
                }
            }
        );

        
= new JComboBox();
        
a.addItem("Centigrados");
        
a.addItem("Fahrenheit");
        
a.addItem("Kelvin");
        
a.setMaximumRowCount(3);
        
a.addItemListener(
            new 
ItemListener(){
                public 
void itemStateChanged(ItemEvent e){
                    if(
e.getStateChange() == ItemEvent.SELECTED){
                        
a.getSelectedItem().toString();
                    }
                }
            }
        );
        
JPanel panel2 = new JPanel();
        
panel2.add(de);
        
panel2.add(a);
        
contenedor.add(panel2);
        
//Etiqueta y Campo de texto para ingresar la cantidad
        
cant = new JLabel("Cantidad:");
        
cantidad = new JTextField(10);
        
JPanel panel3 = new JPanel();
        
panel3.add(cant);
        
panel3.add(cantidad);
        
contenedor.add(panel3);
        
//Botones
        
convertir = new JButton("Convertir");
        
convertir.addActionListener(
            new 
ActionListener(){
                public 
void actionPerformed(ActionEvent e){
                    
convertir(Integer.parseInt(cantidad.getText()), DEA);
                }
            }
        );
        
salir = new JButton("Salir");
        
salir.addActionListener(
            new 
ActionListener(){
                public 
void actionPerformed(ActionEvent e){
                    
System.exit(0);
                }
            }
        );
        
JPanel panel4 = new JPanel();
        
panel4.add(convertir);
        
panel4.add(salir);
        
contenedor.add(panel4);
        
//Etiqueta para mostrar la salida
        
salida = new JLabel("");
        
JPanel panel5 = new JPanel();
        
panel5.add(salida);
        
contenedor.add(panel5);

        
setSize(250,250);
        
setVisible(true);
        
setResizable(false);
    }

    public 
void convertir(int cantiString deString a){
        
int numero canti;
        
String desde de;
        
String hacia a;
        
double resultado 0;
        
        
//De centrigrados a centigrados
        
if(desde.equals("Centigrados") && hacia.equals("Centigrados")){
            
resultado numero;
            
salida.setText("Resultado: " resultado);
            
//cantidad.setText("");
        
}
        
//De grados centigrados a grados farenheit
        
if(desde.equals("Centigrados") && hacia.equals("Fahrenheit")){
            
resultado 9*(numero/5)+32;
            
salida.setText("Resultado: " resultado);
            
//cantidad.setText("");
        
}
        
//De grados centigrados a grados kelvin
        
if(desde.equals("Centigrados") && hacia.equals("Kelvin")){
            
resultado = (numero 273.15);
            
salida.setText("Resultado: " resultado);
            
//cantidad.setText("");
        
}
        
////////////////////////////////////////////////////////////////////////
        //De farenheit a centigrados
        
if(desde.equals("Fahrenheit") && hacia.equals("Centigrados")){
            
resultado = (5/9)*(numero-32);
            
salida.setText("Resultado: " resultado);
            
//cantidad.setText("");
        
}
        
//De farenheit a farenheit
        
if(desde.equals("Fahrenheit") && hacia.equals("Fahrenheit")){
            
resultado numero;
            
salida.setText("Resultado: " resultado);
            
//cantidad.setText("");
        
}
        
//De farenheit a kelvin
        
if(desde.equals("Fahrenheit") && hacia.equals("Kelvin")){
            
resultado = (numero+459.67)/(9/5);
            
salida.setText("Resultado: " resultado);
            
//cantidad.setText("");
        
}
        
////////////////////////////////////////////////////////////////////////
        //De kelvin a centigrados
        
if(desde.equals("Kelvin") && hacia.equals("Centigrados")){
            
resultado = (numero 273.15);
            
salida.setText("Resultado: " resultado);
            
//cantidad.setText("");
        
}
        
//De kelvin a farenheit
        
if(desde.equals("Kelvin") && hacia.equals("Fahrenheit")){
            
resultado = (numero-273)*(9/5)+32;
            
salida.setText("Resultado: " resultado);
            
//cantidad.setText("");
        
}
        
//De kelvin a kelvin
        
if(desde.equals("Kelvin") && hacia.equals("Kelvin")){
            
resultado numero;
            
salida.setText("Resultado: " resultado);
            
//cantidad.setText("");
        
}
    }

    public static 
void main(String[] args) {
        
NewMain conversor = new NewMain();
        
conversor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

ademas nose si la calculadora de google estara mal o algo pero he intentado varias formulas para llevar de fahrenheit a kelvin y viceversa y me da diferente a los resultados de google si alguien me puede ayudar con eso por favor gracias de ante mano
  #4 (permalink)  
Antiguo 21/03/2011, 19:26
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 9 meses
Puntos: 15
Respuesta: JComboBox y sus eventos problema

En el actionPerformed del boton convertir, antes de llamar a convertir(Integer.parseInt(cantidad.getText()), DE, A); debes traerte los items seleccionados en ambos ComboBox.

Esto es lo que deberias hacer con el actionPerformed:

Código:
String DE = de.getSelectedItem();
String A = a.getSelectedItem();
convertir(Integer.parseInt(cantidad.getText()), DE, A);
Eso te deberia funcionar. Un saludo!
  #5 (permalink)  
Antiguo 21/03/2011, 19:33
 
Fecha de Ingreso: enero-2011
Ubicación: Venezuela, Táchira
Mensajes: 96
Antigüedad: 13 años, 10 meses
Puntos: 10
Respuesta: JComboBox y sus eventos problema

amigo javiDP gracias x responder, pero si te fijas en el 2do codigo que puse donde ya logre hacer lo que queria ya me habia traido los items seleccionados. osea de.getSelectedItem();

lo que no se es porque debo escojer un item en cada combobox y luego si escojer al que kiero para que funcione :/ es decir debo seleccionar primero un item (como para activar el evento) y luego seleccionar el item q de vdd kiero usar para q funcione sino no sirve :/ espero me entiendan sino prueben el 2do codigo!
  #6 (permalink)  
Antiguo 21/03/2011, 19:57
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 9 meses
Puntos: 15
Respuesta: JComboBox y sus eventos problema

No vi el segundo codigo.

El problema que tienes es que no hace falta que hagas esto:

Código:
de.setMaximumRowCount(3);
        de.addItemListener(
            new ItemListener(){
                public void itemStateChanged(ItemEvent e){
                    if(e.getStateChange() == ItemEvent.SELECTED){
                        DE = de.getSelectedItem().toString();
                    }
                }
            }
        );
ni esto:

Código:
a.setMaximumRowCount(3);
        a.addItemListener(
            new ItemListener(){
                public void itemStateChanged(ItemEvent e){
                    if(e.getStateChange() == ItemEvent.SELECTED){
                        A = a.getSelectedItem().toString();
                    }
                }
            }
        );
Ya que no necesitas un itemlistener para nada, pues solo vas a hacer los calculos cuando le des al boton convertir, no antes. Aparte tampoco necesitas el maximumrowcount.

Elimina esas 2 partes de tu codigo e implementa en el actionPerfomed lo que te puse antes, ya veras como te funciona bien. Un saludo!
  #7 (permalink)  
Antiguo 21/03/2011, 20:09
 
Fecha de Ingreso: enero-2011
Ubicación: Venezuela, Táchira
Mensajes: 96
Antigüedad: 13 años, 10 meses
Puntos: 10
Respuesta: JComboBox y sus eventos problema

Wow muchas gracias javi funciono perfecto! jeje pero aun tengo un problema con las formulas , algunas conversiones de fahrenheit a kelvin y viceversa no estan bien... estoy usando las formulas de Wikipedia.. podrias ayudarme con eso? te lo agaredeceria mucho.. aki la aplicacion funcionando:

Código PHP:
Ver original
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.awt.event.ItemEvent;
  6. import java.awt.event.ItemListener;
  7. public class NewMain extends JFrame{
  8.  
  9.     private JLabel eDe,eA,cant,salida;
  10.     private JTextField cantidad;
  11.     private JComboBox de,a;
  12.     private JButton convertir, salir;
  13.     private String DE="", A="";
  14.  
  15.     public NewMain(){
  16.         super("Conversor de temperatura.");
  17.  
  18.         Container contenedor = getContentPane();
  19.         contenedor.setLayout(new FlowLayout());
  20.  
  21.         eDe = new JLabel("De:     ");
  22.         eA = new JLabel("       A:");
  23.         JPanel panel1 = new JPanel();
  24.         panel1.add(eDe);
  25.         panel1.add(eA);
  26.         contenedor.add(panel1);
  27.         //Combo Boxes
  28.         de = new JComboBox();
  29.         de.addItem("Centigrados");
  30.         de.addItem("Fahrenheit");
  31.         de.addItem("Kelvin");
  32.         de.setMaximumRowCount(3);
  33.        
  34.         a = new JComboBox();
  35.         a.addItem("Centigrados");
  36.         a.addItem("Fahrenheit");
  37.         a.addItem("Kelvin");
  38.         a.setMaximumRowCount(3);
  39.        
  40.         JPanel panel2 = new JPanel();
  41.         panel2.add(de);
  42.         panel2.add(a);
  43.         contenedor.add(panel2);
  44.         //Etiqueta y Campo de texto para ingresar la cantidad
  45.         cant = new JLabel("Cantidad:");
  46.         cantidad = new JTextField(10);
  47.         JPanel panel3 = new JPanel();
  48.         panel3.add(cant);
  49.         panel3.add(cantidad);
  50.         contenedor.add(panel3);
  51.         //Botones
  52.         convertir = new JButton("Convertir");
  53.         convertir.addActionListener(
  54.             new ActionListener(){
  55.                 public void actionPerformed(ActionEvent e){
  56.                     String DE = de.getSelectedItem().toString();
  57.                     String A = a.getSelectedItem().toString();
  58.                     convertir(Integer.parseInt(cantidad.getText()), DE, A);
  59.                 }
  60.             }
  61.         );
  62.         salir = new JButton("Salir");
  63.         salir.addActionListener(
  64.             new ActionListener(){
  65.                 public void actionPerformed(ActionEvent e){
  66.                     System.exit(0);
  67.                 }
  68.             }
  69.         );
  70.         JPanel panel4 = new JPanel();
  71.         panel4.add(convertir);
  72.         panel4.add(salir);
  73.         contenedor.add(panel4);
  74.         //Etiqueta para mostrar la salida
  75.         salida = new JLabel("");
  76.         JPanel panel5 = new JPanel();
  77.         panel5.add(salida);
  78.         contenedor.add(panel5);
  79.  
  80.         setSize(250,250);
  81.         setVisible(true);
  82.         setResizable(false);
  83.     }
  84.  
  85.     public void convertir(int canti, String de, String a){
  86.         int numero = canti;
  87.         String desde = de;
  88.         String hacia = a;
  89.         double resultado = 0;
  90.        
  91.         //De centrigrados a centigrados
  92.         if(desde.equals("Centigrados") && hacia.equals("Centigrados")){
  93.             resultado = numero;
  94.             salida.setText("Resultado: " + resultado + " centigrados");
  95.             //cantidad.setText("");
  96.         }
  97.         //De grados centigrados a grados farenheit
  98.         if(desde.equals("Centigrados") && hacia.equals("Fahrenheit")){
  99.             resultado = 9*(numero/5)+32;
  100.             salida.setText("Resultado: " + resultado);
  101.             //cantidad.setText("");
  102.         }
  103.         //De grados centigrados a grados kelvin
  104.         if(desde.equals("Centigrados") && hacia.equals("Kelvin")){
  105.             resultado = (numero + 273.15);
  106.             salida.setText("Resultado: " + resultado);
  107.             //cantidad.setText("");
  108.         }
  109.         ////////////////////////////////////////////////////////////////////////
  110.         //De farenheit a centigrados
  111.         if(desde.equals("Fahrenheit") && hacia.equals("Centigrados")){
  112.             resultado = (5/9)*(numero-32);
  113.             salida.setText("Resultado: " + resultado);
  114.             //cantidad.setText("");
  115.         }
  116.         //De farenheit a farenheit
  117.         if(desde.equals("Fahrenheit") && hacia.equals("Fahrenheit")){
  118.             resultado = numero;
  119.             salida.setText("Resultado: " + resultado);
  120.             //cantidad.setText("");
  121.         }
  122.         //De farenheit a kelvin
  123.         if(desde.equals("Fahrenheit") && hacia.equals("Kelvin")){
  124.             resultado = (numero+459.67)/(9/5);
  125.             salida.setText("Resultado: " + resultado);
  126.             //cantidad.setText("");
  127.         }
  128.         ////////////////////////////////////////////////////////////////////////
  129.         //De kelvin a centigrados
  130.         if(desde.equals("Kelvin") && hacia.equals("Centigrados")){
  131.             resultado = (numero - 273.15);
  132.             salida.setText("Resultado: " + resultado);
  133.             //cantidad.setText("");
  134.         }
  135.         //De kelvin a farenheit
  136.         if(desde.equals("Kelvin") && hacia.equals("Fahrenheit")){
  137.             resultado = (numero-273)*(9/5)+32;
  138.             salida.setText("Resultado: " + resultado);
  139.             //cantidad.setText("");
  140.         }
  141.         //De kelvin a kelvin
  142.         if(desde.equals("Kelvin") && hacia.equals("Kelvin")){
  143.             resultado = numero;
  144.             salida.setText("Resultado: " + resultado);
  145.             //cantidad.setText("");
  146.         }
  147.     }
  148.  
  149.     public static void main(String[] args) {
  150.         NewMain conversor = new NewMain();
  151.         conversor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  152.     }
  153. }
  #8 (permalink)  
Antiguo 21/03/2011, 20:30
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 9 meses
Puntos: 15
Respuesta: JComboBox y sus eventos problema

Código:
        //De centrigrados a centigrados
        if(desde.equals("Centigrados") && hacia.equals("Centigrados")){
            resultado = numero;
            salida.setText("Resultado: " + resultado + " centigrados");
            //cantidad.setText("");
        }
        //De grados centigrados a grados farenheit
        if(desde.equals("Centigrados") && hacia.equals("Fahrenheit")){
            resultado = numero+32;
            salida.setText("Resultado: " + resultado);
            //cantidad.setText("");
        }
        //De grados centigrados a grados kelvin
        if(desde.equals("Centigrados") && hacia.equals("Kelvin")){
            resultado = numero+273.15;
            salida.setText("Resultado: " + resultado);
            //cantidad.setText("");
        }
        ////////////////////////////////////////////////////////////////////////
        //De farenheit a centigrados
        if(desde.equals("Fahrenheit") && hacia.equals("Centigrados")){
            resultado = numero-32;
            salida.setText("Resultado: " + resultado);
            //cantidad.setText("");
        }
        //De farenheit a farenheit
        if(desde.equals("Fahrenheit") && hacia.equals("Fahrenheit")){
            resultado = numero;
            salida.setText("Resultado: " + resultado);
            //cantidad.setText("");
        }
        //De farenheit a kelvin
        if(desde.equals("Fahrenheit") && hacia.equals("Kelvin")){
            resultado = numero+241.15;
            salida.setText("Resultado: " + resultado);
            //cantidad.setText("");
        }
        ////////////////////////////////////////////////////////////////////////
        //De kelvin a centigrados
        if(desde.equals("Kelvin") && hacia.equals("Centigrados")){
            resultado = numero-273.15;
            salida.setText("Resultado: " + resultado);
            //cantidad.setText("");
        }
        //De kelvin a farenheit
        if(desde.equals("Kelvin") && hacia.equals("Fahrenheit")){
            resultado = numero-241.15;
            salida.setText("Resultado: " + resultado);
            //cantidad.setText("");
        }
        //De kelvin a kelvin
        if(desde.equals("Kelvin") && hacia.equals("Kelvin")){
            resultado = numero;
            salida.setText("Resultado: " + resultado);
            //cantidad.setText("");
        }
Ahi estan las formulas corregidas.

Un saludo!

Etiquetas: eventos, jcombobox
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:23.