我开发Eclipse RCP应用程序并遇到了Table的问题.我们在数据库中有一些布尔格式的数据,用户希望使用复选框查看该字段.
我尝试使用Button(SWT.CHECK)作为表编辑器来实现它,但它工作得太慢了:(
我试图使用2个图像 – 选中和未选中的复选框,它可以工作,但我无法将它们对齐到中心,它们会自动对齐.
我甚至找到了如何捕获SWT.MeasureItem和SWT.PaintItem事件并通过change event.x字段手动处理它们,但是我遇到了一个问题 – 我现在无法得到什么列测量或绘画,因为事件没有向我提供了这些信息.
它是通过重绘时修改事件数据来将图像对齐到中心的唯一方法,还是可以通过其他方式通过复选框表示布尔数据?我现在不需要编辑它们,所以只读模式就足够了.
最佳答案
您可以将PaintListener添加到表中以及何时绘制所选列(在我的示例中为第5列),检查行的大小并自行对齐图像.
testTable.addListener(SWT.PaintItem, new Listener() {
@Override
public void handleEvent(Event event) {
// Am I on collumn I need..?
if(event.index == 5) {
Image tmpImage = IMAGE_TEST_PASS;
int tmpWidth = 0;
int tmpHeight = 0;
int tmpX = 0;
int tmpY = 0;
tmpWidth = testTable.getColumn(event.index).getWidth();
tmpHeight = ((TableItem)event.item).getBounds().height;
tmpX = tmpImage.getBounds().width;
tmpX = (tmpWidth / 2 - tmpX / 2);
tmpY = tmpImage.getBounds().height;
tmpY = (tmpHeight / 2 - tmpY / 2);
if(tmpX <= 0) tmpX = event.x;
else tmpX += event.x;
if(tmpY <= 0) tmpY = event.y;
else tmpY += event.y;
event.gc.drawImage(tmpImage, tmpX, tmpY);
}
}
});
相关文章
转载注明原文:java – 如何将图像与表格单元格的中心对齐(SWT表) - 代码日志