Java 如何在ColumnLabelProvider的文本之后和之前添加图像
我尝试过扩展ColumnLabelProvider,并将下面的代码用于复选框树查看器Java 如何在ColumnLabelProvider的文本之后和之前添加图像,java,swt,jface,Java,Swt,Jface,我尝试过扩展ColumnLabelProvider,并将下面的代码用于复选框树查看器 getTree().addListener(SWT.PaintItem, new Listener() { @Override public void handleEvent(Event event) { TreeItem treeItem = (TreeItem) event.item; Confi
getTree().addListener(SWT.PaintItem, new Listener() {
@Override
public void handleEvent(Event event) {
TreeItem treeItem = (TreeItem) event.item;
ConfigTreeViewNode item = (ConfigTreeViewNode) treeItem.getData();
if (!(item instanceof ConfigTreeViewNodeConfig)) {
return;
}
ConfigTreeViewNodeConfig configNode = (ConfigTreeViewNodeConfig) item;
if (configNode.getValidationMessage() == null) {
return; // not evaluated yet
}
ConfigTreeViewLabelProvider labelProvider = (ConfigTreeViewLabelProvider) getLabelProvider();
Image image = labelProvider.getConversionValidationStateImage(configNode.getValidationMessage());
int x = event.x + event.width + 2; // give small margin
int itemHeight = getTree().getItemHeight();
int imageHeight = image.getBounds().height;
int y = event.y + (itemHeight - imageHeight) / 2;
event.gc.drawImage(image, x, y);
}
});
在此之后,我可以看到ImageICON LabelText ImageICON,如下所示
但当我将鼠标移到节点上时,只会突出显示第一个图像和文本,工具提示也会出现。我还想突出显示第三幅图像,并想像其他选择一样带来工具提示。您使用的是JFace
TableViewer
还是普通SWTTree
?嗨,鲁迪格,我使用的是org.eclipse.JFace.viewers.checkboxTreeViewer。您的绘制代码很可能会干扰JFaceLabelProvider
代码。经验法则:当小部件由JFace查看器提供时,不要弄乱它。您应该改用OwnerDrawLabelProvider
。你好,鲁迪格,感谢您的输入,我尝试了OwnerDrawLabelProvider,我可以添加图像和文本。。但在鼠标上的图像和文本不是高亮度的,而且在我第一次选择后,我得到了一个蓝色的高亮度行。我在这里遗漏了什么吗?蓝色背景是带有SWT的线的默认处理。由所有者绘制擦除方法选择。你可以覆盖这个。