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.


Acciones

Información

4 respuestas

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

Deja un comentario