Search Results for '프로그래밍/Eclipse_SWT'


3 POSTS

  1. 2008.03.28 SWT. CONTROL의 pack()
  2. 2008.02.09 SWT - moveAbove, moveBelow
  3. 2007.11.21 사용자가 정의한 Class 와 관련된 Transfer 만들기

SWT. CONTROL의 pack()

Posted 2008. 3. 28. 00:15 by 카메란

Wizard 를 만들던 중에

user의 의해

wizardPage의 화면을 변경하고자 했다..


그래서

user의 행동에 따라서 widget은 추가 했는데,

화면에는 변화가 보이지 않았다.

그래서 redraw() 를 불렀는데

별 변화가 없었고,

언제나 그렇지만.....

구글로~~~~


그렇게 해 본 결과

pack() 란 method를 알게 되었다.

api를 찾아 보니..

receiver가 preferred size에 맞게 resize 하도록 한다고 되어있다.


그래서

이것을 부르면

화면에 변경 사항이 반영 되는 것이다.


관련 예제 코드는 아래에 첨부



위의 코드를 실행시키면

창 하나에 버튼 하나가 나온다.

위의 코드의 shell.pack() 줄을 주석 처리 하면

버튼을 눌러도 label이 추가가 되는 것을 확인 할 수 없다..

하지만 주석 처리를 하지 않으면

버튼 누를 때마다 label이 추가 되는 것을 볼 수 있다.



Tag : swt, 이클립스

Write your message and submit

SWT - moveAbove, moveBelow

Posted 2008. 2. 9. 22:12 by 카메란
SWT로 작업하던 중에

label 에 image 를 불러와서 화면에 배치하던 중에

여러개의 label 이 겹치게 되는 경우가 발생하게 되었다..

그런데 default 대로 작업하다 보니 내가 원하는 순서가 아닌 대로

배치가 되었다..

그래서 이러한 배치 순서를 바꾸는 방법을 찾던 중에//

역시나 API 를 보고 해결 방법을 찾게 되었다.


일단 예제 코드


위 예제 코드를 실행시켜 보면

창에

각각 TEST1, TEST2 란 text 를 갖고 있는

label 2개가 생긴다..

그리고 TEST1 아래에 TEST2가 잘려서

보이는 것을 알 수 있다..


여기서 TEST2를 TEST1 위에 보이게

즉 label2 가 label1 위에 배치되게 하고 싶다면 방법은 간단하다.


label2.setSize(100, 100) 과

shell.open() 사이에

label2.moveAbove(label1);

이란 줄을 삽입하면 된다..

(혹은 label1.moveBelow(label2);)


method 명에서도 쉽게 유추 할 수 있듯이,

'label2 를 label1 위로 움직여라'

라는 코드 인 것이다..

(괄호 안에는 반대로 label1을 label2 아래로 움직여라)


한 라인을 삽입하고 실행시켜 보면

원하는 결과를 얻을 수 있다.




Tag : ECLIPSE SWT, Java, moveAbove, moveBelow

Write your message and submit

사용자가 정의한 Class 와 관련된 Transfer 만들기

Posted 2007. 11. 21. 22:13 by 카메란
Transfer 만들기(SWT)

/*
1. SWT 는 http://www.eclipse.org/swt 에서
 2. SWT라고 분류는 해놨지만 GEF editor에다가다 붙여도 되는듯.
*/

드래그 앤 드랍 기능을 구현하는데 제공되는 Transfer는

TextTransfer
FileTransfer
HTMLTransfer

등등이 있다.

여기서 사용자가 정의한 클래스를 Transfer 하고 싶다면

org.eclipse.swt.dnd.ByteArrayTransfer를 상속받아서

구현하면 된다

먼저 API 를 보면

하나의 예시 코드가 있다

http://help.eclipse.org/stable/nftopic/org.eclipse.
platform.doc.isv/reference/api/org/eclipse/swt/dnd/ByteArrayTransfer.html


String, long  타입의 변수들을 필드로 갖는 MyType class 를 사용한 코드이다.

여기서는, String, long,  타입 뿐만 아니라

java.util.ArrayList 등등을 필드로 갖는 class를 transfer 시키는

Transfer를 만들겠다.

일단 전송시킬 class 를 정의해보자
이제 Transfer.

org.eclipse.swt.dnd.ByteArrayTransfer를 상속받아야 한다.

member field 부터 보면,


이제 getTypeIds(), getTypeNames(),  getInstance().

다음에는 javaToNative(Object object, TransferData transferData).
br />여기서 예제와 바뀐 점이 있는데,

첫번째로,
 
예제에서는 object instanceof MyType[] 즉.. 배열에 대한 instance 인지를 체크한 반면

여기서는  object instanceof MyClass , 즉, 배열이 아니다.

그리고 예제에서는 DataOutputStream을 쓴 반면에

여기서는 List(Object)를 내보내기 위해서  ObjectOutputStream을 사용하였다.

이 메소드를 보면

MyClass 멤버들을 타입에 맞게 ObjectOutputStream을 사용해서 write를 한다
예를 보면

String은 길이를 writeInt를 써서 write 하고 다음에 string을 byte array로 바꾼후에 write한다

int, boolean은 각각 writeInt, writeBoolean 으로

ArrayList(Object)는 writeObject를 사용한다

그리고 마지막으로 bout의 toByteArray한 결과를 사용해서

ByteArrayTransfer의 javaToNative를 콜한다.


다음은 nativeToJava(TransferData transferData).

여기서도 마찬가지로

예제와 다르게

DataInputStream 대신에 ObjectInputStream을 사용했고

배열을 사용하지 않았다.


여기서도 방법은 javaToNative와 비슷하게

멤버 필드의 타입마다 다른 read method로 불러다가 새로운 MyClass object에다가

각 멤버 필드에 대입한 후에 그 object를 리턴한다.

string은 write했던 방법을 생각해서

먼저 길이를 읽어다가 그 길이만큼 바이트 배열을 읽으면 되고,

int, boolean 은 각각 readInt, readBoolean을 사용하고

ArrayList(Object)는 readObject를 사용한다.


이렇게 하면 Transfer 완성이다.

최종 MyClassTransfer 는 다음과 같다.

추가적으로 말하면..

이 코드는 만든 다른 Transfer 코드를 수정해서 만들고

사정이 있어서 직접 테스트를 못해봤다......ㅠㅠ





Tag : DnD, Eclipse, swt

Write your message and submit