Foros del Web » Programación para mayores de 30 ;) » Java »

Menú Dinámico J2SE

Estas en el tema de Menú Dinámico J2SE en el foro de Java en Foros del Web. Hola a todos. Mi cuestión es la siguiente: Pretendo realizar un menú interactivo en un JTree con datos de una BD. Cada ítem de ese ...
  #1 (permalink)  
Antiguo 14/10/2011, 14:26
 
Fecha de Ingreso: junio-2011
Ubicación: Medellín
Mensajes: 12
Antigüedad: 12 años, 10 meses
Puntos: 0
Menú Dinámico J2SE

Hola a todos. Mi cuestión es la siguiente: Pretendo realizar un menú interactivo en un JTree con datos de una BD. Cada ítem de ese menú me cargará un panel en un JTabbePane. Mi problema es asignarle el evento para que me cargue el respectivo panel que corresponde a cada ítem. yo ya se como saber cual ítem se esta presionando con el mouse. ese valor lo almaceno en una variable (tipo string por ejemplo) pero como creo un nuevo objeto panel del tipo de escogido en el menú.

ejemplo: tengo una clase panel dentro de mi package llamado azul
en el menú árbol tengo:

Mi menu
Colores
Verde
Rojo
Azul
Formas
Cuadro
Circulo

El valor que se escogio lo se mediante:
public String opcion = "";
void doMouseClicked(MouseEvent me) {
TreePath tp = tree.getPathForLocation(me.getX(), me.getY());
opcion = (tp.getLastPathComponent()).toString();
}
Al dar click en el ítem azul, en nuestra variable opción quedaría almacenado azul. Como creo el nuevo objeto panel de tipo azul? obviamente esto no me lo permite: opcion nuevo_panel = new opcion();

Gracias a todos por leerme y a los que puedan ayudarme...
  #2 (permalink)  
Antiguo 15/10/2011, 00:46
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Menú Dinámico J2SE

Hola,

Cita:
Iniciado por gaedcu Ver Mensaje
... ese valor lo almaceno en una variable (tipo string por ejemplo) pero como creo un nuevo objeto panel del tipo de escogido en el menú.
...
Al dar click en el ítem azul, en nuestra variable opción quedaría almacenado azul. Como creo el nuevo objeto panel de tipo azul? obviamente esto no me lo permite: opcion nuevo_panel = new opcion();
...
¿Y si pruebas con if?

Código Java:
Ver original
  1. if ("azul".equals(opcion)) {
  2.   data = new Azul();
  3. }
  4. else if () ...

Si estas usando el JDK 7 podrías usar la instrucción 'switch' con strings.

Saludos,

ps:

Si no sabes los nombres de las clases o son dinámicas podrías usar Reflection.
http://www.forosdelweb.com/f45/esto-puede-hacer-666252/
  #3 (permalink)  
Antiguo 18/10/2011, 07:43
 
Fecha de Ingreso: junio-2011
Ubicación: Medellín
Mensajes: 12
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Menú Dinámico J2SE

Hola, y gracias por tu respuesta. Conozco el nombre de las clases, pero el menú se crea dinamicamente desde una BD dependiendo de los permisos del usuario en particular. Parece que lo de la reflexión sera mi salida. de nuevo gracias.
  #4 (permalink)  
Antiguo 18/10/2011, 15:49
 
Fecha de Ingreso: junio-2011
Ubicación: Medellín
Mensajes: 12
Antigüedad: 12 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Menú Dinámico J2SE

Lo he logrado con el método de la reflexión, de la siguiente forma:

si selecciono la opción azul dentro de colores:

mi menu
colores
azul
rojo


//evento de click en menú tree
void doMouseClicked(MouseEvent me) {
TreePath tp = tree.getPathForLocation(me.getX(), me.getY());
opcion = (tp.getLastPathComponent()).toString(); //llevo a string la opcion seleccionada en el jtree (azul)
opcion1 = (tp.getParentPath()).toString(); //llevo la ruta donde esta mi opcion dentro del jtree (mimenu, colores)
int tam = (opcion1.length())-1;
area = opcion1.substring(6,tam);// la recorto para que me muestre solo el nodo de la opcion (colores)

if (tp != null){
try{
Class c = Class.forName(area+"."+opcion); //crea clase con el nombre completo que elegi (colores.azul, pues mi clase jpanel azul la tengo dentro del package colores)
Object panela = c.newInstance(); crea una nueva instancia
tab_contenido.addTab(opcion, null, (Component) panela, opcion+" en "+area); //mi panel se mostrara en un jtabbedpane, así que adiciono un nuevo tab pero como componente.

}
catch(Exception e){
System.out.println(e.toString());
}
}
else{

}
}

espero le sirva a alguien
  #5 (permalink)  
Antiguo 18/10/2011, 15:57
 
Fecha de Ingreso: junio-2011
Ubicación: Medellín
Mensajes: 12
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Menú Dinámico J2SE

Tengo otra pregunta... Al darle click en mis opciones del menú jtree, me crea un nuevo tab dentro del Jabbedpane como ya mostré en la respuesta pasada. Si le doy click 5 veces a la opción azul, me creará 5 tabs de azul. Mi preguntita es como hacer para que solo muestre un solo tab por opcion del menú?. Osea, al darle click en azul me crea el tab de la opción azul, pero si le vuelvo a dar click, no me cree uno nuevo, y no cree mas tabs nuevos de los que ya hay activos.

Gracias por leerme y por ayudarme.
  #6 (permalink)  
Antiguo 19/10/2011, 17:41
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Menú Dinámico J2SE

Hola,

No estoy seguro, existirían varios métodos para realizar eso. Pero .. yo lo haría de la siguiente manera, crearía las clases colores.* de forma que usen el patrón singleton, de esta forma siempre devuelven la misma instancia, y dentro de la clase implementaría una variable para saber si ya está instanciado, por último, antes de insertarlo en el panel, reviso la variable para saber si lo debo agregar al panel.

En otras palabras, los objetos deben simular el funcionamiento de un objeto realmente, por ejemplo, un objeto se puede llamar 'Tienda', ese objeto puede contener una variable para saber si está abierta o cerrada dicha Tienda, y al implementar el patrón singleton permitiría que solamente exista una Tienda.

El mismo concepto podrías aplicarlo a los colores, aunque posiblemente tengas que cambiar la forma de instanciar los objetos usando reflection.

Saludos,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:23.