Java / parse Object и загрузка его полей в JTree - PullRequest
1 голос
/ 23 марта 2012

Краткое объяснение моей проблемы, мне нужно разобрать объект и поместить его содержимое в JTree. Я знаю, что объект может иметь поля примитивных типов, но также и другие объекты. Как я могу добиться этого анализа, является ли отражение то, что я должен использовать? Я понятия не имею, сейчас.

Структура будет выглядеть примерно так:

-object1
    |
    fieldname1 = 1256
    |
    fieldname2 = 5623
    |
    object2
    |  |
    |  fieldname1 = 154
    |  |
    |  fieldname2 = 190
    |
    object3
       | 

Любая помощь будет оценена. Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Да, вы должны использовать Reflection API для обнаружения полей объекта и заполнить значения узла JTree.

Рекурсивно обрабатывать каждый объект следующим образом:

  • добавить узел в дерево
  • обрабатывает объекты из полей, объявленных в классе вашего объекта (используя Class.getDeclaredFields())
  • обрабатывает объекты из полей в каждом суперклассе вашего объекта (Class.getDeclaredFields() не возвращает унаследованные поля)
0 голосов
/ 26 мая 2012

Ниже приведен пример того, как вы можете получить нужные данные и вывести их на консоль.У меня нет опыта работы с JTree, поэтому я не могу вам помочь.

Базовая техника

for (Field field : myInstance.getClass().getDeclaredFields()) {
    String name = field.getName();
    value = field.get(myInstance).toString();
    System.out.println(name + ": " + value);
}

С перехватом ошибок

Это хорошая идея, чтобы включить перехват ошибокв это, поскольку неинициализированные поля вызовут ошибки.

for (Field field : myInstance.getClass().getDeclaredFields()) {
    try {
        String name = field.getName();
        String value = "null";
        try {
            value = field.get(myInstance).toString();
        } catch (Exception e) {
            // this probably means the field was null
        }
        System.out.println(name + ": " + value);
    } catch (Exception e) {
        System.out.println("problem with reflection: " + e);
    }
}
...