Habilitar menu automaticamente

7 respostas
F

Procurei em vários foruns e não encontrei algo que pudesse me ajudar, meu problema é o seguinte:

Quero controlar acesso ao menu de um formulário de acordo com uma tabela, onde nessa tabela terei o identificador do usuário e o nome do menu

Usuario (int) -> JMenuItem (String)
X -> JM1

Os menus já estão criados e desabilitados, quando o usuário logar verifico quais menus ele tem acesso e “seto” os mesmos para true, o problema é q tenho apenas o nome do menu, ou seja, uma String e não sei como habilitar o menu com base nisso pq não encontrei nenhum método q retornasse o jmenuitem com base no nome algo assim:

getJMenuItem(“JM1”).setEnable(true)

alguém sabe como fazer isso? Estou falando de uma aplicação Swing

7 Respostas

W

fxavierds,

Caro, utilizo a IDE NetBeans e meus itens de menus sao todos nomeados, consigo fazer acesso direto a menu item conforme abaixo.

JMenuItem.setEnabled(false);
F

Sim mas imagina um método que recebe o nome do JMenuItem e o seta pra true algo assim:

public void setAcesso(String nome){

nome.setEnable(true);   // só que esse nome é uma string que é o nome do JMenuItem, então como fazer isso?

}
Eric_Yuzo

Com o nome eu não sei como fazer. Mas dá pegar o componente de um JMenu ou JMenuBar pelo índice.

Ficaria mais ou menos:

int indice = 0; jMenu.getMenuComponent(indice).setEnabled(true);
Se for para pegar um JMenu no JMenuBar ficaria:

Não é o que você está querendo, mas pode servir como alternativa.

F

Eric valeu pela ajuda, aproveitando tem como eu pegar todos os itens de uma JMenuBar?

W

fxavierds,

Desculpe, não havia me atentado ao detalhe de receber o nome do menuItem, porém construi um algoritmo com dois laços for que talvez possam ajudar, este algoritmo irá imprimir a String do nome de cada menu e item de menu, ai com a String voce pode identificar de qual menu se trata e bloquear este que estará na posicao x de m, segue abaixo.

JMenu [] e = new JMenu[jmbPrincipal.getMenuCount()];
            for(int i = 0; i < e.length; i++){
                e[i] = jmbPrincipal.getMenu(i);
                System.out.println(e[i].getName());
                JMenuItem [] m = new JMenuItem[e[i].getItemCount()];
                for(int x = 0; x < m.length; x++){
                    m[x] = e[i].getItem(x);
                    System.out.println(m[x].getName());
                }
            }

porém nao se esquece que voce deve setar a propriedade name dos menus

Eric_Yuzo

Eu conheço dois modos pra fazer isto:

Retorna um array com todos os componentes no JMenuBar.

Retorna um array com os componentes que implementam a interface MenuElement, como JMenu, JMenuItem…

F

Cara vlw pela ajuda, isso esclarece muita coisa, mas não consigo acreditar que não dá pra setar uma propriedade de um atributo de um objeto passando como parametro o seu nome…

Criado 6 de setembro de 2010
Ultima resposta 6 de set. de 2010
Respostas 7
Participantes 3