Foro sobre Java SE > TypeCast
int ID = Integer.valueOf(JcomboBox.getSelectedItem()).intValue();
no no funciona!!!! :c y no entiendo porque... me dice Objet cannot be converted to String, abject cannot be converted to Int
No entiendo que es lo que pasa porque a los otros jcombox si les funciona y a este no le fuciona, es porque toma valores nuemricos de 1 o 2 ciifras????
Publica el código con el que llenas ese combo, incluyendo su modelo y los datos.
Es realmente difícil tratar siempre de responder a cuestiones de código, sin verlo.
A partir de JavaSE 1.7 los JComboBox pueden declararse con genéricos.
Si vas a usar enteros en el modelo, puedes declarar el JComboBox<Integer> lo mismo que el modelo DefaultComboBoxModel<Integer> y evitas los typecast y las conversiones.
int ID = Integer.parseInt(JcomboBox.getSelectedItem().toString());
int ID = Integer.parseInt((String)JcomboBox.getSelectedItem());
Hay infinitas posibilidades...
Cuales has probado?
miren e utilizado las siguientes formas pero no me funciona y de verdad no se que hacer:
int IDp= (Integer) AdminKPI.CBidproyAK.getSelectedItem();
int IDk= (Integer) AdminKPI.CBidkpiAK.getSelectedItem();
CB = COMBOBOX
AK= INDENTIFICADOR
Lo que no entiendo es porque la primera sentencia no me genera error pero la segunda si el error dice :
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
lo intente con Integer.paseInt() pero el compilador me la subraya en rojo, como si estubiera errado, lo mismo si uso el valueof()
int IDk= Integer.valueOf(AdminKPI.CBidkpiAK.getSelectedItem()) ; genera error
e tratado de varias maneras pero no entiendo el porque la primera sentencia si funciona y la otra no, si son exactamente iguales.
LES AGRADEZCO MUCHO SU AYUDA Y SU TIEMPO!!!
¿Qué parte de esta frase de más arriba "Publica el código con el que llenas ese combo, incluyendo su modelo y los datos." no has entendido?
Sin saber qué datos estás usando, ¿cómo vamos a saber la causa del error?
No indicas si esto también te da "error":
int IDk= Integer.valueOf(AdminKPI.CBidkpiAK.getSelectedItem().toString());
o
int IDk= Integer.valueOf((String)AdminKPI.CBidkpiAK.getSelectedItem());
De hecho, la primera es imposible que te genere un error de compilación..., así que sigo sin saber que es lo que has probado...
Deberías aprender a debuggear y logear aplicaciones para detectar fallos. En este caso sería interesante saber qué está devolviendo la sentencia:
AdminKPI.CBidkpiAK.getSelectedItem()
Igual se te está escapando algún "espacio en blanco" y lo que te devuelve no es un Integer, si no un String con valor " 9901".
Aunque no sea la mejor manera de hacerlo, ejecuta esta línea antes de la que te da el error...
System.out.println("getSelectedItem devuelve:" + AdminKPI.CBidkpiAK.getSelectedItem());
Y revisa qué aparece en la consola.
SE LOS AGRADEZO MUCHOOO... LO LOGRE HACER CON LA SIGUIENTE SENTENCIA
int IDk= Integer.valueOf((String)AdminKPI.CBidkpiAK.getSelectedItem());
Y FUNCIONA PERFECTAMENTE, aunque me gustaria saber el porque de la transformacion a string y luego a int, ya que la primera sentencia no nesesitaba toda esa linea de codigo ni el doble casteo, porque esta si????? Me gusta indagar y aprender mas si alguien me lo explica se los agradeceria mucho
El problema es que en una combo estas metiendo datos Integer y el a otra datos String, aunque en ambas tu intencion sea almacenar datos numericos.
Si hubieses hecho caso a choces y nos hubieses puesto el codigo de creacion y poblacion de dichas combos, todo seria mas claro y no tendriamos que utilizar nuestras bolas de cristal.
Un saludo
Es tan sencillo como ésto:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultComboBoxModel;
/**
<p>
@author Carlos Hoces
*/
public class NewJFrame extends javax.swing.JFrame {
/** Creates new form NewJFrame */
public NewJFrame() {
initComponents();
DefaultComboBoxModel<String> model1 = new DefaultComboBoxModel<>(new String[]{"uno", "dos", "tres"});
jComboBox1.setModel(model1);
DefaultComboBoxModel<Integer> model2 = new DefaultComboBoxModel<>(new Integer[]{1, 2, 3});
jComboBox2.setModel(model2);
jComboBox1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String item = (String) jComboBox1.getSelectedItem();
System.out.println("item seleccionado en combo1: " + item);
}
});
jComboBox2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Integer item = (Integer) jComboBox2.getSelectedItem();
System.out.println("item seleccionado en combo2: " + item);
}
});
}
/** This method is called from within the constructor to
initialize the form.
WARNING: Do NOT modify this code. The content of this method is
always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jComboBox1 = new javax.swing.JComboBox<>();
jComboBox2 = new javax.swing.JComboBox<>();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
pack();
}// </editor-fold>
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JComboBox<String> jComboBox1;
private javax.swing.JComboBox<Integer> jComboBox2;
// End of variables declaration
}
Alguien pudiese ayudarme con este problema????? estoy usando netbeans para hacer el desarrollo de un software en java, y e estado usando sentencias de codigo para hacer un (Casteo) de diferentes tipos de dato, estoy haciendo una sentencia asi:
int ID = (Integer) JcomboBox.getSelectedItem();
esta sentencia habia funcionado bn para todos los jcomboBox a los cuales les extraia su selectedItem, normalmente estos selecteditem eran numeros de 4 digitos ejm 5001
o 9901, ahora, estoy tratando de hacer el mismo procedimiento pero con un jcomboBox, que tiene como selectedItem un numero de 1 digito o maximo de 2
ejm 1, 5, 11, 12, pero no se porque me arroja un error que dice: String cannot be converted to Integer, la verdad es que cuando coloco el codigo el compilador no me genera error si no hasta cuando el programa esta en funcionamiento, y no entiendo el porque me dice algo como eso si lo que trato de hacer es convertir a un INTEGER ese valor. ALGUIEN PODRIA AYUDARME LO AGRADECERIA MUCHO!!!!!!