Java - Mostrar un Enum en un JComboBox

   
Vista:
Imágen de perfil de Charly

Mostrar un Enum en un JComboBox

Publicado por Charly cdum77@hotmail.com (56 intervenciones) el 27/05/2016 17:53:09
Hola, estoy haciendo una interfaz gráfica para crear y mover libros y salas en una biblioteca con varios botones y tres jlist.
En la clase libro hay dos string nombre y autor, y un enumerado Género.
Lo que quiero es poder mostrar ese enumerado en un JComboBox para que el usuario elija el que quiera.
El método para crear un libro es donde estoy haciendo todo, en una clase llamada InterfazGrafica, que es el JFrame.
Lo he intentado con el values y con otros métodos pero no se como pasarlo al combo.
Si me pudieran ayudar se lo agradeceria.
Gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Mostrar un Enum en un JComboBox

Publicado por Marco (16 intervenciones) el 27/05/2016 20:53:34
Hola.
Te dejo un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public enum ItemType {
 
    Primero("Elije el primero"), Segundo("Elejido el segundo"), Tercero("El útltimo");
    private final String display;
 
    private ItemType(String s) {
        display = s;
    }
 
    @Override
    public String toString() {
        return display;
    }
}


en la interfaz grafica
creas tu JComboBox


1
2
3
4
5
private JComboBox<ItemType> jComboBox1;
jComboBox1 = new javax.swing.JComboBox<>();
//Aqui lo llenas con los datos del enum
//Con un DefaultComboModel haciendo referencia a los valores
jComboBox1.setModel(new DefaultComboBoxModel(ItemType.values()));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Charly

Mostrar un Enum en un JComboBox

Publicado por Charly (56 intervenciones) el 27/05/2016 21:35:01
Muchas gracias Marco.
Me ha servido muy bien tu codigo para leer el enum en el jlist, pero me surge otro problema.
Cuando creo el objeto libro, ¿cómo le paso el contenido de la elección del usuario en ese combobox?
Acaso es con la ultima linea del codigo que has puesto?
A continuación te paso el método que he escrito para crear un libro:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void anadirLibro(){
	ArrayList<Libro> arrLib=new ArrayList();
	JTextField txtTitulo=new JTextField();
	JTextField txtAutor=new JTextField();
	JComboBox tipoGenero=new JComboBox();
	tipoGenero=new javax.swing.JComboBox<>();
	tipoGenero.setModel(new DefaultComboBoxModel(Genero.values()));
	Object[] campos={"Titulo",txtTitulo,"Autor",txtAutor,"Genero",tipoGenero};
	Libro libro=null;
	if(JOptionPane.showConfirmDialog(this,campos,"Añadir Libro",JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE)==JOptionPane.OK_OPTION){
		libro=new Libro(txtTitulo.getText(),txtAutor.getText(),tipoGenero."¿COMO PONGO AQUI EL GENERO SELECCIONADO EN EL COMBOBOX?");
		arrLib.add(libro);
	}else{
		if(!Libros.isSelectionEmpty()){
			arrLib.remove(Libros.getSelectedIndex());
			arrLib.add(Libros.getSelectedIndex(),libro);
		}
	}
	mostrarListaLibros();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrar un Enum en un JComboBox

Publicado por Marco (16 intervenciones) el 27/05/2016 23:21:56
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//necesitas un String para almacenar el valor del combobox
private String obtieneGenero;
public void anadirLibro(){
ArrayList<Libro> arrLib=new ArrayList();
JTextField txtTitulo=new JTextField();
JTextField txtAutor=new JTextField();
JComboBox tipoGenero=new JComboBox();
tipoGenero=new javax.swing.JComboBox<>();
tipoGenero.setModel(new DefaultComboBoxModel(Genero.values()));
//Aqui obtenemos el valor seleccionado en el combo
obtieneGenero = (String) tipoGenero.getSelectedItem();
Object[] campos={"Titulo",txtTitulo,"Autor",txtAutor,"Genero",tipoGenero};
Libro libro=null;
if(JOptionPane.showConfirmDialog(this,campos,"Añadir Libro",JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE)==JOptionPane.OK_OPTION){
libro=new Libro(txtTitulo.getText(),txtAutor.getText(),obtieneGenero "Aqui ya va el valor del campo genero");
arrLib.add(libro);
}else{
if(!Libros.isSelectionEmpty()){
arrLib.remove(Libros.getSelectedIndex());
arrLib.add(Libros.getSelectedIndex(),libro);
}
}
mostrarListaLibros();
}
 
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Charly

Mostrar un Enum en un JComboBox

Publicado por Charly (56 intervenciones) el 28/05/2016 09:12:44
Pues solo me cabe felicitarte y darte las gracias Marco, porque me has ayudado y hecho que me salga esa parte del ejercicio.
Yo por mi parte doy la pregunta por cerrada.
Ahora voy a seguir con el resto de la aplicación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Charly

Mostrar un Enum en un JComboBox

Publicado por Charly (56 intervenciones) el 28/05/2016 12:20:33
Hola Marco. He ejecutado el código y me da error en la linea de:
obtieneGenero=(String)tipoGenero.getSelectedItem();
Me sale la excepción: ClassCastException
He buscado por internet y significa que no puedo convertir un elemento de una clase a otra que no sea subclase de la primera, es decir, de enum a String no se puede.
Antes de empezar este ejercicio hice otros más fáciles, pero el enumerado lo pasabamos así:
1
2
3
4
5
6
enum Genero{
     AVENTURAS,NOVELA,POESIA,CIENCIAFICCION;
     static Genero getGenero(String elemento){
          return Enum.valueOf(Genero.class,elemento);
     }
}
Lo he probado pero tampoco funciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Charly

Mostrar un Enum en un JComboBox

Publicado por Charly (56 intervenciones) el 28/05/2016 12:59:03
Bueno ya lo he arreglado.
Había que hacerlo como lo hice la primera vez, pero cambiando el elemento.
De todas formas muchas gracias por intentar ayudarme en lo posible.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrar un Enum en un JComboBox

Publicado por Marco (16 intervenciones) el 28/05/2016 17:09:09
Hola.
Se me paso escribir al momento cuando obtienes el valor de jcombobox se necesitaba colocarle el metodo toString() al final.

Disculpa.



No se como lo solucionastes, pero te paso como yo lo hago.

1
2
3
4
5
6
7
8
9
10
11
//le colocamos una accion al jcombobox
jComboBox1.addActionListener(new ActionListener() {
 
	@Override
	public void actionPerformed(ActionEvent e) {
		//Aqui es donde me falto colocarle el metodo toString();
		String selecto = cb.getSelectedItem().toString();
		//Lo coloco en una etiqueta para comprobar efectivamente que es un String
		select.setText(selecto);
	}
});

Saludos espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Charly

Mostrar un Enum en un JComboBox

Publicado por Charly (56 intervenciones) el 28/05/2016 17:26:44
Gracias de todos modos, pero ya me funciona esa parte.
Ahora el problema está más adelante.
Tengo un jlist en el que me tienen que aparecer los libros y otro con las salas que creo (que los tengo en un arraylist).
Al arraylist si que van, pero no me aparecen en el jlist después de cerrar la ventanita de crearlos.
Te paso los métodos que tengo para rellenar el jlist mediante el arraylist.
Explicación variables:
arrLibros es el arraylist de libros, Libros es el jlist, Libro es la clase donde tengo todos los atributos y arrLib es un array que creo para almacenar los libros del jlist (pero no se para qué, si no se usa):
1
2
3
4
5
6
7
8
9
10
11
public void pasarArrayLibros(ArrayList<Libro> arrLib){
    arrLibros=arrLib;
    Libros.setModel(listaDefaultLibros);
    mostrarListaLibros();
}
public void mostrarListaLibros(){
    listaDefaultLibros.clear();
    for(Libro l:arrLibros){
        listaDefaultLibros.addElement(l.getTitulo()+"-"+l.getAutor());
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar