2. Custom tables - damianfraszczak/swing-dynamic-gui GitHub Wiki
Example of custom generated tables:
SWING LAF |
Substance LAF |
 |
 |
Defining custom tables
- Create used model and add
@DynamicFormField
annotations to some fields/ Let's suppose that we use the same model as for form generation
- Crate table config, context and table model
TableConfig tableConfig = new TableConfig(Person.class);
DynamicTableContext tableContext = new DynamicTableContext(
tableConfig,
tableConfig.getMetadataProvider().loadMetadata(tableConfig)
);
DynamicFieldTableAdapter tableModel = new DynamicFieldTableAdapter(tableContext);
- Create table component and show it for example in form. Please remember to do this in EDT
SwingUtils.runInEDT(()->{
JFrame frame = new JFrame();
JTable table = new JTable(tableModel);
table.setDefaultRenderer(Object.class, new DynamicTableContextRenderer(tableContext));
JScrollPane pane = new JScrollPane(table,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
frame.add(table.getTableHeader(), BorderLayout.NORTH);
frame.add(pane, BorderLayout.CENTER);
frame.setTitle("Dynamic table example");
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SwingUtils.centerOnScreen(frame, true);
frame.setVisible(true);
});
- load table data asynchronosuly besides EDT
tableModel.loadData(Arrays.asList(
Person.builder()
.name("John")
.surname("Test")
.salary(500)
.sex(Sex.MALE)
.build(),
Person.builder()
.name("Anna")
.surname("Swing")
.sex(Sex.FEMALE)
.salary(500)
.build()));