2011년 10월 15일 토요일

스윙으로 애플릿 만들기(JApplet)

오늘부터는 탑레벨 컨테이너들에 해당하는 콤포넌트들에 대해서 차례차례 살펴보겠다. 탑레벨이므로 말에서 풍기듯 스윙 프로그램을 제작할시 이제부터 배우는 콤포넌트들 중에서 최소한 하나는 들어갈 것인데 아래의 3가지 콤포넌츠를 공부해 보기로 하자. 여러분이 이제까지 무의식적으로 써왔을테지만 하나하나 다시 살펴보면서 더 심층적인 학습이 되리라 생각한다. 안다고 그냥 지나치는 일은 없기 바란다. 혹시나 건질게 있을지 모르니까 말이다.^^

Top-Level Containers
JApplet
JDialog
JFrame


자 그럼 자바에서 유명한 애플릿 그 중에서도 스윙을 위해 최적화되어있는 JApplet을 공부하는 시간을 가져보도록 하겠다. 애플릿을 공부하는 이들이라면 많은 의문들이 있을 것인데 그 중에 대표적인 것이 Applet 클래스도 있고 JApplet 클래스도 있는데 이것썼다 저것썼다 하니 도대체 뭐가 다른건지 궁금한 이들이 있을줄 안다. 맞나? 아님 말구..ㅎㅎ 간단하게 설명하자면 JApplet은 Applet의 subclass이다. 즉 Applet의 자식클래스가 JApplet이라는 넘(?)인데 말그대로 상속받았으니 부모(Applet)의 모든 기능을 포함하면서도 더 많은 다른 잔잔한 기능들(?)을 더 가지고 있는 것이 JApplet이라는 클래스인데 한마디로 요약하자면 스윙에서 애플릿을 멋드러지게 구현하기 위해 존재하는 것이라 보면 된다. 따라서 좀더 멋드러진 기능을 이용하기 위해 필자는 과감(?)하게 JApplet을 사용해 보기로 하겠다. ^^


이미 예전에 자바의 애플릿에 대한 강의를 필자가 진행한바 있는데 그런 까닭에 이 강좌를 그냥 넘길까 하다가 자바애플릿 강좌부문 톱에 랭크되어 있어 여러분의 열화와 같은 성원(?)에 보답하고자 본 강의를 언제나 그렇듯 초정성으로 준비하였다. 그러나 내용은 아주 짧다. 이유는 오직 핵심만 강조할 것이기 때문이다.ㅎㅎ

자 그럼 예제결과를 보면서 오늘 배울 내용이 무엇인지 살짝 보기로 하겠다.


시작부터 풍기는 포스(?)가 대단하다. 클릭하면 여러분은 까무러칠지도 모른다. 따라서 부작용(?)을 우려해 필자가 특별히 주의메세지를 넣었다. 오늘 이 예제를 사용하는데 있어 여러분의 항의(?)가 거칠지도 몰라 한참 망설인 후에 필자가 큰 결단(?)을 내리고 예제를 공개하는 것이니만큼 여러분도 본 강의를 거침없이 따라와주길 부탁한다. ^^

예제의 결과는 본 강좌의 맨 뒤에 공개하도록 하겠다. 욕을 하더라도 강의가 끝난 다음에 하라. ㅎㅎ 소스를 보기전에 예전 애플릿 강좌를 떠올려보기 바라고 잘 기억이 나지 않는다면 예전 강좌를 공부한 후에 다시 계속하면 이해하는게 누워서 떡(?) 먹기보다도 쉬울 것이다.^^


강조한데로 애플릿을 이용한 아주 심플한 예제를 만들어 보았다. 내용을 보면 본 예제소스인 Test93 클래스에서 JApplet을 사용하기 위하여 해당 클래스를 상속하였고 ActionListener 즉 뭔가 여러분을 위한 이벤트를 만들기 위하여 특별히 이 인터페이스를 불러다 구현하였다. 본 예제의 핵심은 init( ) 메소드이다. 애플릿에서 초기화시킬때 쓰는 메소드가 바로 init( )이다. 공부했던 내용이니 특별한게 없을 것이다. 본 예제는 버튼 하나 만들어서 화면에 띄우고 상대방이 그 버튼을 클릭하면 새로운 팝업창이 나오면서 이벤트 메세지가 나오는 소스다. actionPerformed라는 메소드도 공부하였으니 단지 복습하는 부분에 지나지 않을 것이다. JOptionPane쩜 어쩌구저쩌구 하는 것은 새로운 팝업창 즉 메세지창 띄울려고 쓴 것인데 showMessageDialog라는 메소드는 말그대로 메세지창이다. 쓰는 방식은 괄호안처럼 쓰면 되고 그 안에 쓰일 내용은 위에다가 String을 이용해서 메세지를 기입하면 된다.

알았으면 타이프하고 실행을 시켜보기 바란다. 그럼 여러분은 당황하게 될것이다. 왜? 예전 강좌를 제대로 공부하지 않았으니까 말이다. main 메소드가 없다고 에러날텐데 애플릿은 메인메소드가 없다고 하지 않았는가? 애플릿은 인터넷 브라우져에서 구현하기 위한 것이므로 이를 실행하기 위해서는 여러분이 따로 html 페이지를 만들어주어야 한다. 필자는 예제소스와 같은 Test93.html 을 만들어서 안에다가 아래와 같은 내용을 적고 실행한 것이다.


실행은 여러분의 인터넷 브라우져로 볼수도 있을 것이고 아니면 자바 프로그램 자체에 딸린 프로그램을 애용(?)하는 방법도 가능할 것이다. 방법은 여러분의 예제 소스가 있는 곳에서

appletviewer Test93.html

이라고 치면 작동된다. ^^


애플릿의 매력은 역시 여러분이 쓰고 있는 익스플로러나 크롬 또는 파이어폭스 같은 인터넷 브라우저에서 작동하는 점이 아닐까한다. 여러분이 만든 프로그램을 애플릿 형태로 변환한후에 해당 인터넷 브라우져에서 사용해보기 바란다. ^^

자 여기서 오늘 특집으로 여러분의 프로그래밍 실력을 한단계 업그레이드 시키기 위해 특별히 똑같은 결과를 위해 다른 방식으로 소스를 써보기로 하겠다. 아마 이런 방식으로 쓰여진 코드를 많이 보게될텐데 이게 코드가 길어지면 길어질수록 내용도 없는 것이 여러분에겐 복잡해 보이기만 할것이다. 그럼 아래 소스를 보기 바란다.



어차피 애플릿이니까 아까처럼 html 파일을 만들어야하니까 위처럼 써야되고 아래의 소스가 내용은 같은데 표현방식이 다르다. 왜 어렵게 느껴지는걸까? 쉽게 느껴진다면 여러분을 오늘부터 강이의 자바강좌 장학생(?)으로 임명하겠다. 짝짝짝~ ㅎㅎ 아마 복잡하게 보이는 이유는 바로 내부클래스의 일종인 익명클래스를 썼기 때문일 것이다. 보다시피 이렇게 익명클래스를 쓰면 어차피 한번 쓰고 말것이기 때문에 번거롭게 메소드를 두개 따로 쓸 필요가 없어 코드가 간결해진다. 물론 소스를 분석하는 입장에서는 조금 불편할지 모르겠지만 말이다. 쉽게 설명하자면 익명클래스는 메소드 내부에서 관련 객체 생성하면서 관련 메소드를 오버라이드하면 바로 사용가능하다는 것인데 중괄호{ }를 어떻게 쓰는지 관심있게 보고 끝날때 메소드안에서 끝나는 것이니 보기는 이상하지만 }); 이런식으로 끝나게 된다는 것을 유념하면 될것이다. ^^ 이에 관한 더 상세한 내용은 필자가 호랑이 담배 꼴아물고 빨던시절에 강의한 내용을 참조하기 바란다. ㅎㅎ

그럼 오늘의 이벤트 결과를 발표하면서 오늘 강의를 끝내도록 하겠다. 이미 소스를 공부한 이들은 무엇인지 파악했겠지만 여러분을 위한 강력한 필자의 메세지를 전파하고자 다시 한번 용기(?)를 내어 본 예제결과를 올린다. 다시 강조하지만 노약자나 임산부 혹은 19세 이하 어린이들은 보는 것을 삼가해주기 바란다.T 왜냐? 필자가 전하는 폭풍감동(?) 메세지에 여러분은 숨이벅차 쓰러질지도 모르기 때문이다. 그럼 아래의 결과로 인사를 대신하며 오늘 강좌는 여기서 마치겠다. ^^

2011년 9월 25일 일요일

스윙으로 부연설명 만들기(JToolTip)


오늘 강의는 JToolTip을 이용한 부연설명 기능에 대해서 알아볼텐데 우리가 흔히 웹이나 프로그램상에서 어떤 버튼이나 아이템에 마우스를 갖다대면 조그만 창이 나오면서 관련 버튼에 대한 설명이 나오는 것을 본적이 있을 것이다. 바로 오늘 그 툴팁 기능을 자바를 이용한 스윙에서 구현해 보고자 한다. 아이러니하게도 강좌 제목은 JToolTip을 썼지만 이 JToolTip 클래스를 이용하지 않고 간단히 이 기능을 이용하는 방법을 보여주기로 하겠다. 지금까지 필자가 하는 말이 무슨 얘기인지 모르겠다 하는 이들은 아래의 그림을 보기 바란다.^^


여기서 이 버튼에 마우스를 갖다대기만 하면 아래와 같은 화면이 마우스에 붙어서 나온다. 당근(?)이지만 클릭할 필요조차 없다.ㅎㅎ


버튼에다가 마우스를 갖다대면 위와같은 작은 창(?)이라고 하기엔 조금 큰 창이 나오는데 바로 이 기능을 어떻게 사용하는지 공부하자는 것이다. 한줄도 가능하지만 여러줄이 가능한 멀티라인으로 필자가 써먹었고 자세히 보면 그냥 텍스트만 쓴게 아니고 굵기도 진하게 쓰고 칼라도 파란색 집어넣고 줄도 띄우고 은근히 많은 기능들이 사용된 것이다. 그냥 보기엔 몇줄 찍찍 써놓은 것처럼 보이겠지만 말이다.ㅎㅎ 필자가 한줄만 딸랑 나오는 기능이 아니고 이렇게 여러줄로 나오는 것을 공부하자는 것은 여러줄 가능하면 한줄 쓰는것은 저절로 습득되기 때문이다. 그럼 예제 소스를 보기로 할까? ^^


헐~ 상당히 복잡해 보일지도 모르겠다. 허나 강이의 자바강좌의 JButton에 대해서 이미 공부한 여러분들은 일단 유리한 고지에 서있다고 봐도 무방하다. 이해가 잘안되는 부분은 중간에 보이는 버튼쩜 어쩌고 저쩌고 하는 불과 5줄 정도에 불가할테니까 말이다. 자 그럼 설명을 시작해보겠다. 버튼을 만들고 size 어쩌고 하는거는 마우스 대면 나오는 툴팁창에 대해서 설정하라는 것인데 가로 200 세로 50 의 다이멘숑(?)으로 창을 만들라는 것이고 다음줄부터는 그 창안에 내용을 쓰는 부분인데 html 코드를 이용하여 원하는 기능을 편리하게 위의 예제처럼 사용할수가 있다. html은 웹페이지에서 쓰이는 코드인데 요즘은 워낙 널리 보편화되어 있어서인지 굳이 프로그래머가 아니더라도 이 정도의 코드는 보면 알것이라 본다.ㅎㅎ

그러나 아쉬워하는 이들을 위해 필자가 살짝 건드리자면 html 사용할 것이라고 처음에 <html> 코드를 넣어주며 운을 띄워준다. 그리고 중앙배치나 문구 헤드라인으로 색깔은 파란색으로 폰트 글씨체는 이탤릭 스따일로 b는 bold의 약자로 굵게 쓰라는 거고 br은 한줄 띄워서 쓰라는거고 뭐 그런 잡다한 것들인데 이래저래 해보다보면 알게 된다. 사실 필자가 설명하고픈 부분은 이게 아니고 setToolTipText 메소드를 사용한 부분인데 이게 난데없이 어디서 튀어나왔을까 하는 궁금증을 가진 이들이 있을지도 모르겠다. 이런 이들에겐 머리라도 한번 쓰다듬어주고 싶다.ㅎㅎ

setToolTipText( ) 메소드가 있어서 우리는 굳이 JToolTip 클래스를 따로 불러 객체생성하고 그거 이용해서 써야하는 일련의 과정들 없이 바로 쓸수 있는데 대부분의 스윙 콤포넌츠에서 이렇게 바로 위의 예제처럼 써먹을수가 있다. 그 이유는 JComponent에 이 메소드가 들어있기 때문인데 여러분이 알고 있는 대부분의 스윙 콤포넌트들이 JComponent의 기능들을 계승하므로(상속받으므로) 가능하다.

이로써 스윙을 이용한 부연설명을 넣을수 있는 자바의 툴팁 기능에 대해서 알아보았다. 예제를 분석하면서 곰곰히 공부하다보면 그리 어렵지 않을 것이다. 다음 이 시간에는 어느 스윙 애플리케이션에서든지 자주 등장하는 콤포넌트 중의 하나인 JApplet에 대해서 공부해보는 시간을 가져보기로 할테니 오기 전에 예전에 배운 자바 애플릿 강좌를 한번쯤 다시 들춰보고 오기 바란다. 시간은 충분히 줄테니까 말이다.^^