Java Swing - Generate JTable model by using JavaBean properties and reflection [Updated: Feb 2, 2018, Created: Jul 22, 2017] |
|
||
In the following example, the TableModel will be created automatically by using the JavaBean properties of the provided object and Java reflection. Creating the TableModelpublic class TableModelCreator {
public static <T> TableModel createTableModel(Class<T> beanClass, List<T> list) {
try {
BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
List<String> columns = new ArrayList<>();
List<Method> getters = new ArrayList<>();
for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
String name = pd.getName();
if (name.equals("class")) {
continue;
}
name = Character.toUpperCase(name.charAt(0)) + name.substring(1);
String[] s = name.split("(?=\\p{Upper})");
String displayName = "";
for (String s1 : s) {
displayName += s1 + " ";
}
columns.add(displayName);
Method m = pd.getReadMethod();
getters.add(m);
}
TableModel model = new AbstractTableModel() {
@Override
public String getColumnName(int column) {
return columns.get(column);
}
@Override
public int getRowCount() {
return list.size();
}
@Override
public int getColumnCount() {
return columns.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
try {
return getters.get(columnIndex).invoke(list.get(rowIndex));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
};
return model;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
The example Java Beanpublic class Employee {
private String name;
private String dept;
private String phone;
private String cellPhone;
.............
}
The main classpublic class ExampleMain {
public static void main(String[] args) {
JFrame frame = createFrame();
List<Employee> list = new ArrayList<>();
for (int i = 1; i <= 30; i++) {
Employee e = new Employee();
e.setName("name" + i);
e.setPhone("phone" + i);
e.setDept("dept" + i);
e.setCellPhone("cell" + i);
list.add(e);
}
TableModel tableModel = TableModelCreator.createTableModel(Employee.class, list);
JTable table = new JTable(tableModel);
JScrollPane pane = new JScrollPane(table);
frame.add(pane);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private static JFrame createFrame() {
JFrame frame = new JFrame("JTable example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(600, 300));
return frame;
}
}
Output
Example ProjectDependencies and Technologies Used:
|
|
||
|
|
|||
|
|
|||