前段时间做Sametime的插件,遇到了需要设置table行高的问题。乍一看,Table和TableItem类中都没有相应的方法可用。于是上网问了一下google,首先找到了一个比较偏门的方法,就是通过设置指定height的Image来改变行高,代码演示如下:
Display display
=
new
Display();
Shell shell
=
new
Shell(display);
shell.setBounds(
10
,
10
,
200
,
250
);
Table table
=
new
Table(shell, SWT.NONE);
table.setBounds(
10
,
10
,
150
,
200
);
table.setLinesVisible(
true
);
int
rowHeight
=
30
;
TableItem item1
=
new
TableItem(table, SWT.NONE);
item1.setText(
"
item 1
"
);
TableItem item2
=
new
TableItem(table, SWT.NONE);
item2.setText(
"
item 2
"
);
TableItem item3
=
new
TableItem(table, SWT.NONE);
item3.setText(
"
item 3
"
);
Image image
=
new
Image(display,
1
, rowHeight);
item1.setImage(image);
shell.open();
while
(
!
shell.isDisposed()) {
if
(
!
display.readAndDispatch())
display.sleep();
}
display.dispose();
不过就算我只在item1上setImage,item2和item3行高也会一起改变,没法单独指定某一行的高度。
第2种方法相对正式一点,是通过捕获SWT.MeasureItem事件来定制单元格的高度和宽度,具体内容可参看原文
Custom Drawing Table and Tree Items,代码演示如下:
Display display
=
new
Display();
Shell shell
=
new
Shell(display);
shell.setBounds(
10
,
10
,
200
,
250
);
final
Table table
=
new
Table(shell, SWT.NONE);
table.setBounds(
10
,
10
,
150
,
200
);
table.setLinesVisible(
true
);
final
int
rowHeight
=
30
;
for
(
int
i
=
0
; i
<
5
; i
++
) {
new
TableItem(table, SWT.NONE).setText(
"
item
"
+
i);
}
table.addListener(SWT.MeasureItem,
new
Listener() {
public
void
handleEvent(Event event) {
event.height
=
rowHeight;
}
});
shell.open();
while
(
!
shell.isDisposed()) {
if
(
!
display.readAndDispatch())
display.sleep();
}
display.dispose();
同样的,这个方法也不能为每一行指定不同的行高,在原文中也说了"
All items in a table have the same height, so increasing the height of a cell will result in the height of all items in the table growing accordingly."。看来这一点在SWT中是做不到了。