Есть много и много способов сделать это, но вы ищете что-то, что автоматически определит столбцы или что? Если вы использовали части отражения java, вы можете прочитать аннотации Hibernate, чтобы узнать имена столбцов и заполнить JTable таким образом ...
В противном случае это просто кусок кода, который a. создает JTable и TableModel, и б. заполняет дисплей данными базы данных.
EDIT:
Я думаю этот пример может охватить обход дерева аннотаций и их обработку . Специфика - это часть iirc AnnotationProcessorFactory.
РЕДАКТИРОВАТЬ 2:
Я также обнаружил, что эта библиотека создана для поиска аннотаций во время выполнения . Один из их примеров - поиск классов Entity в hibernate для создания списка ресурсов - я полагаю, вы могли бы сделать что-то похожее, чтобы найти классы, которые реализуют @column или @basic и т. Д. Это должно позволить вам с помощью отражения довольно легко сделать это, но, как я уже говорил, стандартная библиотека java уже предоставляет возможность обходить дерево аннотаций, чтобы узнать имена столбцов - в этот момент создание JTable из этого должно быть очень простым программным способом.
РЕДАКТИРОВАТЬ 3:
Этот код - все это и мешок чипсов! Отсюда вы легко сможете просматривать список карт и извлекать все нужной вам информации, значение, тип его класса, имя поля для заголовков столбцов ... Обратите внимание, что это не так. не особенно безопасно .. Я пропустил весь код ошибки, который я сделал во время тестирования, чтобы он был коротким ...
List<Map> createTable(List queryResults) {
List<Map> r = new LinkedList<Map>();
for (Object o : queryResults) {
r.add(entityMap(o));
}
return r;
}
Map entityMap(Object obj) throws Throwable {
Map m = new HashMap();
for (Field field : getFields(obj.getClass())) {
Method method = getMethod(field);
Object value = method.invoke(obj);
m.put(field, value);
}
return m;
}
List<Field> getFields(Class<?> clazz) {
List<Field> fields = new LinkedList<Field>();
for (Field field : clazz.getDeclaredFields()) {
Column col = field.getAnnotation(Column.class);
if (col != null)
fields.add(field);
}
return fields;
}
Method getMethod(Field field) throws NoSuchMethodException {
Class<?> clazz = field.getDeclaringClass();
String name = "get" + uppercase(field.getName());
Method method = clazz.getMethod(name);
return method;
}
String uppercase(String str) {
return str.substring(0,1).toUpperCase() + str.substring(1);
}