KTable 采用的是适配器模式,因为就表现形式来说,KTable采用的是表格方式展现数据,样式基本固定,而数据来源则千差万别:ListHashMapXML文件、数据库等等,因此采用适配器模式,在数据来源和表现形式之间架起一座桥梁,使得数据可以正确的显示出来。
KTable 的用法非常简单:
@Override
public void createPartControl(Composite parent) {
    // 创建 Table
    table = new KTable(parent, SWT. FULL_SELECTION | SWT. MULTI | SWT. V_SCROLL
            | SWT. H_SCROLL | SWTX. FILL_WITH_LASTCOL | SWTX. EDIT_ON_KEY );
   
    // 设置 Table 显示样式并显示数据
    table .setModel( new TableDetail());
}
 
上面用两行代码就完成了一个KTable的创建与显示,其中第二行代码就是设置一个适配器对象,用来设置表现形式,生成显示数据的,代码如下:
public class TableDetail extends KTableDefaultModel {
    private final FixedCellRenderer m_fixedRenderer = new FixedCellRenderer(
            FixedCellRenderer. STYLE_FLAT
                    | TextCellRenderer. INDICATION_FOCUS_ROW );
 
    private final TextCellRenderer m_textRenderer = new TextCellRenderer(
            TextCellRenderer. INDICATION_FOCUS_ROW );
 
    public TableDetail() {
        initialize();
    }
 
    @Override
    public KTableCellEditor doGetCellEditor( int col, int row) {
        return null ;
    }
 
    @Override
    public KTableCellRenderer doGetCellRenderer( int col, int row) {
        if (isFixedCell(col, row))
            return m_fixedRenderer ;
 
        return m_textRenderer ;
    }
 
    @Override
    public int doGetColumnCount() {
        return 3;
    }
 
    @Override
    public Object doGetContentAt( int col, int row) {
        switch (col) {
        case 0:
            return "First" ;
        case 1:
            return "Second" ;
        default :
            return "Third" ;
        }
    }
 
    @Override
    public int doGetRowCount() {
        return 3;
    }
 
    @Override
    public void doSetContentAt( int col, int row, Object value) {
        //content.put(col + "/" + row, value);
    }
 
    @Override
    public int getInitialColumnWidth( int column) {
        return 90;
    }
 
    @Override
    public int getInitialRowHeight( int row) {
        return 20;
    }
 
    @Override
    public int getFixedHeaderColumnCount() {
        return 0;
    }
 
    @Override
    public int getFixedHeaderRowCount() {
        return 1;
    }
 
    @Override
    public int getFixedSelectableColumnCount() {
        return 0;
    }
 
    @Override
    public int getFixedSelectableRowCount() {
        return 0;
    }
 
    @Override
    public int getRowHeightMinimum() {
        return 18;
    }
 
    @Override
    public boolean isColumnResizable( int col) {
        return true ;
    }
 
    @Override
    public boolean isRowResizable( int row) {
        return false ;
    }
 
}
 
TableDetail 类继承自 KTableDefaultModel ,继承自父类的函数说明如下:
函数名称
说明
doGetCellEditor
得到指定单元格的编辑器
doGetCellRenderer
得到指定单元格的绘制器
doGetColumnCount
得到表格列数量
doGetRowCount
得到表格行数量
doGetContentAt
得到指定单元格数据,这些单元格不包括固定行、列的数据
doSetContentAt
设置指定单元格数据
getInitialColumnWidth
初始化指定列宽度
getInitialRowHeight
初始化指定行高度
getFixedHeaderColumnCount
得到标题列数量
getFixedHeaderRowCount
得到标题行数量
getFixedSelectableColumnCount
 
getFixedSelectableRowCount
 
getRowHeightMinimum
得到最小行高度
isColumnResizable
列是否允许 Resize
isRowResizable
行是否允许 Resize
 
以上这些函数作为标准接口,由 KTable 类在绘制表格的时候调用,因此需要在这些接口内根据自己的实际情况进行相应处理。