스니펫:줄마다 테이블 배경색 다르게 지정하기

위클립스
이동: 둘러보기, 찾기
스니펫 분류
스니펫 (3)
스니펫/JDT (1)
스니펫/PDE (3)
스니펫/SWT (7)

[편집] 결과

Swt-alt-table-row-color.png

[편집] 소스

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
 
/**
 * @author Jeeeyul 2012. 2. 24. 오후 4:57:46
 */
public class AltColorTable {
   public static void main(String[] args) {
      Display display = Display.getDefault();
 
      Shell shell = new Shell();
      shell.setLayout(new FillLayout());
 
      final Table table = new Table(shell, SWT.NORMAL | SWT.FULL_SELECTION);
      table.setLinesVisible(true);
      table.setHeaderVisible(true);
 
      for (int i = 0; i < 10; i++) {
         TableItem item = new TableItem(table, SWT.NORMAL);
         item.setText("test" + i);
      }
 
      TableColumn column = new TableColumn(table, SWT.NORMAL);
      column.setWidth(200);
      column.setText("컬럼");
 
      table.addListener(SWT.EraseItem, new Listener() {
         @Override
         public void handleEvent(Event e) {
            // 첫번째 컬럼의 셀을 지우는 과정이 아니거나, 짝수번째 줄이면 무시.
            if (e.index != 0 || table.indexOf((TableItem) e.item) % 2 == 0) {
               return;
            }
 
            // 원래 그리기 문맥의 배경색상과 클리핑을 백업
            Color oldColor = e.gc.getBackground();
            Rectangle oldClip = e.gc.getClipping();
 
            // 테이블의 너비
            int tableWidth = table.getSize().x;
 
            // 클리핑된 공간의 너비를 테이블 너비 만큼 확장
            e.gc.setClipping(0, oldClip.y, tableWidth, oldClip.height);
 
            // 현재 지우고 있는 TableItem에 대해 배경을 그림
            e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
            e.gc.fillRectangle(0, e.y, tableWidth, e.height);
 
            // 원래 그리기 컨텍스트로 복원.
            e.gc.setClipping(oldClip);
            e.gc.setBackground(oldColor);
         }
      });
 
      shell.open();
 
      while (!shell.isDisposed()) {
         if (!display.readAndDispatch()) {
            display.sleep();
         }
      }
 
      display.dispose();
   }
}
개인 도구
이름공간
변수
행위
포탈
탐색
도움
도구모음