Java/SWT

[ Java - SWT ] SWT 소스 내부에 AWT/Swing Button 추가하는 법

Pearl_mini 2023. 10. 12. 10:18
728x90

 

SWT/JFace 를 이용하여 AWT로 만들어져있던 소스를 Clone 하는 프로젝트를 진행중에 

AWT 로 구현된 기존에 만들어진 날짜 선택 달력 컴포넌트를 추가해야하는 상황이 발생했다!

 

AWT는 Frame > Panel > Component를 Add하는 방식으로 추가해주어야 하는데

SWT는 Composite > Group > Button 을 그냥 선언하면 바로 컴포넌트가 추가가 된다.

 

해서 SWT Composite 안에서는 바로 기존의 캘린터 컴포넌트가 추가되지 않는문제가 생겼다!! 

 

 

SWT 내부에서 AWT 소스 사용하는 방법에 대해서 찾아보다가 아래와 같은 코드로 해결했다.

 

Composite compDate = new Composite(groupSet, SWT.EMBEDDED | SWT.NONE);
compDate.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
java.awt.Frame awtFrame = SWT_AWT.new_Frame(compDate);
javax.swing.JPanel panel = new javax.swing.JPanel();
panel.setLayout(new PropertyLayout(0,0,0,0,0,0));
awtFrame.add(panel);

 

우선 Composite를 생성하는데 SWT.EMPEDDED를 꼭 추가해주어야 내부에 AWT를 사용 가능하다!

(groupSet은 내가 Composite를 넣고자 하는 위치의 Group 객체 명칭이다. 사용하고자 하는 Composite나 Group의 명을 적어주면 된다)

 

그리고 LayoutData는 마찬가지로 넣고자하는 위치, parent의 Layout에 맞게 LayoutDate를 넣어주면 된다.

 

아래부터는 AWT객체를 넣기위해 AWT의 Frame, JPanel을 만들어준다.

SWT_AWT를 사용하면 SWT안에서 AWT를 사용할 수 있다.

 

마지막으로 Panel을 Frame에 추가까지해주면 SWT Composite 내부에 AWT를 넣을 수 있는 공간을 생성했다고 보면 된다!

 

 

effectiveDateObject = new DateButton(new Date(), "yyyy-MM-dd", false, false);
panel.add(effectiveDateObject);

 

 

내가 넣고자 하는 AWT 컴포넌트는 DateButton객체이다.

마지막에 panel.add를 이용해서  Object를 넣어주면 완성이다!

 

 

참조:

https://stackoverflow.com/questions/56201672/how-to-insert-swing-widget-into-swt-i-get-exception-in-thread-main-java-lang-i

 

How to insert Swing widget into SWT I get Exception in thread "main" java.lang.IllegalArgumentException while using SWT_AWT.new_

Hi I am new to eclipse and I wanted to add a Swing component like JCombobox to my existing code in SWT. Is there any ways to do it through available API's in SWT or Swing? I have used SWT_AWT.new...

stackoverflow.com

 

https://www.oreilly.com/library/view/eclipse-cookbook/0596007108/ch09s20.html

 

Eclipse Cookbook

9.19. Using Swing and AWT Inside SWT Problem You want to use Swing or AWT graphical elements inside an SWT application. Solution SWT (in Eclipse 3.0) supports embedding Swing/AWT widgets … - Selection from Eclipse Cookbook [Book]

www.oreilly.com

 

728x90