Есть много и много способов сделать это, но вы ищете что-то, что автоматически выяснит колонки или что? Если вы использовали фрагменты отражения java, вы можете прочитать аннотации Hibernate, чтобы узнать имена столбцов и заполнить JTable таким образом ...
В противном случае это просто прямой фрагмент кода, который a. создает JTable и TableModel и b. заполняет дисплей данными базы данных.
EDIT: I описание товара это example may cover walking the annotation tree and processing them. Специфика - это часть AnnotationProcessorFactory iirc.
EDIT 2: Я также нашел эту библиотеку, которая является built to help lookup annotations at runtime. Один из их примеров - это поиск классов Entity в hibernate для создания списка ресурсов. Я полагаю, вы могли бы сделать что-то похожее, чтобы найти классы, которые реализуют @column или @basic и т. Д. Это должно позволить вам через отражение довольно легко сделать это, но, как я уже сказал, стандартная библиотека java уже предоставляет возможность ходить по дереву аннотаций, чтобы узнать имена столбцов - в этот момент создание JTable из этого должно быть очень легко сделать программным способом.
EDIT 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);
}
Было бы неплохо, если бы он автоматически определял столбцы. Я заметил, что я могу выполнить List.toArray(), а затем присоединить toArray() к классу Files. Кажется беспорядочным. Настройка отражения может быть разумной. –