ola,
tenho um programa com vários itens no seu menu e tenho uma tela de cadastro e login separadamente,gostaria de saber como eu faço para que cada login habilite alguns itens do menu e desabilite outros conforme o q foi cadastrado em cada login.Isto é possivel?
Segue um print da minha classe de cadastrar e efetuar login
obg
Ajuda para habilitar e desabilitar itens de menu[resolvido]
49 Respostas
eu acho q eu deveria comparar o nome do item q for marcado na checkbox na tela de login com o respectivo item de menu,mas cmo eu posso fazer esta comparação?
mt obg
Normalmente associamos ao usuário algum tipo de autorização que fica salva no banco. Por exemplo, se ele vai ter acesso ao menu “Opções”, você teria no banco uma autorização chamada “Opções”. E quando salvasse o usuário, cada checkbox na sua tela de cadastro de usuário, estaria associada a uma autorização. Ao salvar o cadastro do usuário, associaria a ele as autorizações que ele tem. Quando ele logar no sistema, carrega o usuário e suas autorizações e monta o menu a partir das autorizações que ele tem - comparando o título da autorização com o texto do menu, talvez?
Deu para entender mais ou menos?
visola é isto mesmo que preciso fazer!!mas como eu faço estas autorizações?e como eu faço esta comparação tipo do texto da checkbox com o nome do item do menu?
bah mto obg
A autorização pode ser uma classe simples, algo do tipo:
public class Autorizacao {
private int id;
private String nome;
public Autorizacao (int id, String nome) {
this.id = id;
this.nome = nome;
}
// getters e setters
}
Como você salva e carrega isso no banco aí depende muito da arquitetura da sua aplicação.
Para comparar a autorização com o checkbox também depende, mas você precisa verificar se o checkbox está selecionado, achar a autorização associada a ele e adicionar a autorização no perfil do usuário. Seria algo como o seguinte:
for (JCheckBox chkBox : {lista de checkboxes}) {
if (chkBox.isSelected()) {
for (Autorizacao autorizacao : {lista de autorizacoes}) {
if (chkBox.getText().equals(autorizacao.getNome()) {
usuario.addAutorizacao(autorizacao); // o usuário possui uma lista de autorizações
break; // não precisa continuar procurando, já achou a autorização
}
}
}
}
O que está aqui ainda é muito superficial porque o que você está tentando fazer pode ser feito de várias formas diferentes mas espero ter ajudado um pouco.
visola
tu estas me ajudando um monte!
esta classe autorização serve para a pesquisa dos itens do menu para depois na tela de login eu verificar se o ck selecionado cmo tu disseste for igual a esta autorização habilitar tais itens…
é mais ou menos isto? :oops:
obg
Acho que sim. Não entendi direito o que quis dizer. 
Mas esta classe poderia representar todas as autorizações do seu sistema, todos os menus que existem.
Você poderia até usá-la para gerar os checkboxes, carregando todas as autorizações do banco e criando o JCheckBox com o nome da autorização.
Agora, uma coisa que não está ficando clara para mim é… a tela que tem os checkboxes é a tela de cadastro de usuário ou a tela de login?
na verdade antes eu tinha pensado em fazer as duas telas em uma só :oops: mas não iria dar muito certo bem os checkboxes estão na tela de cadastro do usuario dai eu vou criar uma tela simples so cm login ,senha e ok para acessar o programa
Entendi. Então vamos lá:
O seu usário deve ter um perfil ao qual estão associadas todas as autorizações que ele tem. Isso pode ser carregado junto com o usuário, no login por exemplo. E então, os botões e menus podem ser habilitados/desabilitados a partir da lista de autorizações do usuário.
Na tela de cadastro de usuário você pode gerar os checkboxes a partir da lista de autorizações cadastradas no banco. Se estiver editando um usuário que já existe, usa a lista de autorizações dele para selecionar os checkboxes que representam as autorizações que ele tem. Ao salvar o usuário na tela de cadastro, faz o que eu tinha falado, verifica quis checkboxes estão selecionadas e adiciona as autorizações específicas ao usuário.
criei duas tabelas no banco uma de autorizaçoes com id,nome(item do menu),menu_nome(nome do menu) e outra tabela usuario com id,nome e senha gora eu sei que preciso relacionar os checkboxes marcados com os itens da tabela autorização e acho que eu preciso criar um campo na tabela usuario ou em outra tabela com os itens q serao habilitados,certo?mais ou menos?
obg
Isso mesmo! Está correto.
Mas como o relacionamento entre autorizações e usuários é muitos (usuário) para muitos (autorizações), já que uma mesma autorização pode pertencer a mais de um usuário, você vai ter que criar uma tabela de relacionamento que contém o id do usuário e o da autorização. Então não vai precisar de nenhum campo na tabela de usuários para dizer quais autorizações ele tem.
Assim, quando um usuário tiver uma autorização, na tabela de relacionamento (Usuario_Autorizacao), vai ter um registro com o id do usuário e o id da autorização.
Espero que dê para entender.
tah construi as tabelas desta forma so q ao inves de pegar o id eu estou pegando o nome do usuario e o nome da autorização,é que uso o banco mysqlfront e ainda não descobri como gerar as pk e fks aki se não seria mais facil :oops:
mas agora q tenho a tela de cadastro,outro para login omo posso fazer para comparar as checkboxes om os itens do menu principal para habilitar e desabilitar itens conforme o usuario e suas autorizações como posso fazer esta verificação usando banco(autorizaçoes)e menu(itens)?
obrigada pela ajuda
=]
if(t0.getText()!=null && t1.getText()!=null)
{
//pesquiso no banco as autorizações relativas ao usuario e habilito e desabilito itens
try{
resultado=comando.executeQuery("select nome,senha from usuario where nome='"+t0.getText()+"'");
if(resultado.next());
resultado=comando.executeQuery("select Id_autorizacao from autorizacao_usuario where nome='"+t0.getText()+"'");
while(resultado.next())
{
v[q]=resultado.getObject(1).toString();
q++;
}
for(int i=0;i<v.length;i++)
{
if(!(new Menu().pesq.equals(v[i])))
{
new Menu().pesq.setEnabled(false);
}
}
}
catch(SQLException ew)
{
ew.printStackTrace();
}
java.awt.EventQueue.invokeLater (new Runnable () {
public void run () {
new Menu().setVisible (true);
}
});
}
Provavelmente porque está trabalhando com 3 instâncias separadas do Menu no seu código. Em cada uma das linhas que você se refere ao menu cria um novo ao invés de usar um que esteja sendo usado para criar a janela. Você deveria ter apenas uma instância ao invés de faer “new Menu()” toda vez.
Guarde este menu numa variável privada interna na classe e então use sempre o mesmo, senão vai acontecer isso que você está vendo, vai pesquisar a autorização em um, desabilitar em outro e mostrar outro.
Visola
obrigada deste jeito funcionou direitinho a unica coisa que aconteceu é que o menu ja abre direto tipo eu deveria escrever o login,senha e clicar em acessar para que ele aparecesse mas quando eu abro a tela de login o menu abre junto :oops: ,como posso resolver isto tipo eu coloco ele invisivel e so o torno visivel após clicar o botão?
obrigada
Tem que colocar uma tela antes de tudo que representa o login. E se o usuário e senha estiver correto, fecha esta tela e abre outra com os menus habilitados ou não de acordo com as autorizações do usuário.
bem estou tentando fazer isto mas não está dando muito certo :oops: é que as telas estão sendo abertas ao mesmo tempo tipo meu codigo é este (do botão que abre a tela do menu,ou que deveria abrir)
//primeiro vejo se o login e senha estão cadastrados no banco
resultado=comando.executeQuery("select nome,senha from usuario where nome='"+t0.getText()+"'");
if(resultado.next());
//depois vejo quais as autorizações relacionadas a este usuario e jogo em um vetor
resultado=comando.executeQuery("select Id_autorizacao from autorizacao_usuario where nome='"+t0.getText()+"'");
while(resultado.next())
{
v[q]=resultado.getObject(1).toString();
q++;
}
depois vejo quais destas autorizações são iguais as do menu,esta minha parte acho que esta errada porque ele so ta desabilitando um item quando pelo teste que estou fazendo deveria deixar apenas 2 itens habilitados
acho que ele ta comparando o nome do menu e não seus itens
for(int i=0;i<v.length;i++)
{
if(!(m.pesq.equals(v[i])))
{
m.pesq.setEnabled(false);
}
if(!(m.notada.equals(v[i])))
{
m.notada.setEnabled(false);
}
...
só q tah desabilitando todos os itens!!!
obrigada
Os códigos deveriam estar separados. A primeira parte que valida o usuário e senha deveria estar numa tela.
A parte que gera o menu deveria estar na outra tela. Por isso está acontecendo tudo junto.
Sobre desabilitar todos os menus, acho que o problema está no seu Menu, porque apesar de usar o “i” para percorrer todas as autorizações, não está percorrendo todos os menus. Está trabalhando sempre sobre o mesmo… pesq ou notada?
setEnabled está habilitando um ou todos? Não entendi direito este código.
ele está desabilitando todos :oops:
ta e tipo como dividir este codigo em telas
tipo eu tenho a tela de login e a de cadastro tipo a de login deveria abrir o menu então eu faço o codigo em metodos separados na tela de login ou eu desabilito e habilito na tela de menus?
ou crio 2 botões um para checar as autorizações e outro para percorrer os itens e tal?
obrigada
a parte das telas abrirem juntas consegui resolver fiz assim na tela de login troquei isto private Menu m=new Menu(); por Menu m=new Menu(); dentro do try do botão de acesso mas ainda esta sendo tudo desabilitado! :shock:
Normalmente, fazemos o seguinte…
passo 1:
Abrir a tela de login (e somente ela) para que o usuário possa se logar no sistema.
passo 2:
O usuário coloca seu usuário e senha e clica em “login”
passo 3:
As credenciais do usuário são validadas (usuario e senha) e as autorizações do usuário são carregadas
passo 4:
Destruir a tela de login - usando dispose() por exemplo.
passo 5:
Criar a janela principal da aplicação usando as autorizações do usuário para habilitar os menus e tal.
Como fazemos isso depende muito do seu estilo. Eu normalmente faço uma classe chamada ApplicationContext que contém um apontamento para coisas importantes como login e a janela principal. Ela controla o fluxo da aplicação (qual tela está aberta e qual tela será a próxima a abrir). Uso um Singleton para garantir que apenas um contexto exista.
Você poderia começar com algo do tipo:
public class ApplicationContext {
public static final ApplicationContext instance;
// outras variáveis de controle
private Usuario usuarioLogado = null;
public ApplicationContext() {
if (instance != null) throw new IllegalStateException("Apenas um contexto pode existir");
instance = this;
}
// usa o método estático para acessar o contexto da aplicação de qualquer lugar
public static ApplicationContexto getInstance() {
return instance;
}
// Aqui começa sua aplicação
public void init() {
// cria e mostra o form de login
}
// getters e setters aqui
}
Depois na mesma classe ou em outra você cria a instância do contexto da aplicação e inicializa sua aplicação:
public class Main {
public static void main (String [] args) {
new ApplicationContext().init();
}
}
A partir daí você vai ter acesso de qualquer lugar ao contexto da aplicação através do método getInstance:
// dentro da janela de login
// action do botão login
public void actionPerformed(ActionEvent e) {
// pega o login e senha do usuário e valida
// carrega as autorizações dele
// seta o usuário logado no contexto da aplicação
ApplicationContext contexto = ApplicationContext.getInstance();
contexto.setUsuario(usuarioLogado);
contexto.abreJanelaPrincipal();
}
Eu normalmente trabalho desta forma. Coloquei bastante código aqui então se não entender alguma coisa ou ficar confuso, me avise.
// Aqui começa sua aplicação
public void init() {
// cria e mostra o form de login
}
// getters e setters aqui
}
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
public class ApplicationContext {
public static ApplicationContext instance;
// outras variáveis de controle
private Usuario usuarioLogado = null;
JLabel l0,l1;
JFormattedTextField t0;
JPasswordField t1;
JButton b,b1,b3,b4,b5,b6,b7;
Connection conexao;
Statement comando;
ResultSet resultado;
Container tela=new Container();
String v[]=new String[12];
int q=0;
String h=null,h1=null;
public ApplicationContext() {
if (instance != null) throw new IllegalStateException("Apenas um contexto pode existir");
instance = this;
}
// usa o método estático para acessar o contexto da aplicação de qualquer lugar
public static ApplicationContext getInstance() {
return instance;
}
// Aqui começa sua aplicação
public void init() {
tela.setLayout(new FlowLayout());
l0=new JLabel("Login");
l1=new JLabel("Senha");
t0=new JFormattedTextField();
t1=new JPasswordField();t1.setEchoChar('*');
b=new JButton("Entrar");
l0.setBounds (20, 30, 120, 25); t0.setBounds (175, 30,300, 25);
l1.setBounds (20, 60, 120, 25); t1.setBounds (175, 60,300, 25);
b.setBounds (175, 180, 120, 25);
tela.add(l0);tela.add(l1);
tela.add(t0);tela.add(t1);tela.add(b);
try {
conexao = conecta.conectabanco();
comando = conexao.createStatement();
}
catch(Exception e) {
JOptionPane.showMessageDialog(null, "Erro na conexÄo do banco");
}
//b.addActionListener((ActionListener) tela);
b.addActionListener (new ActionListener (){
public void actionPerformed (ActionEvent e){
if(b5==e.getSource())
{
if(t0.getText()!=null && t1.getText()!=null)
{
try{
System.out.println("select nome,senha from usuario where nome='"+t0.getText()+"'");
resultado=comando.executeQuery("select nome,senha from usuario where nome='"+t0.getText()+"'");
if(resultado.next());
h=resultado.getObject(1).toString();
h1=resultado.getObject(2).toString();
Menu m=new Menu();
System.out.println("select Id_autorizacao from autorizacao_usuario where nome='"+h+"'");
resultado=comando.executeQuery("select Id_autorizacao from autorizacao_usuario where nome='"+h+"'");
while(resultado.next())
{
v[q]=resultado.getObject(1).toString();
q++;
}
}
catch(SQLException ew)
{
JOptionPane.showMessageDialog(null,"Este usuario não foi cadastrado!");
ew.printStackTrace();
}
}
}
}});
tela.setSize(650,300);
tela.setVisible(true);
}
public void setUsuarioLogado(Usuario usuarioLogado) {
this.usuarioLogado = usuarioLogado;
}
public Usuario getUsuarioLogado() {
return usuarioLogado;
}
public void actionPerformed(ActionEvent e) {
ApplicationContext contexto = ApplicationContext.getInstance();
contexto.setUsuarioLogado(usuarioLogado);
contexto.abreJanelaPrincipal();
}
private void abreJanelaPrincipal() {
java.awt.EventQueue.invokeLater (new Runnable () {
public void run () {
new Menu().setVisible (true);
}
});
}
public static void main (String [] args) {
new ApplicationContext().init();
}
}
Não… a lógica de login e criar tela fica na classe que representa a tela mesmo.
Normalmente temos uma classe que estende JFrame ou algo do tipo onde a tela é inicializada. Isso para cada tela.
Então neste método teria algo do tipo:
public void init() { // melhor mudar este método para login()
LoginFrame telaDeLogin = new LoginFrame(); // cria a janela e inicializa os componentes
telaDeLogin.setVisible(true); // mostra a janela e aguarda a ação do usuário
}
Se a tela de login tiver dois botões, login e cancelar, o cancelar irá só destruir a tela de login e sair do aplicativo. O login irá fazer o que eu tinha falado antes.
Não aparece porque o Container é só um lugar onde se coloca componentes. Não é uma janela. Para criar uma janela você precisa de um JFrame.
Tenta separar as coisas… colocar tudo que é de interface gráfica (botões e tal) na classe aonde eles pertecem. Tipo… TelaDeLogin estende JFrame e contém os botões e os campos de usuário e senha. A action de login ficaria lá dentro.
Visola
fiz o q tu disseste agora e a tela de login apareceu
mas tipo além disto eu tenho q mudar mais alguma coisa no codigo?
:oops: bg
Não tem… se está funcionando não tem.
Os pontos que falei aqui foram só orientação mesmo. Organização de código, separação de responsabilidades, desacoplamento e encapsulamento… essas coisas básicas. Mas se você está satisfeita com o código assim, então ótimo! 
public class ApplicationContext {
public static ApplicationContext instance;
// outras variáveis de controle
private Usuario usuarioLogado = null;
JLabel l0,l1;
JFormattedTextField t0;
JPasswordField t1;
JButton b,b1,b3,b4,b5,b6,b7;
Connection conexao;
Statement comando;
ResultSet resultado;
Container tela=new Container();
String v[]=new String[12];
int q=0;
String h=null,h1=null;
public ApplicationContext() {
if (instance != null) throw new IllegalStateException("Apenas um contexto pode existir");
instance = this;
}
// usa o método estático para acessar o contexto da aplicação de qualquer lugar
public static ApplicationContext getInstance() {
return instance;
}
// Aqui começa sua aplicação
public void init() {
JFrame telaDeLogin = new JFrame(); // cria a janela e inicializa os componentes
telaDeLogin.setVisible(true);
telaDeLogin.setLayout(null);
l0=new JLabel("Login");
l1=new JLabel("Senha");
t0=new JFormattedTextField();
t1=new JPasswordField();t1.setEchoChar('*');
b=new JButton("Entrar");
l0.setBounds (20, 30, 120, 25); t0.setBounds (175, 30,300, 25);
l1.setBounds (20, 60, 120, 25); t1.setBounds (175, 60,300, 25);
b.setBounds (175, 120, 120, 25);
telaDeLogin.add(l0);telaDeLogin.add(l1);
telaDeLogin.add(t0);telaDeLogin.add(t1);telaDeLogin.add(b);
try {
conexao = conecta.conectabanco();
comando = conexao.createStatement();
}
catch(Exception e) {
JOptionPane.showMessageDialog(null, "Erro na conexÄo do banco");
}
b.addActionListener(this.getUsuarioLogado());
b.addActionListener (new ActionListener (){
public void actionPerformed (ActionEvent e){
if(b5==e.getSource())
{
if(t0.getText()!=null && t1.getText()!=null)
{
try{
Menu m=new Menu();
System.out.println("select nome,senha from usuario where nome='"+t0.getText()+"'");
resultado=comando.executeQuery("select nome,senha from usuario where nome='"+t0.getText()+"'");
if(resultado.next());
h=resultado.getObject(1).toString();
h1=resultado.getObject(2).toString();
System.out.println("select Id_autorizacao from autorizacao_usuario where nome='"+h+"'");
resultado=comando.executeQuery("select Id_autorizacao from autorizacao_usuario where nome='"+h+"'");
while(resultado.next())
{
v[q]=resultado.getObject(1).toString();
q++;
}
for(int i=0;i<v.length;i++)
{
//if(v[i]!=null)
if(!(m.pesq.equals(v[i])))
{
m.pesq.setEnabled(false);
}
if(!(m.notada.equals(v[i])))
{
m.notada.setEnabled(false);
}
if(!(m.cadbanco.equals(v[i])))
{
m.cadbanco.setEnabled(false);
}
if(!(m.nota.equals(v[i])))
{
m.nota.setEnabled(false);
}
if(!(m.pesqfina.equals(v[i])))
{
m.pesqfina.setEnabled(false);
}
if(!(m.npo.equals(v[i])))
{
m.npo.setEnabled(false);
}
if(!(m.cad.equals(v[i])))
{
m.cad.setEnabled(false);
}
if(!(m.io_estados.equals(v[i])))
{
m.io_estados.setEnabled(false);
}
if(!(m.cadTurmas.equals(v[i])))
{
m.cadTurmas.setEnabled(false);
}
if(!(m.cadprof.equals(v[i])))
{
m.cadprof.setEnabled(false);
}
if(!(m.visu.equals(v[i])))
{
m.visu.setEnabled(false);
}
if(!(m.estat.equals(v[i])))
{
m.estat.setEnabled(false);
}
if(!(m.estat2.equals(v[i])))
{
m.estat2.setEnabled(false);
}
if(!(m.cancel1.equals(v[i])))
{
m.cancel1.setEnabled(false);
}
System.out.println(v[i]);
}
}
catch(SQLException ew)
{
JOptionPane.showMessageDialog(null,"Este usuario não foi cadastrado!");
ew.printStackTrace();
}
}
}
}});
telaDeLogin.setSize(650,300);
tela.setVisible(true);
tela.setMaximumSize(new Dimension());
}
public void setUsuarioLogado(Usuario usuarioLogado) {
this.usuarioLogado = usuarioLogado;
}
public Usuario getUsuarioLogado() {
return usuarioLogado;
}
public void actionPerformed(ActionEvent e) {
ApplicationContext contexto = ApplicationContext.getInstance();
contexto.setUsuarioLogado(usuarioLogado);
contexto.abreJanelaPrincipal();
}
private void abreJanelaPrincipal() {
java.awt.EventQueue.invokeLater (new Runnable () {
public void run () {
new Menu().setVisible (true);
}
});
}
public static void main (String [] args) {
new ApplicationContext().init();
}
}
Algumas observações:
1 - Esse código compila? Se ele compila então sua classe Usuario implementa um ActionListener, é isso mesmo? Na linha 65 está adicionando o usuário logado como ActionListener mas na hora que passar por ali Usuario ainda é null… toma cuidado com isso.
2 - Na linha 78 está fazendo um if e colocando um ponto e vírgula no final… cuidado que isso implica que você está ignorando completamente o if. As expressões abaixo dele serão sempre executadas! Veja o seguinte exemplo:
if (false);
System.out.println("No");
System.out.println("Yes");
Apesar da condição ser false dentro do if, ela imprime “No” e “Yes”.
3 - Você está usando um array de tamanho fixo para armazenar uma quantidade variável de autorizações do usuário. Isso implica que você vai ter valores nulos dentro do array e terá que controlar o tamanho na mão (o que está sendo feito com a variável q). Se você usasse um ArrayList, resolveria o seu problema de forma mais fácil já que ele fará esse controle para você automaticamente. Poderia fazer o seguinte:
// declarar v como um array list
ArrayList<String> v = new ArrayList<String>();
// dentro do loop, só adiciona os valores:
while (resultado.next()) {
v.add(resultado.getString(1)); // se o dado armazenado no banco é um varchar ou um char pode usar o getString ao invés do getObject
}
// no for
for (int i = 0; i < v.size(); i++) {
String nomeAutorizacao = v.get(i);
// faz as verificações aqui
}
4 - Não entendi a linha 166… está passando um Dimension vazio para o tamanho máximo da janela. Talvez seja esse seu problema. A janela deve estar abrindo mas deve estar ficando bem pequena e talvez você não esteja a vendo. Remova esta linha, talvez ajude.
troquei o vetor de string pelo arraylist como tu disseste e tambem tirei a linha com o new Dimension e troquei o ; pelas {} após o if mas sobre o primeiro item q tu falou do usuario
1 - Esse código compila? Se ele compila então sua classe Usuario implementa um ActionListener, é isso mesmo? Na linha 65 está adicionando o usuário logado como ActionListener mas na hora que passar por ali Usuario ainda é null… toma cuidado com isso.
o codigo compila mas o menu não é exibido como eu faço para o usuario não ser null? :oops:
Visola muito obrigado pela ajuda assim q o programar rodar direitinho eu te mando um print! :lol:
o codigo compila mas o menu não é exibido como eu faço para o usuario não ser null? :oops:
Visola muito obrigado pela ajuda assim q o programar rodar direitinho eu te mando um print! :lol:
No seu código ele nunca deixa de ser null. Você precisa, depois de carregar o usuario e senha e as autorizações, criar uma nova instância da classe e passá-lo para o setter:
// Antes do while (resultado.next()) {
Usuario usuario = new Usuario();
usuario.setLogin(h);
while (resultado.next()) {
String autorizacao = resultado.getString(1);
v.add(autorizacao);
usuario.addAutorizacao(autorizacao); // coloca as autorizacoes dentro do usuario se preciso
}
// chama o setter
setUsuarioLogado(usuario);
Não entendi porque o seu usuário implementa ActionListener e porque você registra ele no botão de login. Tem que ver para que você precisa do usuário e depois de passá-lo no setter, faça a ação que deseja, dentro da ação de login mesmo.
ah este metodo usuario.setLogin(h); eu devo cria-lo?
eu preciso do usuario so para saber o q vai ser habilitado e desabilitado no menu,e sobre o actionlistener eu coloquei ali sem querer é que tipo eu tentei fazer b.addActionListener(this);e dava erro pq a classe não implemnta um actionlistenermas agora eu coloquei b.addActionListener(null);
Visola meu menu ainda não aparece tipo eu qria q acontecesse o seguinte o usuario digitasse o login e senha e ao clicar em entrar akela tela d login sumisse e aparecesse o menu cm os itens habilitados e desabilitados
obg
Visola
descobri pq o menu não tava abrindo,tipo na ação do botao b tava if( e.getSource==b5) troquei e agora o menu aparece mas os itens não são desabilitados !=[
Você tem algum dado no seu banco? Na tabela de autorizações?
no banco eu criei uma tabela de usuario com os dados id,nome e senha para salvar o login e senha do usuario,criei tambem a tabela autorizacao com os itens id,nome(nome do item do menu/serão exibidos em forma de checkbox na tela de cadastro de usuario) e menu_nome(nome do menu) e também a tabela autorizacao_usuario com id,nome(do usuario)e Id_autorizacao,Tipo nesta ultima tabela eu salvo os itens q o usuario marcou na tela ao se cadastrar pela primeira vez
obg
Acho que o seu problema está no SQL. Você está selecionando o ID da autorização e comparando com o nome no menu. Não é este o problema? Por questão de segurança, não seria melhor deixar todos desabilitados e habilitar de acordo com a autorização que ele tem?
acho q talvez seja este o problema mesmo!!
acho q é melhor fazer deste jeito deixar tudo desabilitado e habilitar conforme as autorizações relacionadas akele usuario vou arrumar e depois posto
mtooo obg!!
=]
bah eu não sei onde esta o erro mas fiz o q tu disseste tipo desabiliteitodos os itens do menu e tentei habilitar conforme as autorizações dakele usuario q esta se logando mas nenhum item foi habilitado! :shock:
fiz assim no botão entrar q usuario deve clicar apos escrever seu login e senha
try{
Menu m=new Menu();//desabilito os itens do menu
m.pesq.setEnabled(false);m.notada.setEnabled(false);m.cadbanco.setEnabled(false);m.nota.setEnabled(false);
m.pesqfina.setEnabled(false);m.npo.setEnabled(false);m.cad.setEnabled(false);m.io_estados.setEnabled(false);
m.cadTurmas.setEnabled(false);m.cadprof.setEnabled(false);m.visu.setEnabled(false);m.estat.setEnabled(false);
m.estat2.setEnabled(false);m.cancel1.setEnabled(false);
...
//faço a 1 pesquisa para ver se o usuario existe no banco
//faço a 2 pesquisa para pegar as autorizações relativas a este usuario adiciono o resultado no arraylist
//percorro o arraylist e vejo se o item do menu tem o mesmo nome da autorização habilita
if((m.pesq.equals(v.get(i))))
{
m.pesq.setEnabled(true);
}
mas não o q estou fazendo errado pois os itens não estão sendo habilitados =[
obg pela ajuda
Acho que o que vocẽ está fazendo errado é que está comparando um menu com uma string. Pelo que entendi do seu código, quando faz: menu.pesq, pesq é um JMenuItem dentro de Menu, é isso mesmo?
Está usando o método equals para comparar o menu com a string que é o ID da autorização que pegou do banco no select. Uma string nunca pode ser igual a um JMenuItem. 
ah tah!
é isto q estou fazendo errado mesmo mas então como faço para comparar a autorização com o texto do menu item? :oops:
obg
antes eu ate tava tentando fazer assim para compararm.cadbanco.getValue(getName())mas o valor q aparecia era null 
Para pegar o texto do menu, usa o método getText, não o getValue.
E não se esqueça de trocar o campo que está sendo selecionado no seu select. Está retornando o id das autorizações. Precisa do campo menu_nome (ou algo assim).
iUsuario usuario = new Usuario(t0.getText(),t1.getText());
// usuario.setLogin(h);
while(resultado.next())
{
String autorizacao = resultado.getString(1);
v.add(autorizacao);
// usuario.addAutorizacao(autorizacao);
}
setUsuarioLogado(usuario);
for(int i=0;i<v.size();i++)
{
if((m.itemPesquisa.getText().equals(v.get(i))))
{
m.itemPesquisa.setEnabled(true);
System.out.println(m.itemPesquisa.getText()+" = "+v.get(i));
}
....
System.out.println("os elementos do arraylist sao "+v.get(i));}
O que o sysout fora dos IFs imprime é parecido ou igual ao texto de qualquer um dos Menus?
Você corrigiu o SQL que pega as autorizações no banco?
visola
muito obrigada pela tua ajuda conseguimos resolver!!!
o problema era que eu estava usando equals dai troquei por equalsIgnoreCase e ta funcionando!!! :lol: :lol: :lol:
agora ele ta habilitando os itens de acordo com a autorização e abrindo o menu principal na hora certa
obrigada sem sua ajuda eu não teria conseguido!!!
Que bom! Parabéns!
Fico feliz de ter ajudado!
Qualquer coisa, só chamar.
ja que tu disseste
Qualquer coisa, só chamar.
como faço para o usuario fazer logoff?
Só fechar a aplicação. Porque o usuário logado permanece na memória enquanto a aplicação estiver rodando. Na hora que fechar, a sessão acaba.
ah tah!
ufa um item a menos!!!
:lol: brigada
visola não quero abusar da tua vontade mas tu pode me dar uma ajuda em outro tópico é que estou com problemas ao alterar dados do banco na tela de cadastro de usuario :oops:
http://www.guj.com.br/java/234134-problema-ao-alterar-dados-do-banco
obg
=]
