Application Lifecycle 살펴보기

갑자기 만들고 싶은 게임이 생겼습니다. 취미로 간단히 만들거라 시간 단축이 필요했습니다.
안드로이드에서 돌아가는 게임 개발 프레임워크를 구글링 해보았습니다.
첫 페이지에서 눈에 띄는 것은 rokon 과 AndEngine.
rokon 페이지에 들어가니 개발이 종료되었다는 내용을 발견했습니다. 대신 rokon 개발자가 libgdx 라는 프레임워크를 추천해 놓았습니다. AndEngine은 배우기 쉽다는 내용도 있었습니다.
libgdx 프레임워크를 찾아들어가니 현재도 왕성한 오픈소스 활동을 하고 있었습니다.
무엇보다 다양한 플랫폼(윈도우, 리눅스, 맥, 안드로이드 등)을 지원한다는 것이 선택의 가장 큰 이유가 되었습니다.

튜토리얼을 보기 전에 어플리케이션 라이프 사이클을 살펴보았습니다.
애플릿의 라이프 사이클과 비슷했기에 거리감은 없었습니다.

LibGDX Application Lifecycle

코드로 보면 다음과 같습니다. ApplicationListener를 implements 하여 main에서 호출합니다. main에서 LwjglApplication 클래스는 JoglApplication 클래스로 변경하여 생성하여도 됩니다.

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
public class MyGame implements ApplicationListener {
public void create () {
// STUB
}
public void render () {
// STUB
}
public void resize (int width, int height) {
// STUB
}
public void pause () {
// STUB
}
public void resume () {
// STUB
}
public void dispose () {
// STUB
}
}
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
public class MyDesktopGame {
public static void main(String[] args) {
new LwjglApplication(new MyGame(), "My Game", 480, 320, false);
}
}
Share Comments

SerializationUtils 클래스 살펴보기

Apache Commons Lang 컴포넌트의 SerializationUtils 클래스의 clone 메소드에 대해 살펴보자. clone 메소드를 이용하기 위해선 Serializable 인터페이스를 구현해줘야한다.

기존의 Object 클래스의 clone 메소드를 오버라이드 한 예제이다.

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
public class Main {
public static void main(String[] args) {
try {
붕어빵 a = new 붕어빵();
붕어빵 b = (붕어빵) a.clone();
System.out.println(a.price);
System.out.println(b.price);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
class 붕어빵 implements Cloneable {
public int price = 200;
@Override
protected Object clone() throws CloneNotSupportedException {
붕어빵 obj = (붕어빵) super.clone();
obj.price = price;
return obj;
}
}

SerializtionUtils 클래스의 clone 메소드를 이용한 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.Serializable;
import org.apache.commons.lang3.SerializationUtils;
public class Main {
public static void main(String[] args) {
붕어빵 a = new 붕어빵();
붕어빵 b = SerializationUtils.clone(a);
System.out.println(a.price);
System.out.println(b.price);
}
}
class 붕어빵 implements Serializable {
public int price = 200;
}

우와~ 이 얼마나 단순한가;; 난 이런거 좋아 ㅎㅎ

Share Comments

WordUtils 클래스 살펴보기

Apache Commons Lang 컴포넌트의 WordUtils 클래스에 대해 알아보자.
말그대로 단어를 쉽게 다룰 수 있는 기능을 제공한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import org.apache.commons.lang3.text.WordUtils;
public class Main {
public static void main(String[] args) {
// capitalize 메소드는 단어의 첫 글자를 대문자로 치환한다.
System.out.println(WordUtils.capitalize("hello world!"));
// initials 메소드는 단어들의 이니셜을 구한다.
// 즉, 각 단어들의 첫글자만 남긴다.
System.out.println(WordUtils.initials("Java development Kit"));
// wrap 메소드는 텍스트 편집기의 워드랩 기능을 제공한다.
// 즉, 단어별로 한 라인의 남은 칸에 다 적히지 않으면 해당 단어를 다음 라인에 적는다.
System.out.println(WordUtils.wrap("Hello world!", 8 ));
System.out.println(WordUtils.wrap("Hello world!", 12));
}
}

결과이다.

1
2
3
4
5
Hello World!
JdK
Hello
world!
Hello world!
Share Comments

StringUtils 클래스 이해하기

이번 시간에는 Apache Commons Lang 컴포넌트의 StringUtils 클래스에 대해 살펴보겠다. StringUtils 클래스는 말 그대로 문자열을 손쉽게 다룰 수 있도록 도우미 메소드를 모아놓은 클래스이다. 또 하나 유용한 것은 null에 안전하다는 것이다.

좀 유용하다 싶은 것들로 예제를 작성해보았다.

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
import org.apache.commons.lang3.StringUtils;
public class Main {
public static void main(String[] args) {
// abbreviate 메소드는 문장을 축약하는 기능을 제공한다.
// 게시판 제목을 줄일 때 사용하면 좋을 듯 하다.
System.out.println(StringUtils.abbreviate("Hello world!", 5));
System.out.println(StringUtils.abbreviate("Hello", 5));
// capitalize 메소드는 문장의 첫 글자를 대문자로 만드는 기능을 제공한다.
// 워드 프로세서에서 자주 사용되는 기능이다.
System.out.println(StringUtils.capitalize("hello world!"));
// center 메소드는 문장을 가운데 정렬하는 기능을 제공한다.
System.out.println(StringUtils.center("Hello world!", 20));
System.out.println(StringUtils.center("Hello world!", 20, '*'));
// containsAny 메소드는 해당 문장에 포함된 문자나 문자열이 있는지 판단한다.
// 예제처럼 가변인자로도 받을 수 있다.
System.out.println(StringUtils.containsAny("Hello world!", 'a', 'b', 'c', 'd'));
System.out.println(StringUtils.containsAny("Hello world!", 'a', 'b', 'c'));
// join 메소드는 각 문자열 사이에 문자나 문자열을 집어넣는 기능을 제공한다.
// 예제로 전화번호 사이의 하이픈을 넣어보았다.
System.out.println(StringUtils.join(new String[] { "010", "1234", "4567" }, '-'));
// repeat 메소드는 해당 문자열을 반복해주는 기능을 제공한다.
// 패스워드가 저장된 이후 접속 시 사용하면 유용할 듯하다.
System.out.println(StringUtils.repeat('*', 5));
}
}

실행 결과이다.

1
2
3
4
5
6
7
8
He...
Hello
Hello world!
Hello world!
****Hello world!****
true
false
010-1234-4567

이 밖에도 다양한 기능들이 있지만 너무 많기도 많고 메소드들이 너무 직관적이라 구지 더 설명할 필요가 없을 듯하다. 다른 메소드들도 사용해보기 바란다.

Share Comments

Coffeescript 이해하기

CoffeeScript는 JavaScript로 컴파일되는 미니 언어이다. 나는 JavaScript를 잘 다루지 못하지만 웹으로 재미난 것들을 만들고 싶은 마음이 많이 들어 대안책으로 CoffeeScript를 선택해보았다. 간결한 문법, JavaScript와 완벽하게 매칭된다는 점, REPL을 지원한다는 점등이 매력적인 요소로 다가왔다.

JavaScript의 역사에 대해 정리해놓은 발표 자료이다. 복잡해지고 있는 JavaScript의 대안책으로 손색없이 보인다.

자세한 설명은 http://coffeescript.org/ 에서 볼 수 있다. 글쓰기도 귀찮고 좀 더 살펴보고 뭔가 해보아야겠다.

Share Comments

C 알고리즘 수행시간 측정하기

마이크로 초 단위로 측정하기

#include <sys/time.h>

struct timeval start, end;
long elapsed;

gettimeofday(&start, NULL);

// 알고리즘

gettimeofday(&end, NULL);

elapsed = end.tv_usec - start.tv_usec;
printf("%ld\n", elapsed);
Share Comments

Eclipse RCP Tutorial 14

작성일: 2010. 10. 27.

원문: http://www.vogella.de/articles/EclipseRCP/article.html Version 5.1

제품 배포하기

제품 설정은 독립형 RCP 어플리케이션을 생성하는데 사용된다. 제품을 추출하고 다른 사용자들과 결과를 공유할 수 있다. 이클립스는 자동적으로 빌드 경로로 컴파일된 클래스를 포함한다. 다른 파일들은 수동으로 관리해야한다. 만약 아이콘이나 스플래시 화면 이미지 등을 사용한다면 빌드 경로에 추가해줘야 한다.

빌드에 포함된 것은 plugin.xml 파일을 통해 정의된다. ‘plugin.xml" 을 선택하고 Build 탭을 선택한다. META-INF 디렉토리와 plugin.xml 파일, 그리고 아이콘, splash.bmp 와 같은 다른 정적 파일들은 출력에 포함되어야 한다.

제품 설정 파일로 변경하고 Overview 탭을 선택한다. 제품을 추출하기 위해 Eclipse Product export wizard 를 클릭한다.

목표 디렉토리를 기입하고 Finish 를 누른다.

특정 장소에 애플리케이션을 실행하는 eclipse.exe 파일을 포함하는 eclipse 디렉토리를 생성할 것이다. 애플리케이션을 실행하기위해 더블 클릭한다.

다른 기계(자바가 설치되어 있는)에서 이 디렉토리의 내용을 얻거나 압축을 푼다면 프로그램은 거기서도 동작해야 한다. 추출 대화창은 당신의 사용자에게 직접 전송할 수 있는 아카이브 파일을 생성한다.

제품 생성을 자동화하는 방법은 Eclipse PDE Build 를 참고하라.

팁과 트릭

사용자 레이아웃을 저장하기

애플리케이션의 다음 실행을 위해 사용자 레이아웃과 윈도우 크기를 저장하려면 ApplicationWorkbenchAdvisor 의 초기화 메소드에 configurer.setSaveAndRestore(true); 를 추가한다.

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
package addactiontoview;
import org.eclipse.ui.application.IWorkbenchConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchAdvisor;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
private static final String PERSPECTIVE_ID = "AddActiontoView.perspective";
public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
IWorkbenchWindowConfigurer configurer) {
return new ApplicationWorkbenchWindowAdvisor(configurer);
}
public String getInitialWindowPerspectiveId() {
return PERSPECTIVE_ID;
}
@Override
public void initialize(IWorkbenchConfigurer configurer) {
super.initialize(configurer);
configurer.setSaveAndRestore(true);
}
}

이클립스는 퍼스펙티브를 리셋하기 위한 미리 정의된 명령을 가진다. Eclipse Commands 를 참고하라.

사용하지 않는 종속성 찾기

plugin.xml 파일의 Dependencies 탭에서 어느 플러그인에 당신의 플러그인이 종속적인지 정의한다. 물론 단지 필요한 플러그인만 여기 정의해야 한다. 어떤 종속성이라도 가지고 있다면 Dependency Analysis -> Find unused dependencies 를 선택하여 실제로 사용하지 않는 것을 검사할 수 있다.

RCP 애플리케이션을 자신의 JRE 와 함께 배포하기

특정 JRE 가 사용됨을 보장하기 위해 자신의 RCP 애플리케이션과 함께 배포할 수 있다. 이클립스 RCP 애플리케이션은 가장 먼저 설치 디렉토리에 jre 폴더가 있는지 자바 가상머신이 있는지 검사한다. 만약 발견되면 그 JRE 는 이클립스 RCP 애플리케이션에 사용된다.

다수의 사용자 설정하기

이클립스 RCP 애플리케이션은 설정 파일들을 .metadata 폴더에 저장한다. 표준 설정에 있는 이클립스 RCP 설치 디렉토리는 이 폴더를 위해 사용될 것이다. 만약 둘 이상의 사용자가 같은 설치 폴더를 사용한다면, 대안의 장소를 명시하기 위해 -data 인자를 제공해야 한다. @user.home/applicationname 값을 설정했다면 설정은 사용자가 명시한 폴더에 저장될 것이다.

Share Comments

Eclipse RCP Tutorial 13

작성일: 2010. 10. 27.

원문: http://www.vogella.de/articles/EclipseRCP/article.html Version 5.1

제품과 브랜딩

지금까지는 RCP 어플리케이션을 이클립스에서만 실행할 수 있다. 다음 챕터에서 이클립스 IDE 외부에서 실행할 수 있는 프로그램으로 추출하는데 사용되는 제품 설정을 생성할 것이다.

어플리케이션 VS 제품

이클립스 RCP 에서 자바 main() 메소드의 같은 점은 application 이다. 애플리케이션은 org.eclipse.core.runtime.applications 확장점을 통해 정의된다. 다수의 애플리케이션을 정의할 수 있지만 한번에 하나만 실행할 수 있다.

또한 이클립스는 어플리케이션에 필요한 모든 자원(아이콘, 스플래시 이미지, 외부 jar, 그외 플러그인 등등)을 정의하는 product 를 정의한다. 제품은 어플리케이션의 내용을 기술하는 개발 인공 산물이고 구동시 필요하지 않다.

제품 설정

제품을 생성하기 위해서는 제품 설정이 필요하다. 이 설정 파일은 필요한 패키지들, 설정 파일 등에 대한 모든 정보를 가지고 있다. 설정 파일은 제품을 추출하고 생성하는데 사용된다.

제품 설정을 생성하기

RCP application with a view 템플릿 기반의 새로운 프로젝트 de.vogella.rcp.intro.deploy 를 생성한다. 작동되는지 검사하기 위해 실행한다. 프로젝트에 오른쪽 클릭을 하고 New -> Product Configuration 을 선택한다.

제품 설정을 de.vogella.rcp.intro.deploy.product 라고 이름 짓는다. Create a configuration file with basis settings 를 선택한다. Finish 를 누른다.

de.vogella.rcp.intro.deploy.product 파일을 열고 Overview 탭을 선택한다. id 는 de.vogella.rcp.intro.deploy.product, 이름은 DeployTest 를 적는다. 이름은 윈도우의 제목에 보여질 것이다.

Product Definition 부분의 New 를 누르고 de.vogella.rcp.intro.deploy.application 플러그인의 어플리케이션을 선택한다.

결과로 Product Definition 부분이 채워질 것이다.

제품 식별자는 plugin.xml 파일의 org.eclipse.core.runtime.product 확장으로서 저장된다.

종속성

제품은 플러그인이나 특징을 기반으로 한다. 이 설정은 개요 탭에서 완성된다. 플러그인에 기반한 제품 정의를 사용할 것이다. 특징 프로젝트를 생성하는 자세한 방법은 이클립스 특징 프로젝트 - 튜토리얼 을 참고하세요.

Dependencies 탭으로 옮기고 Add 를 클릭한다. de.vogella.rcp.intro.deploy 플러그인을 선택한다. Add Required Plug-ins 을 누르고 저장해라.

제품 실행하기

개요 탭에서 Synchronize 를 누른뒤 Launch an Eclipse application 누른다. 동기화는 실행 설정과 제품 설정을 맞출 것이다.

스플래시 화면

Splash 탭은 스플래시 화면을 포함하는 플러그인을 명세한다. 프로젝트 디렉토리에 splash.bmp 파일을 넣어야한다. 이름과 포맷은 하드 코드되어 있고 변경될 수 없다. 상응하는 설정을 설정한다.

마음에 드는 그래픽 도구를 통해 splash.bmp 파일을 생성하고 de.vogella.rcp.intro.deploy 프로젝트에 저장한다. 또한 메시지를 추가하고, 스플래시 화면에 진행 막대를 추가할 수 있다.

어플리케이션을 시작하면 스플래시 화면을 볼 수 있을 것이다. 예를 들어 나는 나의 웹 페이지의 스크린 샷을 사용한다.

제품을 브랜딩하기

표준 이클립스 정보 대화창은 브랜드 될 수 있다. 어플리케이션에 아이콘과 텍스트를 추가할 수 있다. 이 예제에서는 이 것을 사용하지 않았다.

메뉴에 About dialog 가 보이기 위해 표준 명령인 org.eclipse.ui.help.about 을 추가한다. 이클립스 표준 명령을 사용하는 방법에 대한 정보는 이클립스 명령 따라하기 를 보아라.

시작 아이콘과 실행 인자 변경하기

이 예제에서는 이것이 쓰이지 않는다.

런처는 제품의 배포시에 생성되는 실행가능한 프로그램이다. 기본적으로 eclipse.exe 당 하나의 eclipse 아이콘이 생성된다. 이를 변경하기 위해 제품 설정의 런처 탭을 선택한다.

여기서 어플리케이션의 이름과 사용될 아이콘을 명세할 수 있다. 아이콘의 깊이가 완전히 기입되지 않으면 이클립스는 이 아이콘들을 사용하지 않는다.

런처 섹션에서 이클립스 프로그램이나 JVM 인자들을 명세할 수 있다.

지금까지 제품 설정을 하였다. 다음 단원에서는 이클립스 외부에서 실행될 수 있는 독립형 프로그램과 같은 제품을 생성하기 위한 설정을 이용하는 방법에 대해 설명할 것이다.

Share Comments

Eclipse RCP Tutorial 12

작성일: 2010. 10. 27.

원문: http://www.vogella.de/articles/EclipseRCP/article.html Version 5.1

퍼스펙티브

퍼스펙티브는 특정 작업과 관련된 UI 요소들을 함께 묶고 조직화한다. 이클립스 RCP 는 어플리케이션에 퍼스펙티브를 추가할 수 있도록 한다. 다음 예제를 보자.

어플리케이션에 퍼스펙티브 추가하기

de.vogella.rcp.intro.perspective 라는 이름으로 RCP 프로젝트를 생성한다. 템플릿은 RCP application with a view 를 사용한다. plugin.xmlorg.eclipse.ui.perspective 확장점을 추가한다. 퍼스펙티브의 id 에 de.vogella.rcp.intro.perspective.perspective 를, 이름에 vogella.de Perspective 를 적는다. 클래스 이름은 de.vogella.rcp.intro.perspective.Perspective 로 변경한다.

class* 링크를 눌러 클래스를 생성한다.

새 클래스의 createInitialLayout() 메소드는 새로운 퍼스펙티브를 생성을 책임진다. 기존의 뷰의 코드를 재사용한다. 다음 단계에서 퍼스펙티브는 정의되지만 어플리케이션에서 사용할 수 없다.

1
2
3
4
5
6
7
8
9
10
11
12
13
package de.vogella.rcp.intro.perspective;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
public class Perspective implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
String editorArea = layout.getEditorArea();
layout.setEditorAreaVisible(false);
layout.setFixed(true);
layout.addStandaloneView(View.ID, false, IPageLayout.LEFT, 1.0f, editorArea);
}
}

퍼스펙티브 선택하기

툴바/쿨바를 통해 퍼스펙티브 선택하기

ApplicationWorkbenchWindowAdvisor 클래스의 preWindowOpen() 메소드 내에 configurer.setShowPerspectiveBar(true); 를 통해 퍼스펙티브간의 변경을 활성화 할 수 있다.

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
package perspectivetest;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.IWorkbenchPreferenceConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(
IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
public ActionBarAdvisor createActionBarAdvisor(
IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(400, 300));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("RCP Application");
configurer.setShowPerspectiveBar(true);
// Set the preference toolbar to the left place
// If other menus exists then this will be on the left of them
IPreferenceStore apiStore = PlatformUI.getPreferenceStore();
apiStore.setValue(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR, "TOP_LEFT");
}
}

이제 퍼스펙티브를 즉각적으로 변경할 수 있다.

메뉴를 통해 퍼스펙티브 선택하기

이클립스 퍼스펙티브를 바꾸는 것은 메뉴의 표준 명령인 org.eclipse.ui.perspectives.showPerspective 를 통해 재사용할 수 있다. 이클립스 커맨드 을 참고하라.

Share Comments

Eclipse RCP Tutorial 11

작성일: 2010. 10. 27.

원문: http://www.vogella.de/articles/EclipseRCP/article.html Version 5.1

상태표시줄 추가하기

상태표시줄 설정하기

de.vogella.rcp.intro.statusline 으로 새로운 RCP 프로젝트를 생성한다. 템플릿으로 Hello RCP 를 사용한다. ApplicationWorkbenchWindowAdvisor 클래스를 열고 preWindowOpen() 메소드를 변경한다. 코드에서 관련된 위치는 configurer.setShowStatusLine(true); 이다.

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
package de.vogella.rcp.intro.statusline;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
@Override
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(400, 300));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("Status Line Example");
configurer.setShowStatusLine(true);
}
}

애플리케이션을 실행하면 이미 상태표시줄을 볼 수 있을 것이다. 중요한 점은 상태표시줄은 텍스트를 포함하지 않는다는 것이다.

공유된 상태표시줄

공유된 메시지 영역은 이 영역에 메시지를 쓰기위해 애플리케이션의 모든 영역에서 사용될 수 있다.

다음은 상태표시줄에 텍스트를 쓰는 코드이다.

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
package de.vogella.rcp.intro.statusline;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
@Override
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(400, 300));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("Status Line Example");
configurer.setShowStatusLine(true);
}
// This is the new method
@Override
public void postWindowOpen() {
IStatusLineManager statusline = getWindowConfigurer()
.getActionBarConfigurer().getStatusLineManager();
statusline.setMessage(null, "Status line is ready");
}
}

애플리케이션을 실행한다. 다음과 같은 화면을 볼 수 있을 것이다.

ID가 “de.vogella.rcp.intro.statusline.View1” 인 뷰를 추가하고 “de.vogella.rcp.intro.statusline.ViewPart1” 클래스를 구현한다. 이 뷰는 상태표시줄을설정하는 버튼을 포함한다.

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 de.vogella.rcp.intro.statusline;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.part.ViewPart;
public class ViewPart1 extends ViewPart {
boolean pressed = false;
@Override
public void createPartControl(Composite parent) {
Button setStatusLine = new Button(parent, SWT.PUSH);
setStatusLine.setText("Set Statusline ");
setStatusLine.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
String message = "I would like to say hello to you.";
if (pressed) {
message = "Thank you for using me";
}
setStatusLine(message);
pressed = !pressed;
}
});
}
private void setStatusLine(String message) {
// Get the status line and set the text
IActionBars bars = getViewSite().getActionBars();
bars.getStatusLineManager().setMessage(message);
}
@Override
public void setFocus() {
}
}

결과를 실행하면 다음과 같은 화면을 볼 수 있다.

Share Comments