Reflect

Boa tarde a todos, espero que consigam me ajudar.

Estou tentando fazer um classe para auxiliar na aquisição e exibição dos dados de um JFrame, qual o problema, não consigo por exemplo fazer a chamada de um método de um atributo do JFrame por exemplo: não consigo fazer a chamada do setText de um JTextField

Esse seria o código do exemplo para um JTextField:

 public void showObject(Object gui, Object obj) {
        Method methObj, methGui;
      
        String name;
        for (Field fieldGui : gui.getClass().getDeclaredFields()) {
            for (Field fieldObj : obj.getClass().getDeclaredFields()) {
                if (!fieldObj.getName().equalsIgnoreCase("serialVersionUID")) {
                    try {
                        name = fieldObj.getName();
                        name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());

                        methObj = obj.getClass().getMethod("get" + name);

                        Object retobj = methObj.invoke(obj);

                        if (retobj != null) {
                            if (fieldGui.getName().contains(obj.getClass().getSimpleName() + "_" + fieldObj.getName())){
                                if (fieldGui.getType().equals(JTextField.class)) {
                                    methGui = fieldGui.getType().getMethod("setText", String.class);
                                    methGui.invoke(fieldGui, retobj);
                                }
                            }
                        }
                    } catch (Throwable e) {
                        System.err.println(e);
                    }
                }
            }
        }
    }

Esse é o erro que da:

[color=red]java.lang.IllegalArgumentException: object is not an instance of declaring class[/color]

Para mim o fieldGui era uma instância do JTextField.

Muito Obrigado pela atenção

Será que o erro não está no retobj?

methGui = fieldGui.getType().getMethod("setText", String.class); methGui.invoke(fieldGui, retobj);

Você declara que o parâmetro é to tipo String, mas o retobj pode ser qualquer coisa.

Faz alguma função para converter retobj para String.

Infelizmente não foi esse o problema.

fieldGui é um Field, não um JTextField, você tem que pegar o valor do Field (que deve ser um JTextField) e chamar ométodo nele, não em fieldGui.