menu dinamico

Tagged:  

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...

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

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

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.

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <pre>. The supported tag styles are: <foo>, [foo].

Más información sobre opciones de formato