2013년 12월 23일 월요일

Widget 과 Control 클래스




Widget 클래스




  Widget 클래스는 SWT와 JFace에서 정보를 보여주고, 사용자 인터페이스를 허용하는 모든 클래스의 상위 클래스입니다. 그러나 Widget 클래스는 추상클래스로 Eclipse.org 공동체에서는 Widget 클래스와 연관하여 발생하는 복잡성 때문에, 하위 클래스를 생성하는 것을 강력히 반대합니다. 그러므로 코드에서 Widget을 상속받거나 코드에서 바로 사용하면 안되는 대신, 하나의 구조로 모든 위젯을 단일화하는 측면에서 중요합니다.

  Widget 클래스의 메서드들은 SWT/JFace의 기본 기능을 보여줍니다.





Widget 클래스의 주요 메서드와 기능



  setData() 메서드를 쓰면 애플리케이션이 위젯에 정보를 Object 형태로 추가할 수 있습니다. 서로 다른 클래스에서 위젯을 공유하거나, 위젯이 클래스에서 일반적으로 제공하는 정보 이외의 정보를 수용할 때, 위젯이 전역 범위를 갖거나 서로 통신할 수 없는 프로시져들에게 정보를 제공해야 할 때 유용합니다. 이 메서드는 Object에 문자열 값을 연결하는 작업을 하는데, 이 객체는 위젯에 대한 할당을 해제할 때 함께 할당이 해제됩니다.

  getData(), getData(String), getStyle(), getDisplay() 메서드는 애플리케이션이 참조하는 Widget에 대한 정보를 획득하도록 돕는데 사용합니다.

  getData()는 setData()로 위젯과 연결한 모든 데이터를 반환합니다.

  getData(String)은 문자열과 연결한 데이터 객체를 반환합니다.

  getStyle()은 정수값을 반환하는데, 이 정수값은 특정 위젯의 외양에 대한 설정을 나타냅니다.

  getDisplay()는 GUI와 연결된 Display 객체를 반환합니다.

  toString()은 위젯 클래스에 상응하는 문자열 값을 반환합니다.







Control 클래스




  SWT/JFace는 운영체제에서 제공한 위젯을 사용해 그래픽 애플리케이션을 만들어 냅니다. 플랫폼마다 서로 다른 GUI 구성요소의 세트를 제공하기 때문에, SWT는 이러한 위젯의 일부 세트만 완전하게 지원할 수 있습니다. Control 클래스에서의 객체들은 운영체제와 바로 짝을 이루는 부분이 있어서, 클래스의 handle 필드를 통해 직접 접근할 수 있지만, SWT는 Control 클래스 외에 여전히 많은 위젯을 제공합니다.





Widget 클래스와 하위 기본 클래스





Control 객체의 가장 기본적인 특성은 크기입니다. 





Control의 크기를 얻거나 조직하는 메서드



  getSize()는 Point 객체로 값을 반환합니다.

  setSize(int, int)는 위젯의 크기를 너비와 높이로 설정합니다.

  setSize(Point)는 면적을 표현하는 Point 인스턴스로 설정합니다.



  computeSize(int, int), computeSize(int, int, boolean), pack(), pack(boolean)은 Control의 선호하는 크기를 다룹니다. 선호하는 크기(preferred size)란 컨트롤이 그림, 글, 기타 위젯을 포함한 항목을 보이기 위해 필요한 최소 면적을 말합니다. 이를 위한 좌표는 computeSize() 메서드를 통해 얻을 수 있습니다. 이후 프로그램은 pack() 메서드를 사용하여 위젯의 크기를 재조정합니다. 



※ 참고 : 해상도와 플랫폼의 차이점 때문에, setSize()보다 pack()을 사용함으로써 내용물에 따라 컨테이너의 크기를 알아서 조정합니다. 이 크기는 운영체제에 의해 제어됩니다. 또한 컨테이너에 위젯을 추가할 때마다 pack()을 호출해야 합니다.







Control 위치를 설정하고 반환하는 메서드



  getLocation() 메서드는 해당 위젯에서 Control의 좌표를 포함한 Point 객체를 반환합니다.

  setLocation() 메서드는 좌표를 설정합니다.

  getBounds() 메서드는 Control의 x와 y 좌표 및 너비와 높이를 반환합니다.

  setBounds() 메서드는 x와 y 좌표 및 너비와 높이를 설정하기 위한 네 개의 정수 값이 필요합니다. 





각 컨트롤은 서로 다른 참조 위치를 사용한다.



  어떤 위치를 기술할 때, 참조 위치가 필요합니다. getLocation()에서는 해당 관점이 위젯 컨테이너의 왼쪽 위 모서리이며, 위젯의 컨테이너는 일반적으로 Shell 객체입니다. Shell 객체에서 getLocation()은 사용자 콘솔에서의 좌표를 반환하는데, 사용자 콘솔은 Display 객체로 표현됩니다.

  위의 그림에서 shell.getLocation()은 (72, 66)을 반환하고, button.getLocation()은 (60, 40)을 반환합니다.

  Control은 getDisplay(Point) 메서드를 사용하여 주어진 위치를 Display 객체 기준의 위치로 얻을 수 있습니다. 이 때 애플리케이션은 컨트롤 기준 좌표라 불리우는 Shell 객체로의 좌표를 화면 기준 좌표라 불리는 Display 객체로의 좌표로 변환합니다. 이러한 변환은 toDisplay() 메서드로 수행됩니다. 반대 과정으로 화면 기준 좌표를 컨트롤 기준 좌표로 바꾸는 것은 toControl() 메서드로 수행됩니다.



참고 서적 : SWT/JFace in Action



댓글 없음:

댓글 쓰기