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.
0 comentarios:
Publicar un comentario