Java_Boy 4 de mar. de 2010
Tá, mas essas classes existem certo?
Porque ai voce podia fazer assim:
String nomeClasse = "br.com.algumacoisa.Principal";
classeX = Class.forName(nomeClasse );
objetoClasseX = classeX .newInstance();
Sacou?
muriloazs 4 de mar. de 2010
Se eu entendi direito, você quer montar um código java com Strings?
Não é possível, por que tudo isso vai ser compilado como uma “cadeia de caracteres” e não como código da linguagem.
Qual o problema inicial?
com certeza dá pra resolver de outra forma.
[atualizado]
Ou do jeito que o cara de cima fez.
lauronolasco 4 de mar. de 2010
Object obj = Class . forName ( "pacote.Principal" ). newInstance ();
obj . getClass (). getMethod ( "setVisible" , Boolean . class ). invoke ( obj , new Object [] { true });
lauronolasco 4 de mar. de 2010
nao esquecer do bloco TRY CATCH
entanglement 4 de mar. de 2010
Objetos não têm nomes (surpreso com isso), mas variáveis, classes e métodos têm. Portanto, você pode acessar uma variável, classe ou método através de reflection (ou seja, por nome). Um objeto não tem nome.
lauronolasco 4 de mar. de 2010
perdao… esqueci da field JMenuItem1… ok…
entao:
Object obj = Class . forName ( "pacote.Principal" ). newInstance ();
Object objMenu = obj . getClass (). getField ( "JMenuItem1" ). get ( obj );
objMenu . getClass (). getMethod ( "setVisible" , Boolean . class ). invoke ( objMenu , new Object [] { true });
Importante: JMenuItem1 deve ser publico
charlesfs 4 de mar. de 2010
O Pessoal é rápido aqui heim!! Muito obrigado pelas respostas!
lauronolasco
Tentei o seu código conforme o que tem aqui e ficou assim:
public static void test () throws InstantiationException , IllegalAccessException , NoSuchFieldException , NoSuchMethodException , IllegalArgumentException , InvocationTargetException {
Object obj ;
try {
obj = Class . forName ( "HotSpot.Login" ). newInstance ();
Object objMenu = obj . getClass (). getField ( "conectar_botao" ). get ( obj );
[ b ] System . out . println ( objMenu . toString ()); [/ b ]
objMenu . getClass (). getMethod ( "setVisible" , Boolean . class ). invoke ( objMenu , new Object [] { false });
} catch ( ClassNotFoundException ex ) {
Logger . getLogger ( Test . class . getName ()). log ( Level . SEVERE , null , ex );
}
Resultado:
run :
javax . swing . JButton [, 179 , 78 , 92 x24 , alignmentX = 0.0 , alignmentY = 0.5 , border = javax . swing . plaf . synth . SynthBorder ...
Exception in thread "main" java . lang . NoSuchMethodException : javax . swing . JButton . setVisible ( java . lang . Boolean )
at java . lang . Class . getMethod ( Class . java : 1605 )
at HotSpot . Test . aiai ( Test . java : 32 )
at HotSpot . Test . main ( Test . java : 19 )
Ao que indica ta encontrando o botão corretamente.
O que eu fiz de errado? :roll:
lauronolasco e pessoal muito obrigado!
entanglement 4 de mar. de 2010
Olhando a documentação de setVisible, você vê que ele precisa de um boolean (primitivo), não um java.lang.Boolean (objeto). http://java.sun.com/javase/6/docs/api/javax/swing/JComponent.html#setVisible(boolean)
Portanto, você deve chamar getMethod com “boolean.class”, não “Boolean.class”.
charlesfs 5 de mar. de 2010
entanglement:
Olhando a documentação de setVisible, você vê que ele precisa de um boolean (primitivo), não um java.lang.Boolean (objeto). http://java.sun.com/javase/6/docs/api/javax/swing/JComponent.html#setVisible(boolean)
Portanto, você deve chamar getMethod com “boolean.class”, não “Boolean.class”.
Perfeito!
[size=18]
Muito Obrigado a todos! Valew mesmo! [/size]
charlesfs 9 de mar. de 2010
Eu tenho um Classe com JFrame chamado "Principal" e nele há um menu e alguns botões.
Tenho uma consulta sql que retorna em string as variáveis dos botoes e itens de menu e se o objeto deve ser mostrado ou escondido.
Por isso solicitei uma maneira de usar um setvisible dinamico mas estou com dificuldades.
O que está ocorrendo é que o método abaixo que está em outra classe(Checavisivel) não está setando a propriedade no objeto da classe indicada(Principal).
public static void SetaVisivel() throws InstantiationException, IllegalAccessException, NoSuchFieldException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Object obj;
try {
obj = Class.forName("pacote.Principal").newInstance();
Object objMenu = obj.getClass().getField("jButton_1").get(obj);
objMenu.getClass().getMethod("setVisible", boolean.class).invoke(objMenu, new Object[]{false});
} catch (ClassNotFoundException ex) {
Logger.getLogger(SetaVisivel.class.getName()).log(Level.SEVERE, null, ex);
}
Alguem consegue identificar o meu erro/burrice?
Muito Obrigado a todos!