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

5 respostas
V

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:

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();
        }
    }
}

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

qualquer ajuda será bem vinda.

grato.

5 Respostas

D

É 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.

A

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…

V

É 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.

A

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

D

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

Criado 2 de fevereiro de 2011
Ultima resposta 2 de fev. de 2011
Respostas 5
Participantes 3