Eclipse:表列图像是否透明?
一旦我开始在Eclipse表格单元格中绘制自己的图像,高亮显示该表格单元格会产生一种奇怪的高亮显示颜色。你自己看看: 虽然透明度实际上像在第一列中一样被保留,但高光蓝色并不像它应该的那样蓝。这是我的错还是Eclipse的错 下面是代码片段:Eclipse:表列图像是否透明?,eclipse,swt,jface,Eclipse,Swt,Jface,一旦我开始在Eclipse表格单元格中绘制自己的图像,高亮显示该表格单元格会产生一种奇怪的高亮显示颜色。你自己看看: 虽然透明度实际上像在第一列中一样被保留,但高光蓝色并不像它应该的那样蓝。这是我的错还是Eclipse的错 下面是代码片段: public class TransparentOrNot { public static void main(String[] args) { Display firstDisplay = new Display(); Shell
public class TransparentOrNot {
public static void main(String[] args) {
Display firstDisplay = new Display();
Shell firstShell = new Shell(firstDisplay);
firstShell.setText("Transparent-or-not!");
firstShell.setSize(300, 200);
firstShell.setLayout(new FillLayout());
TableViewer viewer = new TableViewer(firstShell, SWT.MULTI);
viewer.getTable().setLinesVisible(true);
viewer.getTable().setHeaderVisible(true);
TableViewerColumn tableViewerColumn = new TableViewerColumn(viewer, SWT.CENTER);
tableViewerColumn.getColumn().setText("First");
tableViewerColumn.getColumn().setWidth(150);
tableViewerColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public Image getImage(Object element) {
return ImageDescriptor.createFromFile(TransparentOrNot.class, "/red.png").createImage();
}
@Override
public String getText(Object element) {
return null;
}
});
tableViewerColumn = new TableViewerColumn(viewer, SWT.CENTER);
tableViewerColumn.getColumn().setText("Second");
tableViewerColumn.getColumn().setWidth(150);
tableViewerColumn.setLabelProvider(new CenterImageLabelProvider());
viewer.setContentProvider(ArrayContentProvider.getInstance());
viewer.setInput(new String[][]{{"a", "b"}, {"c", "d"}});
firstShell.open();
while (!firstShell.isDisposed()) {
if (!firstDisplay.readAndDispatch()) {
firstDisplay.sleep();
}
}
firstDisplay.dispose();
}
static class CenterImageLabelProvider extends OwnerDrawLabelProvider {
@Override
protected void measure(Event event, Object element) {
// no-op
}
@Override
protected void paint(Event event, Object element) {
Image image = ImageDescriptor.createFromFile(TransparentOrNot.class, "/green.png").createImage();
Widget item = event.item;
Rectangle bounds = ((TableItem) item).getBounds(event.index);
Rectangle imgBounds = image.getBounds();
bounds.width /= 2;
bounds.width -= imgBounds.width / 2;
bounds.height /= 2;
bounds.height -= imgBounds.height / 2;
int x = bounds.width > 0 ? bounds.x + bounds.width : bounds.x;
int y = bounds.height > 0 ? bounds.y + bounds.height : bounds.y;
event.gc.drawImage(image, x, y);
}
}
}
覆盖erase()而不调用super.erase()会有所帮助。您是否检查了线索?您是否获得了默认的系统“选择”样式?在Win7上面临同样的问题,我想显示的不是自定义背景,而是windows背景