Pessoal,
Estou precisando criar uma barra de navegação entre os registros de uma classe.(Entity)
Criei uma barra de ferramentas com diversos botões de navegação entre os registros de uma entidade(Adicionar, remover, Editar, Salvar, Cancelar, Próximo Registro, Registro anterior, Primeiro Registro, Ultimo Registro).
MInha idéia é que esse componente funcione para qualquer tipo de classe.EX:
Tenho uma Entity que mapeia uma tabela de cadastro de usuários(TBUsers), outra para grupos(TBGroups)…
Criei um componente que extende JTextFiel com uma propriedade chamada fieldName(JDevTextField).
Minha idéia é que quando o botão da barra de navegação “Salvar” for acionado, eu procure no JFrame os componentes JDevTextField, pegue o conteudo da propriedade fieldName e busque o valor da Entity que está relacionada a ele.
Me deparei com alguns problemas para fazer isso, o principal deles é:
Como obter o valor do método da entidade.EX:
Na minha entity TBUser tenho o metodo getName.
No meu JFrame eu tenho um componente JDevTextField com o valor da propriedade fieldName como “Name”.
Como eu faço para instanciar a classe TBUsers e chamar o método getName dela? preciso fazer isso através de reflection? existe outro jeito?
Trecho do código onde é chamado o botão Salvar em minha barra de navegação
private void btnEditSaveActionPerformed(ActionEvent evt) {
// defaultToolbarInterface tb = (defaultToolbarInterface)jf;
//Pegando todos os componentes dentro do JInternalFrame (jf)
Component[] comps = jf.getRootPane().getComponents();
JDevTextField txtField;
for (Component c : comps){
if (c instanceof JDevTextField){
txtField = (JDevTextField) c;
//Pegando o valor do fieldName
String columnName = txtField.getFieldName();
//Arrumando o nome do método
columnName = "get" + columnName;
//Pegando todos os métodos da minha classe(currentObject é a
// minha classe TBUsers
//)
Method[] mts = currentObject.getClass().getMethods();
for(Method m : mts){
if ( m.getName().equals(columnName)){
//Não entendo os parâmetros que invoke precisa... pois meu
//método retorna apenas um valor string e não recebe nenhum parâmetro
txtField.setText(m.invoke(?,?));
}
}
}
}
}
Outro problema é que a minha barra de navegação deve funcionar com vários tipos de classes, ex: TBUsers, TBGroups… portanto, eu não posso fixar o tipo do currentObject.Estou utilizando o tipo Object mas eu queria saber também se é possivel passar para minha barra de navegação o tipo da classe que eu precisava instanciar.EX:
Em minha barra de navegação, meu construtor é:
public DBToolbar(Class c, JInternalFrame jf, List AllObjects){
//Class c é o tipo da classe que eu preciso instanciar para obter os métodos
//JInternalFrame jf é o meu JInternalFrame que contém os JDevTextField
//List AllObjects é um List com todos os registros da minhas tabelas
// Como eu posso instanciar uma classe do tipo TBUsers?
Class nClass = Class.forName(c.getName);??? não funciona...
}
Espero não ter sido confuso ao explicar meus problemas…rrsrsrs
Agradeço qualquer ajuda!