KTable
采用的是适配器模式,因为就表现形式来说,KTable采用的是表格方式展现数据,样式基本固定,而数据来源则千差万别:List、HashMap、XML文件、数据库等等,因此采用适配器模式,在数据来源和表现形式之间架起一座桥梁,使得数据可以正确的显示出来。
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
类在绘制表格的时候调用,因此需要在这些接口内根据自己的实际情况进行相应处理。