Desabilitar JButton via reflexão[Resolvido]

Devido a arquitetura e requisitos do sistema precisar desabilitar um JButton a partir de regras de anotações e permissões

[quote]@PermissaoAnnotationField(Acao=“incluir”,Objeto=“telaCadastroProfissional”,Visivel=true)
private javax.swing.JButton btnCadastrar; [/quote]

fiz o seguinte método:

private void checkPermission() { Field[] fields = this.getClass().getDeclaredFields(); for (Field f : fields) { PermissaoAnnotationField per = f.getAnnotation(PermissaoAnnotationField.class); if(per!=null){ if(!verificarPermissaoUsuario(per.Objeto(), per.Acao())){ try { f.setAccessible(false); } catch (IllegalArgumentException ex) { Logger.getLogger(CadastrarProfissional.class.getName()).log(Level.SEVERE, null, ex); } } } } }

No construtor do JInternalframe estou fazendo assiim:

public CadastrarProfissional() { super("Cadastro de profissionais", false, true); initComponents(); checkPermission(); }

que quando iniciar um JInternalFrame ele por reflexão desabilitar o botão, estou usando setAcessible(false) porém não esta resolveldo, o que estou fazendo de errado?
O que estou tentando fazer é possivel mesmo?

Em vez de:

f.setAccessible(false);

Faça:

f.setAccessible(true); //o campo declarado precisa ser acessível JComponent component = (JComponent) f.get(this); //este é o objeto referente ao campo component.setVisible(false);

O que você quer fazer é possível, sim. Você só está fazendo confusão com o objeto Field, que nada tem a haver com seus componentes visuais. Ele representa o atributo de classe declarado no seu frame.

Para ter acesso ao objeto de fato, você precisa pegar o valor do atributo em uma instância (método “get(instancia)”). O problema é que se o atributo for privado, será lançada uma exceção. Para evitar isso existe o método setAcessible, apenas note que isso não fará o atributo ser acessível fora da classe e, sim, via reflexão (e somente com o objeto Field usado).

Ah! Faltou uma verificação no código que postei pra evitar NullPointer caso a variavel component seja nula.

Ai Ataxexe deu certo aqui, vlws pela ajuda rapaz, salvou minha vida, vou colocoar o topico como resolvido