The AbstractTreePage is a legacy class from a really long time ago (if I remember correctly).
I don't know if it would 'fit' in the 'newer' architecture we have.
Typically, we use the AbstractTablePage, the lefthand side is implemented by subclasses implementing the protected abstract Table createList(); method. The right hand side is actually done in the AbstractPage class. Check the setDetailComponent() method.
For example for process definitions, the table on the left has a value change listener:
<blockcode>
processDefinitionTable.addListener(new Property.ValueChangeListener() {
private static final long serialVersionUID = 1L;
public void valueChange(ValueChangeEvent event) {
showProcessDefinitionDetail((String) event.getProperty().getValue());
}
});
</blockcode>
and it calls this method:
<blockcode>
protected void showProcessDefinitionDetail(String selectedModelId) {
detailPanel = new EditorProcessDefinitionDetailPanel(selectedModelId, this);
setDetailComponent(detailPanel);
changeUrl("" + selectedModelId);
}
</blockcode>
the setDetailComponent() will change the right hand side.