Aprendiendo con JComboBox… Parte 1

11 07 2008

holas la verdad q llevaba algunos dias q no posteaba, creanme q he tenido motivos fuertes, …jeje en fin creo q fuera de bromas, realizar una tesis, si q es comprometedor!…en verdad lo es!.

bien, en esta oportunidad seguire mostrandoles lo aprendido, Hoy escribire sobre el JComboBox.

JComboBox, es un componente de java q nos sirve para controlar la selecion del usuario final a un determinado conjunto de tipos, algo asi es la idea, ademas creoq eso la lo sabran…jeje

El ejericio q les mostrare, es una aplicacion q tiene 2 JComboBox, el cual el primer combo controla el contenido del segundo combo, es decir, si selecionas un elemento del primero, el segundo combo, mostrara el contenido respecto a dicha selecion.

Una ves entendido, la logica de la aplicacion, lo implementamos, LA VERDAD ES REALMENTE SENCILLO. Para este caso, tendremos 2(dos) clases WindowDemoCombo y ControlDemoCombo.

La primera clase(WindowDemoCombo), es la ventana(JFrame, JLabel, JComboBox… en fin todos los componentes q actuan en la ventana) q visualiza el usuario.

La segunda clase(ControlDemoCombo), es la clase q controla los eventos, en este caso la accion de selecion en el primer JComboBox.

WindowDemoCombo; Creamos los componentes swing, y CREAMOS un objeto de la clase q controlada sus eventos, en este caso;

ControlDemoCombo controlDemoCombo = new ControlDemoCombo(this);

Veamos q al momento de crearlo estamos pasando “this”, esto quiere decir q al momento de crear la clase q lo controlara, le pasaremos como argumento toda la ventana… es obvia la idea, le pasamos toda la ventana, para q asi pueda acceder a ella.

Aqui el fuente

/*Demostracion Aprendiendo con JComboBox por inforux.wordpress.com */
import javax.swing.*;
public class WindowDemoCombo extends javax.swing.JFrame {

    /** Creamos el constructor de la misma */
    public WindowDemoCombo() {
        initComponents();}

    private void initComponents() {
        jPanel1 = new JPanel();
        jLabel1 = new JLabel();
          jLabel2 = new JLabel();
        jLabel3 = new JLabel();
        jComboBox1 = new JComboBox(pais);//creamos el primer combo, y le pasamos un array de cadenas
        jComboBox1.setSelectedIndex(0);//por defecto quiero visualizar el primer item
        jComboBox2 = new JComboBox();//creamo el segundo combo, vacio
        jComboBox2.setEnabled(false);////por defecto q aparesca desabilidado

        setResizable(false);
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);
        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Aprendiendo con JComboBox"));
        jPanel1.setLayout(null);
        jLabel1.setText("Pais");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(30, 30, 50, 20);
        jPanel1.add(jComboBox1);
        jComboBox1.setBounds(100, 30, 150, 24);
        jPanel1.add(jComboBox2);
        jComboBox2.setBounds(100, 70, 150, 24);
        jLabel2.setText("Region");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(30, 70, 60, 20);
        getContentPane().add(jPanel1);
        jPanel1.setBounds(10, 50, 370, 110);
        jLabel3.setText("DEMO POR INFORUX");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(120, 20, 170, 20);
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-412)/2, (screenSize.height-213)/2, 412, 213);

        /*Creamos el objeto controlador, para manejar los eventos*/
        ControlDemoCombo controlDemoCombo = new ControlDemoCombo(this);//le pasamos como argumento esta misma ventana
        jComboBox1.addActionListener(controlDemoCombo);//agregamos escuchas
    }
    public static void main(String args[]) {
                new WindowDemoCombo().setVisible(true);}

    // Desclaramos las variables autilizar
    String [] regionArgentina={"Buenos Aires","Cordova","Santa Cruz"};//array del segundo combo
    String [] regionColombia={"Bogota","Cartagena","Cali"};//array del seguno combo
    String [] regionPeru={"Arequipa","Lima","Piura"};//array del segundo combo
    String [] pais={"Selecione Pais","Argentina","Colombia","Peru"};//array del primer combo
    public JComboBox jComboBox1;
    public JComboBox jComboBox2;
    public JLabel jLabel1;
    private JLabel jLabel2;
    private JLabel jLabel3;
    private JPanel jPanel1;
}

ControlDemoCombo: Es una clase controladora de todas las acciones q realize el usuario en la

ventana(WindoDemoCombo). en este caso, la clase implement de ActionListener, y declara una variable del tipo

WindowDemoCombo, este nos servira para recibir el valor “this”, enviado anteriormente.

    WindowDemoCombo frameDemoCombo;

La idea es preguntar si la accion viene del primer combo

    if (evento.getSource()==frameDemoCombo.jComboBox1)

luego, preguntar cual de los elementos ha hecho click, esto lo podemos hacer con el metodo getSelectedIndex(), este nos retorna el numero del indice seleciono.

     if (frameDemoCombo.jComboBox1.getSelectedIndex()==0)

despues de saber, cual esta selecionado solo nos queda llenar el segundo combo, no sin antes elimnar, todos los elementos posibles.

   frameDemoCombo.jComboBox2.removeAllItems();
   frameDemoCombo.jComboBox2.addItem(frameDemoCombo.regionArgentina[i]);

Aqui elfuente:

import java.awt.event.*;
public class ControlDemoCombo implements ActionListener{
    WindowDemoCombo frameDemoCombo;
    public ControlDemoCombo(WindowDemoCombo objeto){
        frameDemoCombo=objeto;}

    public void actionPerformed(ActionEvent evento)
    {
            if (evento.getSource()==frameDemoCombo.jComboBox1)//pregunta si el evento viene del primer combo
            {/*pregunta si viene del primer elemnto*/
                if (frameDemoCombo.jComboBox1.getSelectedIndex()==0){
                    frameDemoCombo.jComboBox2.removeAllItems();
                    frameDemoCombo.jComboBox2.setEnabled(false);}
            /*pregunta si viene del segundo elemnto*/
                if (frameDemoCombo.jComboBox1.getSelectedIndex()==1){
                    frameDemoCombo.jComboBox2.removeAllItems();
                    for (int i=0; i<frameDemoCombo.regionArgentina.length;i++)
                    frameDemoCombo.jComboBox2.addItem(frameDemoCombo.regionArgentina[i]);
                    frameDemoCombo.jComboBox2.setEnabled(true);}
        /*pregunta si viene del tercer elemnto*/
                if (frameDemoCombo.jComboBox1.getSelectedIndex()==2){
                    frameDemoCombo.jComboBox2.removeAllItems();
                    for (int i=0; i<frameDemoCombo.regionColombia.length;i++)
                    frameDemoCombo.jComboBox2.addItem(frameDemoCombo.regionColombia[i]);
                    frameDemoCombo.jComboBox2.setEnabled(true);}
        /*pregunta si viene del cuarto elemnto*/
                if (frameDemoCombo.jComboBox1.getSelectedIndex()==3){
                    frameDemoCombo.jComboBox2.removeAllItems();
                    for (int i=0; i<frameDemoCombo.regionPeru.length;i++)
                    frameDemoCombo.jComboBox2.addItem(frameDemoCombo.regionPeru[i]);
                    frameDemoCombo.jComboBox2.setEnabled(true);}
            }
    }
}

Y listo ahora , compilar (javac *.java) y Listo, al ejecutar (java WindowDemoCombo), debe aparecer esta pantalla:

Selecionamos y se activara el segundo combo, con sus respectivos valores del primero.

Funciona!, Espero les sea de utilidad.

Saludos.

About these ads

Acciones

Information

14 responses

15 07 2008
hector

muy bueno, y la parte 2?

27 12 2008
fio

bueno a decir verdad parece sencillo excepto por los eventos pero no seria mucho mejor si pones un enlace con la descarga de tu ejemplo para corregirnos
ya que a mi no me sale .

8 06 2009
Christian

Amigo esta buenismo el aporte ahora mismo intentare de hacer el programa y si tengo dudas vuelvo a entrar para escribirlas. Pero no creo al parecer esta bien explicado ^^

23 10 2009
luis

oie men tengo uan chamba del combox en java..
que no me sale..:S como hago para llenar un combobox
seleccionando otra opcion de otro combo box

10 11 2010
Hector

gracias, me servira ya que ando haciendo una pequeña aplicacion, y pues tengo que usar un buen de combobox, se agradece.

7 09 2011
alex

Que tal buen dia, esta muy bueno tu post. A mi lo que me gustaria hacer es lo mismo que tu hiciste pero que las ciudades y los paises estuvieran relacionadas en dos tablas creadas en una base de datos Sql Server. Una vez creadas, crear dos jcombobox en netbeans, que dependiendo del pais que seleccionaste del primer combo, te aparezca la ciudad en el segundo. Desgraciadamente he tenido errores y aun no lo he podido hacer….Tomare tu ejemplo para adaptarlo al mio, si tienes una idea de como hacerlo te lo agradecere, ya que yo apenas estoy aprendiendo java. Saludos

3 11 2011
Kiria

Gracias :D

12 12 2011
stefania

Necesitamos saber por que cuando creamos un objeto para que se valla a otra ventana dentro del evento del jComboBox no lo recibe??
Que hacemos

22 12 2011
CR7

Hola Este codigo sirve para cargar en 3 combos los que son el departamento, provincia y distrito desde una base de datos.
Los combos se llaman cboDepartamento, cboProvincia y cboDistrito. Cualquier interrogante contactarme a calixhh21@gmail.com ——Ahi les dejo el codigo. En realidad no esta en MVC porque yo tambien lo estoy aprendiendo, pero funciona.

private void cargarDepartamento(){
try {
conn = (Connection) Conexion.getConexion();
String sql = “select departamento from departamento”;
Statement st = (Statement) conn.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
cboDepartamento.addItem(rs.getString(1));
}
} catch (Exception ex) {
}
}
private void cargarProvincia(int id_departamento){
try {
conn = (Connection) Conexion.getConexion();
String sql = “select provincia from provincia where id_departamento = ‘”+id_departamento+”‘”;
Statement st = (Statement) conn.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
cboProvincia.addItem(rs.getString(1));
}
}catch (Exception ex) {
}
}
private void cargarDistrito(int id_provincia){
try {
conn = (Connection) Conexion.getConexion();
String sql = “select distrito from distrito where id_provincia = ‘”+id_provincia+”‘”;
Statement st = (Statement) conn.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
cboDistrito.addItem(rs.getString(1));
}
} catch (Exception ex) {
}
}

private void cboProvinciaActionPerformed(java.awt.event.ActionEvent evt) {
int id_provincia = 0;
if(cboDistrito.getSelectedItem()==null){
try {
conn = (Connection) Conexion.getConexion();
String sql = “select id_provincia from provincia where provincia = ‘”+cboProvincia.getSelectedItem().toString()+”‘”;
Statement st = (Statement) conn.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
id_provincia = Integer.parseInt(rs.getString(“id_provincia”));
}
} catch (Exception ex) {

}
cargarDistrito(id_provincia);
//debe llenar el combo en funcion al ID de la provincia no al index del combo

//cargarDistrito(cboProvincia.getSelectedIndex()+1);
}else{
cboDistrito.removeAllItems();
cargarDistrito(id_provincia);
//cargarDistrito(cboProvincia.getSelectedIndex()+1);
}
}

private void cboDepartamentoActionPerformed(java.awt.event.ActionEvent evt) {
int id_departamento = 0;
if(cboProvincia.getSelectedItem()==null){
try {
conn = (Connection) Conexion.getConexion();
String sql = “select id_departamento from departamento where departamento = ‘”+cboDepartamento.getSelectedItem().toString()+”‘”;
Statement st = (Statement) conn.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
id_departamento = Integer.parseInt(rs.getString(“id_departamento”));
}
} catch (Exception ex) {
}
cargarProvincia(id_departamento);
//cargarDistrito(cboProvincia.getSelectedIndex()+1);
}else{
cboProvincia.removeAllItems();
cargarProvincia(id_departamento);
//cargarDistrito(cboProvincia.getSelectedIndex()+1);
}
}

13 10 2012
fabian isidoro quino (@fabian_07isi)

pues vastante bueno porque no aces algunas combinaciones con otros botones seria bueno para entender mas adetalles como se elacionan estos y que funcion pueden acer….saludos

24 04 2013
Anónimo

hola esta muy bien pero yo necesito crear dos combobos pero los dos que ssean independientes del uno al otros por ejemplo seleccionar sector y luego el tipo del un inmuelbe por decir algo si me pueden colaborar les agradesco.

gracias si algo me puden contactar en lanthony1979@hotmail.es

11 07 2013
Anónimo

ola necesito saber como ordenar un combobox

29 08 2013
Anonimo

Muy buen aporte.. si pudieras hacer uno con optionbutton te lo agradeceria :)..

29 11 2013
miguel_lxc

y como seria con base de datos

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

A %d blogueros les gusta esto: