Java - Problema evento en JComboBox

 
Vista:

Problema evento en JComboBox

Publicado por Abel Vilches (8 intervenciones) el 13/07/2009 11:41:50
Hola, que tal. Estoy creando un formulario en Netbeans 6.7 y tengo un problema con el que estoy perdido.
Resulta que tengo un JComboBox que relleno dinámicamente des de base de datos. Le he asignado un actionListener para que al selccionar algún elemento del combo, actualize otra lista. Solo aparecer el formulario, entra en el actionListener definido y actualiza la lista correctamente, pero si selecciono otro elemento de la lista, al llamar el getSelecteditem del combo, me devuelve un valor vacio. He provado utilizando el evento StateChanged también, indicando dentro que si el estado del evento es SELECTED, me rellene la lista. El problema es que lanza el evento, ve que he seleccionado un elemento, me hace todo correctamente, però sin saber porquè vuelve a entrar en el StateChanged después como si hubiera lanzado otro evento y esa vez el getSelecteditem vuelve a devolver vacio.

No consigo ver porquè sucede esto y por una cosa tan sencilla estoy perdiendo un tiempo precioso.

Espero que alguien sepa que sucede.

Muchas gracias por anticipado.
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

RE:Problema evento en JComboBox

Publicado por Brian Palma (22 intervenciones) el 14/07/2009 06:05:39
Mira este emplo que tenia por ahi, basicamente lo que hace es que si se selecciona un provincia, carga sus cantones y si se selecciona X canton le carga los distritos, espero que te sirva, cuando lo hice tuve agregarle los ActionListener despues del initcomponent porque sino me escuchaban antes y no me servia. En fin espero que el codigo t ayude en algo
salu2

LA SEGUNDA PARTE VA EN OTRO MENSAJE ES QUE NO ENTRO TODO

/*
* FrameBuscarDistrito.java
*
* Created on 22 de mayo de 2008, 06:19 PM
*/

package oasis.action.distrito;

import java.awt.Color;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import oasis.bean.CantonBean;
import oasis.bean.DistritoBean;
import oasis.bean.ProvinciaBean;
import oasis.business.CantonBusiness;
import oasis.business.DistritoBusiness;
import oasis.business.ProvinciaBusiness;
import oasis.common.Main;

/**
*
* @author Palma
*/
public class FrameBuscarDistrito extends javax.swing.JInternalFrame {

private Connection conexion;
private Main parent;
public FrameBuscarDistrito(Connection conexion, Main parent) {
initComponents();
this.conexion = conexion;
this.parent = parent;
jPanel1.setBackground(new Color(parent.getColorBackground()));
jPanel2.setBackground(new Color(parent.getColorBackground()));
Icon icono = new ImageIcon("logo.png");
this.setFrameIcon(icono);
ProvinciaBusiness provinciaBusiness = new ProvinciaBusiness(conexion);
ArrayList<ProvinciaBean> provincias = new ArrayList<ProvinciaBean>();
try {
provincias = provinciaBusiness.getProvincias();
for(int i = 0; i < provincias.size(); i++){
jcbProvincias.addItem((Object) provincias.get(i).getNombreProvincia());
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "Error de Base de Datos", "Error", 0);
}

CantonBusiness cantonBusiness = new CantonBusiness(conexion);
ArrayList<CantonBean> cantones = new ArrayList<CantonBean>();
CantonBean cantonBean = new CantonBean();
cantonBean.setIdProvincia(provincias.get(0).getIdProvincia());
try {
cantones = cantonBusiness.getCantonesPorIdProvincia(cantonBean);
if(cantones.isEmpty() == false){
for(int i = 0; i < cantones.size(); i++){
jcbCantones.addItem((Object) cantones.get(i).getNombreCanton());
}
}else{
JOptionPane.showMessageDialog(this, "La Provincia de " + provincias.get(0).getNombreProvincia() + " no contiene Cantones", "Información", 2);
}

} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "Error de Base de Datos", "Error", 0);
}

DistritoBusiness distritoBusiness = new DistritoBusiness(conexion);
ArrayList<DistritoBean> distritos = new ArrayList<DistritoBean>();
DistritoBean distritoBean = new DistritoBean();
distritoBean.setIdCanton(cantones.get(0).getIdCanton());
try {
distritos = distritoBusiness.getDistritosPorIdCanton(distritoBean);
if(distritos.isEmpty() == false){
for(int i = 0; i < distritos.size(); i++){
jcbDistritos.addItem((Object) distritos.get(i).getNombreDistrito());
}
}else{
JOptionPane.showMessageDialog(this, "El Cantón de " + cantones.get(0).getNombreCanton() + " no contiene Distritos", "Información", 2);
}

} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "Error de Base de Datos", "Error", 0);
}

jcbProvincias.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
jcbProvinciasActionPerformed(evt);
}
});

jcbCantones.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
jcbCantonesActionPerformed(evt);
}
});
}

private void jcbProvinciasActionPerformed(java.awt.event.ActionEvent evt) {
jcbCantones.removeAllItems();
ProvinciaBean provinciaBean = new ProvinciaBean();
provinciaBean.setNombreProvincia(jcbProvincias.getSelectedItem().toString());
ProvinciaBusiness provinciaBusiness = new ProvinciaBusiness(conexion);
ProvinciaBean provinciaBeanResultado = new ProvinciaBean();
try {
provinciaBeanResultado = provinciaBusiness.getProvinciaPorNombre(provinciaBean);
CantonBean cantonBean = new CantonBean();
cantonBean.setIdProvincia(provinciaBeanResultado.getIdProvincia());
CantonBusiness cantonBusiness = new CantonBusiness(conexion);
ArrayList<CantonBean> cantones = new ArrayList<CantonBean>();
cantones = cantonBusiness.getCantonesPorIdProvincia(cantonBean);
if(cantones.isEmpty() == false){
for(int i = 0; i < cantones.size(); i++){
jcbCantones.addItem((Object) cantones.get(i).getNombreCanton());
}
}else{
jcbDistritos.removeAllItems();
JOptionPane.showMessageDialog(this, "La Provincia de " + provinciaBeanResultado.getNombreProvincia() + " no contiene Cantones", "Información", 2);
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "Error de Base de Datos", "Error", 0);
}

}

private void jcbCantonesActionPerformed(java.awt.event.ActionEvent evt) {
if(jcbCantones.getSelectedItem() != null){
jcbDistritos.removeAllItems();
CantonBean cantonBean = new CantonBean();
cantonBean.setNombreCanton(jcbCantones.getSelectedItem().toString());
CantonBusiness cantonBusiness = new CantonBusiness(conexion);
CantonBean cantonBeanResultado = new CantonBean();
try {
cantonBeanResultado = cantonBusiness.getCantonPorNombre(cantonBean);
DistritoBean distritoBean = new DistritoBean();
distritoBean.setIdCanton(cantonBeanResultado.getIdCanton());
ArrayList<DistritoBean> distritos = new ArrayList<DistritoBean>();
DistritoBusiness distritoBusiness = new DistritoBusiness(conexion);
distritos = distritoBusiness.getDistritosPorIdCanton(distritoBean);
if(distritos.isEmpty() == false){
for(int i = 0; i < distritos.size(); i++){
jcbDistritos.addItem((Object) distritos.get(i).getNombreDistrito());
}
}else{
JOptionPane.showMessageDialog(this, "El Cantón de " + cantonBeanResultado.getNombreCanton() + " no contiene Distritos", "Información", 2);
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "Error de Base de Datos", "Error", 0);
}
}

}
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

RE:Problema evento en JComboBox

Publicado por Brian Palma (22 intervenciones) el 14/07/2009 06:06:08
/** 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.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jbBuscar = new javax.swing.JButton();
jbCancelar = new javax.swing.JButton();
jlCantones = new javax.swing.JLabel();
jcbCantones = new javax.swing.JComboBox();
jlNombreDistrito = new javax.swing.JLabel();
jcbDistritos = new javax.swing.JComboBox();
jlProvincia = new javax.swing.JLabel();
jcbProvincias = new javax.swing.JComboBox();

setTitle("Buscar un Distrito");

jPanel1.setBackground(new java.awt.Color(0, 0, 0));

jPanel2.setBackground(new java.awt.Color(0, 0, 0));
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 255, 255)), "Seleccione el Distrito a Modificar", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 12), new java.awt.Color(255, 255, 255))); // NOI18N
jPanel2.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

jbBuscar.setText("Buscar");
jbBuscar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jbBuscarActionPerformed(evt);
}
});
jPanel2.add(jbBuscar, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 150, 80, -1));

jbCancelar.setText("Cancelar");
jbCancelar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jbCancelarActionPerformed(evt);
}
});
jPanel2.add(jbCancelar, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, 150, -1, -1));

jlCantones.setForeground(new java.awt.Color(255, 255, 255));
jlCantones.setText("Canton:");
jPanel2.add(jlCantones, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 70, -1, -1));

jPanel2.add(jcbCantones, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 70, 123, -1));

jlNombreDistrito.setForeground(new java.awt.Color(255, 255, 255));
jlNombreDistrito.setText("Distrito:");
jPanel2.add(jlNombreDistrito, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 110, -1, -1));

jPanel2.add(jcbDistritos, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 110, 123, -1));

jlProvincia.setForeground(new java.awt.Color(255, 255, 255));
jlProvincia.setText("Provincia:");
jPanel2.add(jlProvincia, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 30, -1, -1));

jPanel2.add(jcbProvincias, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 30, 123, -1));

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(11, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 192, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(15, Short.MAX_VALUE))
);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);

pack();
}// </editor-fold>

private void jbBuscarActionPerformed(java.awt.event.ActionEvent evt) {
if((jcbDistritos.getSelectedItem() == null) == false){
DistritoBean distritoBean = new DistritoBean();
distritoBean.setNombreDistrito(jcbDistritos.getSelectedItem().toString());
DistritoBusiness distritoBusiness = new DistritoBusiness(conexion);
DistritoBean distritoBeanResultado = new DistritoBean();
try {
distritoBeanResultado = distritoBusiness.getDistritoPorNombre(distritoBean);
FrameModificarDistrito modificarDistrito = new FrameModificarDistrito(conexion, distritoBeanResultado,parent);
modificarDistrito.setClosable(true);
parent.add(modificarDistrito);
parent.centrarInternal(modificarDistrito);
modificarDistrito.setVisible(true);
String mensaje = "Se efectúo una búsqueda de un Distrito con nombre " + distritoBeanResultado.getNombreDistrito() + " en la Base de Datos";
String filtroAuditoria = "Otros";
parent.auditoria(mensaje, filtroAuditoria);
this.dispose();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "Error de Base de Datos", "Error", 0);
}
}else{
JOptionPane.showMessageDialog(this, "Actualmente no se encuentra seleccionado ningún Distrito, verifique e intente de nuevo.", "Información", 2);
}


}

private void jbCancelarActionPerformed(java.awt.event.ActionEvent evt) {
this.dispose();
}



// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JButton jbBuscar;
private javax.swing.JButton jbCancelar;
private javax.swing.JComboBox jcbCantones;
private javax.swing.JComboBox jcbDistritos;
private javax.swing.JComboBox jcbProvincias;
private javax.swing.JLabel jlCantones;
private javax.swing.JLabel jlNombreDistrito;
private javax.swing.JLabel jlProvincia;
// End of variables declaration

}
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