2014년 1월 22일 수요일

SWT - Color 사용하기




Color 사용하기


SWT는 시스템 색상이라 불리는 16개의 기본 색상 셋을 제공하기 위해 디스플레이의 getSystemColor() 메서드를 사용합니다. 이 메서드는 SWT의 색상 상수를 나타내는 정수를 취하고, Color 객체를 반환합니다.


SWT 색상 상수색상 16진 값
SWT.COLOR_BLACK0x000000
SWT.COLOR_DARK_GRAY0x808080
SWT.COLOR_GRAY0xC0C0C0
SWT.COLOR_WHITE0xFFFFFF
SWT.COLOR_RED0xFF0000
SWT.COLOR_DARK_RED0x800000
SWT.COLOR_MAGENTA0xFF00FF
SWT.COLOR_DARK_MAGENTA0x800080
SWT.COLOR_YELLOW0xFFFF00
SWT.COLOR_DARK_YELLOW0x808000
SWT.COLOR_GREEN0x00FF00
SWT.COLOR_DARK_GREEN0x008000
SWT.COLOR_CYAN0x00FFFF
SWT.COLOR_DARK_CYAN0x008080
SWT.COLOR_BLUE0x0000FF
SWT.COLOR_DARK_BLUE0x000080
    SWT에 의해 제공되는 기본 시스템 색상

만약 이 기본 색상들 외의 색상을 사용하려면, 원하는 RGB 값에 대응하는 Color 객체를 할당해야 합니다.


아래의 코드는 두 도형을 색칠하는 Canvas를 생성하는 예제입니다.


예제코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.swtjface.Ch7;
 
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
 
public class Ch7_Colors extends Canvas {
 
  public Ch7_Colors(Composite parent) {
    super(parent, SWT.NONE);
  
    //Canvas 배경을 위해 시스템 색상을 사용
    setBackground(this.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
    addPaintListener(drawListener);
  
  }
 
  PaintListener drawListener = new PaintListener() {
    public void paintControl(PaintEvent pe) {
      Display disp = pe.display;
   
      //RGB 값에 기반한 Color 객체 생성
      Color light_gray = new Color(disp, 0xE0, 0xE0, 0xE0);
   
      GC gc = pe.gc;
      gc.setBackground(light_gray);
      gc.fillPolygon(new int[] { 20, 20, 60, 50, 100, 20 });
      gc.fillOval(120, 30, 50, 50);
   
      //Color 객체 할당 해제
      light_gray.dispose(); 
    }
  };
}



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.swtjface.Ch7;
 
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
 
public class ColorTest extends ApplicationWindow {
 public ColorTest() {
  super(null);
 }
 
 protected Control createContents(Composite parent) {
  Ch7_Colors composite = new Ch7_Colors(parent);
  
  getShell().setText("Widget Window");
  parent.setSize(200, 150);
  return parent;
 }
 
 public static void main(String[] args) {
  ColorTest tc = new ColorTest();
  tc.setBlockOnOpen(true);
  tc.open();
  Display.getCurrent().dispose();
 }
 
}


테스트




색상을 만들어내기 위해 Display 객체가 필요한데, 이는 Canvas와 결합한 getDisplay() 메서드를 사용합니다. 그러나 PaintListener 인터페이스는 생성자 멤버에게 접근할 수 없기 때문에, 생성자에서 PaintListener 를 추가하여 PaintListener 에 속해있는 PaintEvent 의 display 필드를 사용할 수 있습니다.



댓글 없음:

댓글 쓰기