martes, 15 de abril de 2008

JCOMBOBOX

JCOMBOBOX

( lista desplegable con entrada) Elemento GUI que permite al usuario escribir sobre este o seleccionar una opción de una lista existente de opciones. Un ejemplo de combo box son las barras de direcciones usadas en los navegadores web.Los combo box son una combinación entre un cuadro de texto y un menú desplegable.Existe una variante de combo box llamada combutcon.


Los comboboxes tienen tres propiedades esenciales: text, value y selectedIndex. La primera es el valor que todos vemos dentro del combo en la página. El segundo es el valor que ponemos como propiedad en el. Finalmente, él selectedIndex nos devuelve el número del que está seleccionado.
http://www.terra.com.ar/canales/tecnologia/10/10983.html

Utilizar la clase JComboBox

Para utilizar la clase JComboBox en Java, hay que seguir una serie de pasos en los cuales se definirán variables y métodos de esta clase como se muestra en la siguiente figura:





Aquí el JComboBox, está mostrando una lista en la que se dan varias opciones predeterminadas del programa, y que para cada opción hay una acción al escogerla.
Para utilizar la clase JComboBox en un programa de Java, es necesario primero adicionar lo siguiente:

String[] flechaStrings = {"imagen 1", "imagen 2", "imagen 3", "imagen 4", "imagen 5"};
Aquí primero se definen los valores que se van a tomar, en este caso los carros, para aceptar la variable de tipo String, y que va a ser util al momento de que se tomen estos valores en lista adicionandola a la clase JComboBox, ya veremos como.
En las siguientes instrucciones se darán pasos para el adicionamiento de variables a la clase

JComboBox.
public clase() {
JComboBox lista = new JComboBox(flechaStrings);
lista.setSelectedIndex(0);
Aquí estamos primero tomando la clase para que dentro de esa clase, defina una variable lista y la tome como como new JComboBox, y que además adquiera los valores de (flechaStrings); que ya habíamos definido anteriormente.
los JComboBox son muy parecidos a las Listas, excepto que estos también permiten la introducción de los datos, las maneras para crear son muy similares a las de JList:
new JComboBox();
new JComboBox(Object[] datos);
new JComboBox(Vector datos);
Lo métodos son:
Valor de Retorno

Nombre del Método
void
addItem(Object item)
Agrega un elemento al combo
Object
getSelectedItem()
Retorna el valor seleccionado.
int
getSelectedIndex()
Obtiene el índice seleccioando.
void
setEditable(boolean tipo)
Determina si sólo mostrara los valores (false) o si se
pueden escribir nuevos valores (true)

Y al igual que que JList, tiene un Listener que es: ItemListener que sólo implementa un método: public void itemStateChanged(ItemEvent e) que se realiza cuando se cambia a un item.
El registro del Listener se realiza con el método addItemListener de la clase JComboBox



Ejemplo de un JComboBox dependiente de otro

Es bastante habitual en nuestras aplicaciones que las posibles opciones de un JComboBox dependan del valor seleccionado previamente en otro JComboBox.
Vamos a ver aquí un ejemplo tonto de cómo podemos implementar esto.
Primero rellenamos el primer JComboBox, por ejemplo, con dos opciones: "letras" y "números"
combo1 = new JComboBox();
combo1.addItem("letras");
combo1.addItem("numeros");
Ahora tenemos que añadirle algo para enterarnos cuando el usuario selecciona algo y rellenar adecuadamente el segundo JComboBox
// Se añade un listener para enterarnos del cambio de seleccion
combo1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
rellenaCombo2((String) combo1.getSelectedItem());
}
// Se rellenan los valores de combo2 iniciales.
rellenaCombo2 ((String) combo1.getSelectedItem());
});
El método rellenaCombo2() puede tener algo como esto
private void rellenaCombo2(String seleccionEnCombo1) {
// Se borran los valores previos
combo2.removeAllItems();
// Se rellena según la opción en combo1
if (seleccionEnCombo1.equals("letras")) {
combo2.addItem("A");
combo2.addItem("B");
combo2.addItem("C");
} else if (seleccionEnCombo1.equals("numeros")) {
combo2.addItem("1");
combo2.addItem("2");
combo2.addItem("3");
}

Es necesario borrar previamente todos los items que tuviera el combo2. Luego se añaden los que correspondan según la opción seleccionada en el combo1.
Por si a alguien le sirve de algo, aquí va un programa tonto completo con todo esto

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class PruebaCombos {
private JComboBox combo1;
private JComboBox combo2;
public static void main(String[] args) {
new PruebaCombos();
}
public PruebaCombos() {
JFrame v = new JFrame();
v.getContentPane().setLayout(new FlowLayout());
combo1 = new JComboBox();
rellenaCombo1();
combo1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
rellenaCombo2((String) combo1.getSelectedItem());
}
});
combo2 = new JComboBox();
rellenaCombo2((String) combo1.getSelectedItem());
v.getContentPane().add(combo1);
v.getContentPane().add(combo2);
v.pack();
v.setVisible(true);
v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
private void rellenaCombo1() {
combo1.addItem("letras");
combo1.addItem("numeros");
}
private void rellenaCombo2(String seleccionEnCombo1) {
combo2.removeAllItems();
if (seleccionEnCombo1.equals("letras")) {
combo2.addItem("A");
combo2.addItem("B");
combo2.addItem("C");
} else if (seleccionEnCombo1.equals("numeros")) {
combo2.addItem("1");
combo2.addItem("2");
combo2.addItem("3");
}
}
}
http://www.chuidiang.com/chuwiki/index.php?title=JComboBox_dependiente_de_otro_JComboBox

Modelo dinámico

Un modelo estático es muy útil cuando sólo queremos que el usuario seleccione una de entre varias opciones predefinidas, pero algunas veces queremos que las opciones se lean de un archivo o se agreguen desde una base de datos. Para poder hacer esto debemos utilizar un modelo dinámico.
Antes de comenzar es preciso entender que dentro del combo box se están guardando objetos, y que estos objetos tienen todos sus métodos y atributos. Es decir que podemos guardar un objeto completo dentro del combo box y una vez que el usuario lo seleccione tendremos acceso a mucha más información que la simple cadena de texto que se muestra en el combo box. Esto es importante siempre tenerlo en cuenta porque nos va a facilitar mucho la programación.
Primero vamos a crear una nueva interfaz gráfica como la que se muestra a continuación:
Agregar valores
Ahora vamos a crear el objeto que va a ir guardado en el combo box, crea una clase User con el siguiente código:
public class User {
public String name;
public String favoriteFood;

public User(String name, String favoriteFood) {
this.name = name;
this.favoriteFood = favoriteFood;
}

public String getFavoriteFood() {
return favoriteFood;
}

public void setFavoriteFood(String favoriteFood) {
this.favoriteFood = favoriteFood;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return this.name;
}
}
Ahora vamos a crear algunos objetos de la clase User dentro de la ventana principal, en la interfaz gráfica. En el constructor de la ventana principal agrega el siguiente código (después de la llamada a initComponents()):
User magus = new User("Magus", "Pastel azteca");
User juan = new User("Juan", "Quesadillas");
Ahora vamos a agregar estos objetos a nuestro combo box con las siguientes instrucciones:
cboShapes.removeAllItems();
cboShapes.addItem(magus);
cboShapes.addItem(juan);
Todo junto queda así:
public MainFrame() {
initComponents();

User magus = new User("Magus", "Pastel azteca");
User juan = new User("Juan", "Quesadillas");

cboShapes.removeAllItems();
cboShapes.addItem(magus);
cboShapes.addItem(juan);
}
Obteniendo el valor elegido



Pero ahora tenemos un problema, como el modelo es dinámico (y podríamos haber obtenido los datos de un archivo, de internet o de cualquier otro lugar) entonces no sabemos los índices y no podemos utilizar un switch para realizar las acciones como lo hicimos la vez anterior, y es aquí donde entra la magia de los objetos, porque podemos obtener el objeto seleccionado y tomar decisiones en base a este objeto, en el botón de saludar vamos a poner el siguiente código:
private void btnGreetActionPerformed(java.awt.event.ActionEvent evt) {
User user = (User) cboUsers.getSelectedItem();
JOptionPane .showMessageDialog(this,
"Bienvenido " + user.getName() + ".\n " +
"A mi también me gusta el " + user.getFavoriteFood());
}
Como podemos observar estamos obteniendo el objeto que seleccionó el usuario y mostramos el mensaje dependiendo de los parámetros de este usuario.
http://www.magusoft.net/neotrials/pages/java/jcombobox.html


Para manejar el contenido de un Combobox debemos asignar una funcion, con el metodo setChangeHandler
Código:
conte_array = [
{label:"Tmeister", data:"http://www.tmeister.net"},
{label:"Kadazuro", data:"http://www.kadazuro.com"},
{label:"Alesys", data:"http://www.alesys.net"},
{label:"Flashla", data:"http://www.flashla.com"}];
my_cb.setDataProvider(conte_array);
my_cb.setChangeHandler("asigna");
asigna = function (component) {
var_para_enviar = component.getSelectedItem().data;
trace(var_para_enviar);
};
aqui ya asignamos el Data del Item Seleccionado del Combobox a la variable var_para_enviar, Ahora en tu objeto LoadVars asigna un valor para esta variable
Código:
mi_loadVars = new LoadVars()
mi_loadVars.variable = var_para_enviar
bla bla bla...
http://www.forosdelweb.com/f16/combobox-185499/

11 comentarios:

yicell paz dijo...

HOLA, ESTE BLOGG ESTA MUY COMPLETO TIENE TODA LA INFORMACION SOLICITADA Y TIENE LAS SUFICIENTES IMAGENES PARA TENER UN POCO MAS DE IDEA.

Gladys Marlen Martinez dijo...

HOLA ME PARECE QUE LA INFORMACION DEL BLOGG ESTA COMPLETA MANEJAS BIEN LAS IMAGENES.
LA LETRA ES MUY PEQUEÑA.
CHAO

zulay sanchez dijo...

hola me parece q la informacion es completa

ISABEL CARVAJAL dijo...

HOLA,EL BLOG ME PARECE MUY COMPLETO Y CON BUENAS IMAGENES, PERO EN ALGUNAS PARTES LA INFORMACION ESTA UN POCO CONFUSA.

Pilar Guzmán dijo...

Hola Lainformación esta completa y muy bien explicada por medio de imagenes.

william dijo...

hello,tienes bastante informacion, esta bien explicado y las imagenes te ayudan

Solecito dijo...

HOLA TU BLOG CONTIENE BUENA INFORMACION,LAS IMAGENES TE AYUDAN, LASTIMA QUE SEAN TAN PEQUEÑAS. SOLO TE FALTA CITAR UN EJEMPLO CLARO DE COMO SE HACE LA CONEXION DE ACCES CON JAVA.

Anónimo dijo...

Hola, tu blog es muy interesante ademàs la informacion que contiene es clara.

Lady

MARISA FORERO dijo...

hola la informacion es clara pero faltan imagenes

jlynk by Luis dijo...

aizh mucha teoria... :D amiga recomendable que lean libros :D
eres Ingeniera de Sistemas?
mi nombre es Luis Cesar Rojas Chávez.
estudiante de Ing de Sistemas 4to ciclo ya lleve lo que es Programacion Orientada a Objetos, Estructura, Base de datos algo... :D ..
muy bueno el contenido que pone.

Disculpe: una pregunta... es sobre eventos.Evetos - Caret - CaretUpdate.
lo que tengo es una lista de productos. es ahy donde entra el evento crear un campo de texto y que este al ingresar una letra me empieze a mostrar lo que tengo almacenado en Archivos productos.
y a su vez q se vayan desapareciendo los demas que no corresponden a la letra ingresada.

estoy que lo haga con Diseño utilizando las paletas del Netbeans.
.... como puedo hacer? un ejemplo?

jlynk by Luis dijo...

mi Gmail es : jlynkalgoritmo@gmail.com
jlynkalgoritmos@gmail.com
luisnewton1@hotmail.com.