java – 如何将图像与表格单元格的中心对齐(SWT表)

我开发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表) - 代码日志