Desabilitar JTextField em um JFrame em tempo de execução (netbeans aplicação desktop)

Olá pessoal,

Estou quebrando a cabeça para aplicar umas regras a um formulario JFrame, o problema é que de acordo com o usuario/papel/perfil preciso habilitar a edição ou nao de um determinado JTextField.

Estou tentando usar reflection, porem nem sei se é o mais indicado, já tentei instanceof, etc.

a ideia é ao instanciar um JFrame chamar esta funcao AplicarRegras(usuario, this) entao a classe vai verificar se tem algum atributo cadastrato em uma base para desabilita-lo de acordo com permissoes do usuario.

a funcao esta localizando o atributo(CAIXA) porem nao sei como desabilita-lo.

Segue codigo que tentei utilizar porem após varias tentativas e todas com erro estou passando para solicitar auxilio:

[code]
package Controle;

//import java.awt.Component;
import java.awt.Component;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import javax.swing.JFrame;
import javax.swing.JTextField;

/**
*

  • @author Valtemir
    */
    public class Seguranca {

    public Seguranca() {
    }
    private Method Metodo;
    private Class classe;
    private String nomeClasse;
    private String pObjeto = “CAIXA”;
    private String pTipoObjeto = “JTextField”;
    private String pMetodo = “setEnabled”;
    private boolean pvalor = false;

    public void AplicarRegras(String Usuario, Object objeto) {
    try {
    classe = objeto.getClass();
    nomeClasse = classe.getSimpleName();
    Field[] Atributos = classe.getDeclaredFields();
    for (Field Atributo : Atributos) {
    if (Atributo.getName().equals(pObjeto)) {
    //Metodo = classe.getMethod(pObjeto + “.” + pMetodo, boolean.class);
    // Metodo.invoke(classe, new Object[]{pvalor});
    Class classz = Atributo.getClass();
    System.out.println(“Classe:” + Atributo.getDeclaringClass());
    Method method = JTextField.class.getMethod(“setEnabled”, new Class[]{Boolean.TYPE});
    method.invoke(classz, false);
    System.out.println(“executou…Modo Seguranda o atributo” + pObjeto);
    }
    }
    // Method m[] = classe.getDeclaredMethods();
    // for (int i = 0; i < m.length; i++) {
    // System.out.println( m[i].toString() );
    // }

     } catch (Exception e) {
         e.printStackTrace();
     }
    

    }
    }[/code]

nem vou postar o erro pois já foi varias tentativas, varios erros, etc…

qualquer ajuda será bem vinda.

grato.

É só desabilitar o textfield?
Faz um if contendo a condição e coloca dentro dele nomeDoTextField.setEnable(false); ou nomeDoTextField.setEnable(true); caso seja permitido.
Seria interessante criar uma variável boolean e chamar o método de verificação da classe Seguranca do próprio JFrame.

Ai,será que entendi… :roll:

Quer desabilitar um JTextField,conforme usuário logado?
Se for,nosso amigo já deu a deixa,não precisa de tudo isso que vc fez.

  • ou - assim

Se usuario for x então JTextField.setEnabled(true);

Senão JTextField.setEnabled(false);

Espero ter ajudado…

É uma solução,
Porem a ideia é vc faz uma formulario(cadastro de cliente), joga ele em produção e em um determinado dia aguem decide que vendedores nao podem alterar o nome do cliente, neste bastaria cadastrar o atributo em uma tela e liberar somente para usuarios autorizados, sem necessidade de if da JtextField. ou seja qualquer campo da tela pode fazer parte do modo de segurança, para isto bastaria saber o nome que lhe foi atribuido dentro JFrame e cadastra-lo nas tabelas/permissoes.

De qualquer forma abrigado!

Se eu nao conseguir por esta logica então adicionarei os IFs nos possiveis campos que poderam vir a ser cadastrado no modo de seguranca.

Não entendi… :roll: Se for o que estou pensando,poderia usar senha,mas é melhor fazer do seu jeito mesmo… :wink:

Sim, então inverta alógica.
Quando o método de verificação for chamado, passe o JFrame em questão e o usuário, para cada elemento da tela presente no JFrame, crie um método isAurotizado (por ex, isJTextFieldAutorizado()) e então, de acordo com o perfil do usuário, vá desabilitando ou habilitando