Ola a todos do Forum.
Este é um dos meus primeiros posts, desculpem se tiver postado em local inapropriado. Mas ja estou ha dois dias pesquisando sobre o assunto e estou com um problema que nao consigo resolver.
É o seguinte: A ideia é cadastrar em um arquivo properties os labels para alguns componentes e depois seta-los via reflection.
Por exemplo tenho uma classe PanelProdutosMain que possui os botoes addButton, removeButton, pdfButton. Sendo assim, eu verifico no properties se existe um label cadastrado para aquele elemento do panel, se tiver eu preciso obter a instancia do botao e trocar o texto.
Isso é um trecho do arquivo properties de configuração…
br.com.amostech.stock.controller.view.app.panes.PanelProdutosMain.addButton=Adicionar
br.com.amostech.stock.controller.view.app.panes.PanelProdutosMain.removeButton=Remover
br.com.amostech.stock.controller.view.app.panes.PanelProdutosMain.pdfButton=Editar
Pensei na seguinte maneira:
Ter uma função que carrega o properties e verifica os campos do panel que ela recebeu como parametro (“clazz”) e atualiza as instancias do painel.
Codigo da função que estou utilizando para carregar o properties:
public static void chargeLanguageForClass(Class<?> clazz) {
/*
* Fazer introspecção nos fields dessa classe e verificar quais deles
* estao no properties setando assim o seu texto...
*/
Field field[] = clazz.getDeclaredFields();
for (int i = 0; i < field.length; i++) {
String fieldName = field[i].getName();
// System.out.println("Achei "+fieldName);
String propertyValue = PropertiesLoaderImpl.getValue(clazz
.getName()
+ "." + fieldName); // Isso é a minha função para ler do properties a propriedade associada a cada elemento da classe que eu passei
if (propertyValue == null) {
// System.out.println("Nao achei no properties: "
// + clazz.getName() + "." + fieldName);
} else {
// System.out.println("Achei no properties: " + clazz.getName()
// + "" + fieldName);
if (field[i].getType().getSimpleName().equals("JButton")) {
//AQUI EU PRECISO PEGAR O BOTAO DA CLASSE clazz e SETAR O SEU VALOR
} else if (field[i].getType().getSimpleName().equals("JLabel")) {
//AQUI EU PRECISO PEGAR O LABEL DA CLASSE clazz e SETAR O SEU VALOR
} else if (field[i].getType().getSimpleName().equals(
"JTextField")) {
//AQUI EU PRECISO PEGAR O TEXTFIELD DA CLASSE clazz e SETAR O SEU VALOR
} else if (field[i].getType().getSimpleName().equals("JMenu")) {
//AQUI EU PRECISO PEGAR O MENU DA CLASSE clazz e SETAR O SEU VALOR
} else if (field[i].getType().getSimpleName().equals(
"JMenuItem")) {
//AQUI EU PRECISO PEGAR O MENUITEM DA CLASSE clazz e SETAR O SEU VALOR
}
}
}
}
No local onde pus o comentario: //AQUI EU PRECISO PEGAR O BOTAO DA CLASSE clazz e SETAR O SEU VALOR
Ja tentei de tudo para pegar a instancia do Field…
JButton btn;
try {
btn = (JButton) field[i].get(clazz);
btn.setText("Add paress");
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Sei que estou fazendo algo de errado, pois estou obtendo IllegalArgumentException…
Ai vem a pergunta… Como faço para obter uma intancia de um Field obtido por reflection e fazer o cast para JButton por exemplo para poder chamar o setText…
Agradeço desde ja!