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.




muy bueno, y la parte 2?
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 .
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 ^^
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
gracias, me servira ya que ando haciendo una pequeña aplicacion, y pues tengo que usar un buen de combobox, se agradece.
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
Gracias
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
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);
}
}