como recorrer un checboxtree
Estoy ocupando este jtree con checkbox para dar privilegios a usuarios dentro de un sistema, programando en java con base de datos mysql
como recorrer y determinar que checkbostree a sido seleccionado...
Tengo un jtreecheckbox que lo cargo de la base de datos ocupando tres tablas mas que nada son 5 tablas..
la primera tabla es de
1 tbl_menu
2 tbl_opciones
3 tbl_operaciones
estas tablas se componen de dos campos, la clave o id, y un campo descripción
tabla 1 almaceno lo que son los menús de mi programa
1- Archivo
2- Iniciar sesión
3- Cerrar sesión
4- Catálogos.
5- Asignaciones
6- Ajustes
tabla 2 almaceno las opciones
1- Empresas
2- Sucursales
3- Empleados
4- Puestos
5- Asignar puesto
6- Reportes
tabla 3 aquí es donde se guardar todas las operaciones que puede hacer un usuario
1- Registrar
2- Actualizar
3- Eliminar
4- Generar reporte
5- Imprimir
6.- Generar otras claves
etc
---------------------------------------------------------------------------------------------------------------------------------
tengo dos tablas mas que relaciono la 2 tabla con la tercera
4 tbl_opcion_oper en esta tabla se relaciona con tbl_opciones, y tbl_operaciones
quedando de la siguiente forma ya relacionado aquí tomando en cuenta que la primera columna es el id_ llave primaria, el segundo campo es se relaciona con el ide de la tabla opciones y la tercera con la tabla operaciones, estos dos últimos campos almacenan las claves foraneas
1,1,1
2,1,2
3,1,3
4,2,1
5,2,2
6,2,3
4.- tbl_menu_opciones la tercera tabla la cual se relaciona la tabla anterior que es la 4 con la primera tabla que es de tbl_menu
quedando dela siguiente forma; compuesto por 3 campos la primera es el id de la tabla es la llave primaria, el siguiente campo es la que se relaciona con la tabla tbl_menu, y el ultimo campo se relaciona con la tabla tbl_opcion_oper, estos dos ultimos campos almacenan las claves foráneas..
aclaro que las primeras 3 opciones del menú no se relacionan con ninguna de la tabla opciones ni operación (se relaciona directamente con la tavla tbl_menu_opciones
quedando de la siguiente manera
1, 1, null
2, 2, null
3, 3, null
4, 4, 1
5, 4, 2
6, 4, 3
asi sucesivamente va..
al final tengo una vista la cual muetro todo..
al cargar el jtre con la base de datos queda asi.....
bueno lo que no se como recorrer todo el arbol y determinar los checbox seleccionado o marcado
y asi obtener el ide de la hoja seleccionado.. y guardarlo en una tabla que seran los privilegios y posteriormente relacionarlo con la tabla de usuarios que accesen al sistema
tengo este pequeño codigo que hace eso pero solo lo seleccionado, y recoje los nombres como quiero.. pero seria de uno en uno
y lo muestra asi
pero lo que yo quiero es como acer unrecorrido total para sacar todos los datos seleccionados, y posteriormente hacer una consulta a la base de datos y objetner los ide de la tabla tbl_menu_operaciones y esto guardarlo en una tabla de privilegios
tengo este codigo para obetener todos los contenidos del arbol
el codigo es lo siguiente
la salida es esto, pero no me muestra los nodos principales de cada seccion
espero que me den ideas como hacerle..
y me echen la mano, esque asignar privilegios de este modo es complicado, mas manejando jtree
- Inicie sesión o regístrese para enviar comentarios
Re: como recorrer un checboxtree
Aquí hay un ejemplo de recorrido de un
:
¡Por si sirve de algo!
~~~
ejemplo de recorrido de un CheckboxTree
jpaul justo lo que necesito para hacer el recorrido y determinar los checkbox de cada nodo si esta seleccionado...
pero aun me surgen dudas como obtener los id's correspondientes para guardar en una tablamuy aparte.....
nuca he trabajado...con este componente..
Re: id
En mi ejemplo, la clase
funge como modelo y contiene el
. Tiene sobreescrito el método
para mostrar el texto correspondiente en el menú.
Cada nodo se contruye utilizando una instancia de tal clase:
Y cuando se recorre, el
se obtiene:
~~~
lo checare
lo checare porque bien, porque tu lo cargas con parametro.. como un ArraList para despues ponerlo en el modelo del jtree
adecuenta que el ide de cada nodo ya esta en cada nodo... o me equivoco....
bueno yo las cargue de diferente forma con respecto a la tabla de la base de datos fui cargando los nodos..
aki el codigo
pero igual. lo analizare..bien... porque he estado dando de topes a la cabeza
Re: ArraList
Por cierto, tal vez quieras también mostrar aquellas opciones que ya antes habías seleccionado (guardado en la base de datos) para modificarlas. Siguiendo el mismo ejemplo:
~~~
Me marca errores
en tu segundo ejemplo me carga error en
esto es lo que me marca
Tipo de Lista no toma parámetros
con el mismo eror
por ultimo estas dos lineas marca lo mismo
Hice unas modificaciones y ya salio bueno en el ejemplo
estas son las modificaciones que hice
Antes taba asi
ahora lo puse asi
y donde tenias List nomas le agrege ArrayList solamente asi me dejo de marcar error
Re: error
Seguramente el IDE importó la clase
en lugar de
. Código completo aquí .
Seguramente el IDE importó la clase java.awt.List
Si ya vi que si funciona asi como posteaste el ejemplo.. si importo diferente mi ide....
pero segire checando esto con la base de datos
Cargue Jtree con base de datos
Cargue el JTreeCheck con base de datos, asi como en el ejemplo
logre cargarlo con base de datos como realmente quiero, ya los ids principal de cada opcion ya esta cargado.. asi nomas seleccionar, pues se obtendria el id_principal para guardar en una tabla los id_seleccionados, junto con la clave de usuarios..
hasta aqui todo bien...
pero me a sugido un inconveniente.. aki la imagen
Si selecciono el nodo el menu Asignaciones, y posteriormente la opcion Asignaciones, y posterior mente las operaciones ya aparecen seleccionados, hasta ahi todo bien no, pero suponiendo que no se quiere dar todas esas operaciones de Asignar, Reasignar, Generar codigo manual, al deseleccionar unas de esas operaciones. se desactiva el modo principal que esta en el primer nivel y el segundo nivel, y esto no deveria aser, alguna idea de como controlar esto....
Re: se desactiva
Cambia el
:
P.D. Esto es utilizando
de http://bit.ly/1dM5wkR .
~~~
porque no me toma en cue ta los nodos
porque no toma en cuanta los nodos que estan seleccionados...
al parecer lo que deseaba lo corregir de este modo
al momento de hacer la comparacion en
del nodo lo cambie de la siguiente forma
lo cambie a esta forma
y asi me toma en cuenta en nodo
al parecer lo que deseaba lo corregir de este modo
al momento de hacer la comparacion en
del nodo lo cambie de la siguiente forma
lo cambie a esta forma
y asi me toma en cuenta en nodo
Re: nodos
Cada hoja debería ser un privilegio y los nodos, sólo la forma de clasificarlos, no un privilegio en sí mismo.
Cada nodo deberia ser un provilegio
tienes razón los nodos es una clasificación
porque con este codigo
al momento de cargar al usuario con sus privilegios desde la base de datos, para hacerle un cambio o agregarle un privilegio mas.. no se mostraría el nodo seleccionado en el árbol.
pero con este código si
-------------------------------------------------------------------------------------------------------------------------------------------------------
lo que yo pienso tomar el nodo como un item en mi menu principal, y si ese nodo fue tomado como true o false, pues lo mostraria habilitado o deshabilitado...
Re: habilitado o deshabilitado
En mi opinión, no deberían mostrarse. ¡A menos que el cliente lo pida! No obstante, si muestras algo deshabilitado, eso significa que el usuario debe hacer algo para habilitarlo. Ejemplo:
P.D.: Te recomiendo el libro Designing Interfaces, 2nd Edition de Jenifer Tidwell. Hay una vista previa en Google Books. También está el sitio web del libro.
~~~
En mi opinión, no deberían mostrarse.
Si comprendo, que el usuario final se sorprendería el porque esta deshabilitado esa opción o el menú esta deshabilitado...
lo que quiero como resultado final en mi ventana principal las opciones del menú, se activen de acuerdo al privilegio.
aquí la imagen
ahora que ya estoy implementado, creo que ya me salieron otras dudas.
ya construí la tabla de usuarios y la tabla de privilegios, la cual la.
tbl_user tiene 4 campos
clav_user int incremental llave primaria
nombre varchar
user varchar
contra longblob
y posteriormente tengo la tabla de privilegios con 4 campos
tbl_privilegios
clav_privilegio int auto_increment llave primaria
clav_user int
clav_menuopc int
privilegio bit
en la cual se guardar de esta forma
la clave de usuario, la clave del menu_opcion, y el privilegio si fue seleccionado captura un true, de lo contrario un false, hasta aquí todo bien.
cuando yo quiera actualizar los privilegios..al usuario. no se 1semana después deseo agregarle otras o quitarle algunos.. pues es necesario..
bueno aquí ya me enrede..
cuando guardo los privilegios, recorro todo el árbol.. y extraigo todos los ids, del árbol y posteriormente si esta seleccionado, ya vez que retorna un false, o un true, capturo estos boleanos que lo guardo en un campo bit, que ocuparía para activar los menús item en mi ventana principal, los opciones.
--------------------------------------------------------------------------------
bueno dependiendo de usuario y la clave de la opción del menu_opcion que se a seleccionado, nomas recupero de la tabla los que tienen como true y los demás no las recupero, esto con el fin de mostrar los elementos seleccionado anteriormente en el jtree cuando fue registrado la ultima vez.
aki muestro al asignarle por primera vez los privilegios.. al usuario
como se dan cuenta en la parte de ajustes nomas se selecciona los privilegios de - Ajustes datos responsiva - Actualizar..
pero cuando se recupera desde la base de datos los privilegios seleccionados, la muestra a si
la opción -Ajustes de datos inventario - Actualizar estas dos opciones no fueron seleccionados, pero al recuperar y mostrarla la selecciona y no debe ser creo que es por la linea de código
pero seguire checando aver que pasa..
Cada hoja debería ser un privilegio y los nodos
Es correcto JPaul los nodos no se deben capturar, estube checando sii, al momento de recuperar la id del nodo de la base de datos,
son los que hace que se activen los demas ramas o nodos decendites... y si no se captura. pues todo queda bien, solamente se activan los que realmente fue registrado
Re: todo queda bien
¡Ja! Sólo espero que la empresa ya te libere. Bueno, sé que algunas empresas dan un apoyo mensual por prácticas. Ojalá sea tu caso.
Sólo espero que la empresa ya te libere
pinzo que es necesario capturar el nodo, nomas que al momento de recuperar los ids de la base de datos los voy a excluir, aunque no es estético.y solo recuperar los ids de las ojas....
---------------------------------------------------------------------------------------------------------------------------------------------
pues nombre aqui solo nos explotan.. nos an dicho que al final nos van a dar una feria,.
pero pues hasta ahorita nomas nos apoyan con un vale de comida a medio día. de ahi en fuera solo eso..
pero si he estado batallando, pero ahora solo vengo dos días a la semana....
--------------------------------------------------------------------------------------------------------------------------------------------------------
Gracias jpaul. por tus recomendaciones, y pues por ejemplos que me proporcionas, la mera verdad me han servidor..
de por si aquí creo que voy a seguir posteando mis dudas.. que en ese foro me han resuelto las dudas..