Draw2d 툴은 사용자가 좋아하는 모든 외형과 기능을 포함함 GUI 컴포넌트를 만들 수 있게 한다.
Draw2d의 기본 클래스
클래스 | 기능 | 유사 SWT 클래스 |
LightweightSystem | 이미지를 만들기 위한 상위 레벨 환경 | Display |
Figure | LightweightSystem 내에 컴포넌트 또는 컨테이너 | Shell, Control, Composite |
Graphics | Figure 내에 그래픽 영역을 제공GC | GC |
LightweightSystem 클래스는 Display 클래스와 유사하다. 시각적으로 보여주는 것은 없지만, 이벤트 핸들링을 제공하고 외부환경과상호 작용을 하는 역할을 한다. LightweightSystem 클래스는 운영체제와 동 떨어진 계층에서 작동한다.
Draw2d의 기본적인 구조는 Canvas -> Lightweight System -> Container Figure -> 다수의 figure/Graphics
Figure 객체의 메소드
SWT의 Control 클래스와 마찬가지로 Figure 클래스는 그 프로퍼티를 조작하기 위한 많은 메소드를 가지고 있다. 크게 하단의 4가지로나눠서 설명할 수 있다.
- Figure 객체의 외형을 이용한 작업
- Figure 객체의 경계, 위치, 크기 값을 얻어내고, 설정하는 것을 포함한다. Figure 객체의 경계선 크기와 실제 영역 뿐만 아니라 최대, 최소 크기도 제어할 수 있다. 또한 Figure 객체의 전경색과 배경색을 변경하고 컨트롤 외형에 관련된 매개변수를 얻어내고, 설정하는 방법을 제공한다.
- 이벤트 핸들링
- Draw2D의 이벤트 핸들링 과정 또한 SWT와 비슷하지만, 몇 개의 새로운 이벤트와 리스너를 제공한다. SWT와 달리, Figure 객체는 여러가지 자신만의 이벤트를 다룰 수 있다. 전체 리스터의 목록과 이벤트 핸들링 메소드는 다음과 같다.
Draw2d 리스너
이벤트 핸들링 메소드
addFocusListener()
Handlefocusgained()
handleFocusLost()
addKeyListener()
handleKeyPressed()
handleKeyReleased()
addMouseListener()
handleMouseDoubleClicked()
handleMousePressed()
handleMouseReleased()
addMouseMotionListener()
handleMouseDragged()
handleMouseEntered()
handleMouseExited()
handelMouseHovered()
handelMouseMoved()
addListender()
addAncestorListener()
addFigureListener()
addPropertyChangeListener()
- 부모와 자식의 관계 정보 유지
- SWT와 Jface는 Composite 클래스를 제공하여 다른 컴포넌트에 컴포넌트를 추가하는 것을 허용한다. 그러나 Draw2D에서는 Figure 객체에 따라 컨테이너일 수도 있고, 컨테이너에 포함될 수도 있다. Figure를 언급하기 위해 부모(parent)라는 용어를 사용하고, 내부에 포함되는 Figure를 언급하기 위해 자식(child)이라는 용어를 사용한다.
메소드 | 기능 |
Add(Figure, Object, int) | 주어진 제약 조건을 가진 자식 Figure 객체와 List 인덱스를 추가한다. |
getChildren() | 자식 Figure 객체의 List를 반환한다. |
getParent() | Figure 객체의 부모 Figure 객체를 반환한다. |
setChildrenEnabled(boolean) | Figure 객체의 자식을 사용 가능하게 하거나 금지한다. |
setConstraint(Figure, object) | 주어진 자식 Figure 객체의 제약 조건을 지정한다. |
SWT에서 button 객체와 Label 객체는 생성자에서 부모를 명시하여 Composite에 자신을 추가한다. Draw2D에서는 부모 Figure 객체가 자식 List 객체에 Figure 객체를 포함하기 위해 add() 메소드를 사용한다. 이 메소드는 부모 List 객체에 임의에 제약 사항(자식 객체의 크기 또는 위치 등)이나 인덱스를 선택적으로 포함할 수 있따. 부모 Figure는 getChildren() 메소드를 이용하여 이 List 객체를 얻을수 있고, 자식 객체는 getParent()를 이용하여 부모에게 접근할 수 있다. 부모는 또한 setChildrenEnabled()를 이용하여 자식 객체를 허용하거나 금지 시킬 수 있고, setConstraint()를 이용하여 자식의 제약사항을변경할 수 있다.
- 그래픽 관리
- Draw2D가 SWT GC의 대부분의 임무를 수행하는 Graphics 클래스를 제공하지만, Figure 객체는 자기만의 몇 가지 그래픽 메소드를 가지고 있다. 즉 paint()를 이용하여 화면 표시를 제어 할 수 있을 뿐 아니라, 어떤 부분을 보여줄지 선택하기 위한 paintBorder()와 paintClientArea()를 사용할 수 있다. Figure 객체는 paintChildren()을 이용하여 자식 객체를 보여줄 수 있고, 오직 자기 자신을 보여주기 위해서는 paintFigure()를 사용한다. 또한 SWT와 비슷하게 작동하는 여러 가지 repaint() 메소드도사용 가능하다. Draw2D는 사용자가 선택한 위치에 대한 정보를 얻기 위한 메소드를 포함한다. 특히 Draw2D는 정확한 마우스위치를 다루는 반면 SWT는 오직 선택된 Control만 고려한다는 점이 다르다. 관련 메소드로는 FindMouseEventAt(), FindFigureAt() 등이 있다.
Figure 의 객체
결론부터 말하면 SWT는 객체가 액션 리스너, view를 다 가지고 나타내지만 Firgure는 나타내는 개체와 그의 액션 리스너등을 가진 객체가 서로 상이하다.
- Label 객체
- Draw2D Label 객체는 SWT의 Label 객체와 비슷하지만, 텍스트 크기 측정과 이미지 위치를 더한 더 많은 메소드를 포함하고 있다.
- getTextBounds()와 getTextLocation()을 통해 Lable 객체의 문자열 매개변수의 화면 출력 크기를 측정할 수 있다. 또한 Lable 객체와 이미지와 관련되어 있다면, getIConBounds()와 getIconAlignment()가 Image에 대한 정보를 제공한다.
- Clickable 객체
- Button과 Toggle 클래스를 포함하고 있는 이 클래스는 사용자에게 필요한 선정과 관련된 이진 정보를 제공한다. SWT의 button 객체와 같이, Button과 Toggle 클래스는 서로 동일하게 동작한다. 하지만 두개의 서로 다른점이 존재한다.
- 첫 째로 Clickable 객체는 Draw2D의 Figure 객체의 모든 외형을 가질 수 있다. 둘째 Clickable 이벤트 핸들링과 함께 동작한다.
- Draw2D 사용자 인터페이스는 일반적으로 SWT와 Jface 생성된 것 보다 더 복잡하다.
LayoutManger와 Pane 사용
-SWT의 Layout 클래스처럼, LayoutManger는 자식 컴포넌트를 콘테이너에 어떻게 배치하고 크기를 정할지 결정한다.
Draw2D의 Pane객체(ScrollPane, LayerPane)는 SWT의 Composite와 같이 배경 컨테이너 역할을 한다.
LayoutManger 하위 클래스 이해
Figure가 자신의 자식 객체들(button, Layout)등을 생성할때 먼저 figure.setLayoutManger()를 통해서 설정해주어야 한다.
메소드 | 기능 |
ABstractHintlayout | 다른 곳에 설정한 값을 가져와 자식 Figure 객체의 크기를 결정하는 Hint 제약 조건을 사용한다. |
DelegatingLayout | 자식 객체가 Locator 제약조건에 따라 자신의 크기를 지정하는 것을 허용한다. |
XYLayout | Rectangel 제약 조건에 따라 자식 객체의 크기와 위치를 지정하는 책임을 부모에게 부여한다. |
LayeredPane
- Figure 객체를 보여주기 위한 여러 단계를 제공한다. 투명한 Layer객체를 사용하여 사용자 GUI의 외관 그래픽을 구분할 수 있다. 각 Layer는 각각의 프로퍼티를 따로 갖고 있고 구분된 LayoutManger를 가지고 있다.
- 그 중의 하나인 FreeFormLayeredPane는 원하는 방향으로 윈도우를 확장할 수 있다. 그리고 또다른 종류인 ScalableLayeredPane는 윈도우 영역안에서 확장이 가능한다.
Graphics 클래스의 사용
- DecisionFigure : 조건을 나타내는 도형, 한 개의 입력과 두 개의 출력(예 또는 아니오)
- ProcessFigure 뒤 따라 일어나는 행동을 나타내는 도형, 한 개의 입력과 한 개의 출력
- TerminatorFigure 플로우차트의 시작 또는 끝을 나타낸다. 시작으로 사요한다면 오직 출력이 연결될 것이고, 끝으로 사용한다면 오직 입력이 연결될 것이다.
각 경우에, Figure 크기는 bounds라고 불리는 변수에 의해 제어된다. Figure의 텍스트는 message 문자열에 설정된다. 이 제약 사항들은 Figure 클래스의 외부에서 제어되므로, 아직 그것을 볼 수 없을 것이다.
Figure와 Figure를 서로 연결하기 위해서는 FixedAnchor라 불리는 ConnectionAnchor 객체가 필요하다는 것을 의미한다.
'RCP > SWT & JFACE' 카테고리의 다른 글
JFace TreeViewer설명 (0) | 2016.12.24 |
---|---|
IWizardPage 인터페이스 (0) | 2016.12.24 |
Drag & Drop 구현 방법 (0) | 2016.12.24 |
이벤트로 받은 키보드 멀티 인식 방법 (0) | 2016.12.24 |
RCP 확장점 소개 (0) | 2016.12.24 |