Este post aborda uma forma simples de preencher um JTree a partir do banco de dados, afim de fazer controle de permissões de usuario de acordo com a tela do sistema ou módulo.
Primeiro de tudo a estrutura do banco de dados (PostgreSQL)
CREATE TABLE interface(
int_codigo integer NOT NULL,
int_descricao character varying(40),
int_tipo character(1),
int_codigopai integer,
CONSTRAINT interface_pkey PRIMARY KEY (int_codigo)
)
WITH (OIDS=FALSE);
ALTER TABLE interface OWNER TO postgres;
Classe Interface:
public class Interface {
private String descricao;
private int codInterface;
private String tipo;gets e Sets ….
Rotina Recursiva que adiciona os Itens ao JTree:
public void preencheTree(DefaultMutableTreeNode node, int pai) {
DefaultMutableTreeNode aux;
ResultSet r1 = null;
ResultSet r2 = null;
Interface inf;
try {
r1 = ag.RunSqlQuery(“select * from interface where int_codigopai = ” + pai + ” order by int_descricao”);while (r1.next()) {
if(node == null){
aux = new DefaultMutableTreeNode(new Interface(r1.getString(“int_descricao”), r1.getInt(“int_codigo”), r1.getString(“int_tipo”)) );
root.add(aux);
}else{
aux = new DefaultMutableTreeNode(new Interface(r1.getString(“int_descricao”), r1.getInt(“int_codigo”), r1.getString(“int_tipo”)) );
node.add(aux);
}
r2 = ag.RunSqlQuery(“select count(*) as filhos from interface where int_codigopai = ” + r1.getInt(“int_codigo”));
if(r2.first()){
if(r2.getInt(“filhos”) > 0){
preencheTree(aux, r1.getInt(“int_codigo”));
}
}
}
} catch (Exception e) {
System.err.print(e.getMessage());
}
}
Observãções: a função RunSQLQuery recebe o sql e retorna um ResultSet preenchido. se alguem quiser o fonte é só deichar o email
(cade os [/code] ?
)