Skip to main content

Gooey Table Model

Posted by evanx on October 2, 2007 at 6:33 AM PDT

We introduce a generic table model supporting a list of backing beans, with simplistic "beans binding" facilitated by java.beans.PropertyDescriptor.

Gooey Table Model, an informative column: A part of "Gooey Beans, a trilogy in 42 parts"


We implement a table model in our application as follows.

public class ProductMovementDetailTableModel extends GTableModel {
    ProductMovementDetailInfo info = new ProductMovementDetailInfo();
   
    GTableColumn productId = createColumn(info.productId);
    GTableColumn label = createColumn(info.label);
    GTableColumn productUnit = createColumn(info.productUnit);
    GTableColumn unitCost = createColumn(info.unitCost);
    GTableColumn quantity = createColumn(info.quantity);
    GTableColumn amount = createColumn(info.amount);
   
    public ProductMovementDetailTableModel() {
        super(ProductMovementDetail.class);
        ... // setEditable() on column objects
    }   
}

where we create column objects to contain metadata eg. column headings, types, et cetera.

Each row of the table has a backing bean, eg. ProductMovementDetail in the above example. As presented in the Gooey Beans Info prequel, we define metadata for the bean's properties in a "bean info" object, eg. ProductMovementDetailInfo. The column objects wrap "property info" objects which are created in the bean info class.

A controller is implemented to handle events from the table component, eg. row selection and cell editing. The beans and column objects are used in these event handlers to reference rows and columns.

Disclaimer: This design predates JSR 295 (Beans Binding), which is the future, and so will be presented in future, in this series' 2nd Edition ;)

Incidently, the days of my publishing an article every month in this Foundation series seem to have come to an end, because i've been travelling. Right now i'm in Germany, and from next week i'll be cycling across southern France and northern Spain (woohoo!) without a computer, so um, zero productivity...

Resources

https://code.google.com/p/vellum/ - where i will collate these articles and their code.

Related Topics >>