3
일단 이클립스 표 셀에서 내 자신의 이미지를 그리기 시작하면, 그 표 셀을 강조 표시하면 이상한 강조 색상이된다. 자신에 대한 참조 : 투명성이 실제로 첫 번째 열에처럼 보존Eclipse : 테이블 열 이미지가 투명하지 않습니까?
동안, 하이라이트 블루가 정상적으로처럼 파란색이 아니다. 이게 내 잘못이야, 이클립스의 잘못이야?
이 여기에 코드입니다 :
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);
}
}
}
실마리를 찾기 위해 http://www.eclipse.org/articles/article.php?file=Article-CustomDrawingTableAndTreeItems/index.html을 확인 했습니까? – VonC