2011년 12월 10일 토요일

스윙으로 프레임 만들기(JFrame)




오늘은 스윙의 JFrame에 대해서 공부할텐데 그동안 강의를 쭈욱 본 이들은 알겠지만 그냥 맨 처음에 써놓고 시작하는거라고 무의식적으로 써왔을거라 본다. 이미 대부분 아는 내용이겠지만 오늘은 그동안 미처 설명하지 못한 아니, 아 그렇지 그런것도 컨트롤이 가능하구나라는 말이 나오도록 조금 아주 쪼금 깊이 들어가보도록 하겠다.^^

JFrame은 최상위 탑레벨 클래스 중 하나로 스윙에서는 항상 자연스럽게 쓰는 클래스 중에 하나이며 창의 제목과 테두리의 사이즈를 컨트롤하는데 주로 써온것을 여러분은 기억하리라 본다. 바로 소스를 보면서 그동안 다루지 않았던 부분을 맛배기(?)로 공부해 보기로 하겠다. 그동안 배운거 재방송만 하면 엄청난 비난(?)이 쏟아질 것이기 때문에 울며겨자 먹기로 다른거 조금 건드려보기로 결정한 것이니만큼 군말없이 따라오기 바란다.ㅎㅎ


프레임 즉 윈도우 창을 보면 오른쪽 구석에 미니마이즈 하는 즉 최소화 버튼이 있고 최대화 버튼 그리고 x 표시인 닫힘 버튼이 있는 것을 기억할 것이다. 거기서 닫힘 버튼을 눌렀을때 크게 네가지로 분류해서 각기 반응을 입맛에 맞게 만들어 볼수가 있다. 필자가 그동안 계속 써왔던 EXIT 어쩌구 하는 것 말고도

//EXIT_ON_CLOSE (defined in the JFrame class)
//DO_NOTHING_ON_CLOSE
//HIDE_ON_CLOSE (the default for JDialog and JFrame)
//DISPOSE_ON_CLOSE (the default for JInternalFrame)

위와 같은 명령들이 있는데 눌리면 반응없게도 만들수 있고 누르면 닫히긴 하는데 꺼지지 않고 계속 숨은채로 메모리에 상주하게 만들수도 있는 그런 기능들이 있다. 자세한 내용은 필자가 ( )를 사용하며 유창한 영어(?)로 표기해 놓았으니 알아서 번역해보기 바란다.ㅎㅎ

그리고 창이 뜰때 사이즈뿐만 아니라 그 창이 맨처음에 화면에 나타나는 위치까지도 지정할수가 있다. 소스를 실행해보면 알겠지만 위의 소스에서는 중앙에다가 배치하라고 명령해 놓은 것이니 정말 그런지 각자 실험해 보자.

그럼 끝내기 전에 여기서 문제 하나를 내보겠다. 소스를 보면 닫는 명령을 여기선 쓰지 않았다. 그럴 경우 위의 네가지 닫는 명령중 자바는 어떤 것을 디폴트로 놓고 작동시키게 되는 과연 어떤 것일까? ㅎㅎ 실행해보면 알것이고 괄호안의 설명을 잘 읽어보면 자동적으로 알게 될것이다. 소스에 답을 써놨는데도 못찾는 이들은 없으리라 믿는다.ㅎㅎ 숙제니 알아서 파악하기 바라고 마지막으로 노파심에 한마디 더하자면, 위의 소스를 실행했는데 창을 닫았으나 완전히 닫히지 않을 것이므로 다시 프로그램을 작동하는데 애로(?) 많을 것이다. 그런 이들을 위해 특수 비법을 이 시간에 전수해 주겠다.^^

윈도우의 작업 관리자로 들어가면 프로세스에서 java.exe라는 파일을 볼수 있을 것이다. 이것을 꺼주면 무리없이 원상태로 돌아갈 것이다. 우리는 자바를 배우고 있다. 당근 자바 실행파일을 무력화시키면 해결되는 것이다. 지금 필자의 말이 이해가 되지 않고 저거 도대체 무슨 이야기 하고 있는거야 하는 이들이 있다면 소스를 공부하고 실행해서 직접 겪어보다보면 저절로 알게 될것이리라 생각한다. 그럼 다음 시간에는 스윙의 대부분 프로그램에서 사용되고 일반적으로 쓰이는 컨테이너들에 대해서 공부할 것인데 다 배운 내용중 하나이니 무슨 클래스인지 한번쯤 생각해 보기 바라면서 오늘은 이만하겠다.^^

2011년 11월 11일 금요일

스윙으로 대화창 만들기(JDialog)

오늘은 비단 자바 스윙에서 뿐만 아니라 여러가지 프로그램이나 소프트웨어상에서 흔히 접할수 있는 대화창을 어떻게 구현할수 있는지 다양한 종류에 맞는 쓰임새와 기능들에 대해서 공부해보는 시간을 가져보도록 하겠다. 거창하게 표현할려니 힘들구나. ㅎㅎ 한마디로 대화창 어떻게 띄우는지 알아보자는 것인데 오늘 강좌를 통해서 여러분은 스윙으로 약방에 감초처럼 자주 쓰이는 대화창(dialog)을 자유자재로 다룰수 있는 능력자(?)로 변신하게 될것이다.^^

JDialog 클래스는 말그대로 Dialog 클래스를 계승하는데 이 JDialog 클래스를 이용하는 것보다 훨씬 편하고 손쉽게 쓸수 있는 방법이 있는데 바로 그것이 JOptionPane클래스안에 있는 많은 메소드들을 이용하면 다양한 기능을 보다 빠르고 효율적으로 쓰는것이 가능하다. 따라서 본 강좌에서는 JDialog 섹션이지만 이 기능들을 흡수(?)하고 있는 JOptionPane클래스를 집중적으로 조명한다. 따라서 여러분은 시작하자마자 대화창의 응용편으로 본격 진입하게 된다. ㅎㅎ 긴장되는가? 그러나 언제나 그렇듯 응용편인데도 불구하고 이 강좌가 끝날때쯤이면 여러분은 고작 이거였어? 라는 어처구니 없는 감탄사(?)를 연발하게 될것이다. 이런 어이없는 사태로 돌입하게 되는 이유는 오직 하나, 필자가 군더더기들은 홀라당 다까버리고 대화창에 대한 핵심(?) 비법만을 여러분께 전수할 것이기 때문이다.^^

오늘 처음 이 내용을 공부하는 이들도 있을 것이고 아닌 이들도 있겠지만 소스를 접하다보면 JDialog라는 말은 눈씻고 찾아봐도 없는데 대화창은 화면에서 뜨는 사태가 비일비재할 것이다. 그 비밀의 키를 쥐고 있는 클래스가 바로 JOptionPane이라는 클래스인데 이런 대화창 같은 팝업창을 띄울때 상당히 유용하다. 경고 메시지나 질문 메세지 그 밖에 다양한 정보 메세지들을 JOptionPane이라는 클래스를 통해서 아주 간단하게 써먹을수 있다. 백문이 불여일견이니 오늘 배울 소스의 결과를 보여줄텐데 한편의 파노라마(?)를 보는듯한 착각에 빠질지도 모르므로 정신 똑바로 차리기 바란다. 졸지 말라는 뜻이야.ㅎㅎ














올릴게 많으니 굉장히 힘드는구먼. 자 바로 위의 그림들이 오늘 우리가 실행하면 나올 예제소스의 결과물들이다. 아마 여러분은 벌써부터 초긴장 모드로 돌입했을지도 모르겠다. 이거 대화창 일일이 하나하나 만들려면 소스는 도대체 얼마나 길게 써야 되는거지? 라고 말이다. 그러나 필자가 이미 여러분과 약조한바 오직 핵심비법만을 전수할 것이기 때문에 그런 오해는 금물이라는 점을 미리 밝혀두는 바이다.ㅎㅎ

사실 대화창이 나오고 메세지만 전달하는 방법과 바로 위의 그림처럼 yes나 no로 선택하는 경우에 유저의 선택에 따라서 결과물에 해당하는 다음 경로가 달라져야 할것이나 그런것까지 구현할 경우 복잡해서 자포자기하는 이들이 많을 것 같아 오직 기본에 충실한 소스를 만들었다. 따라서 예스를 하든 노를 선택하든 결과의 차이가 없다. 이런 것은 액션퍼폼이나 액션리스너를 사용해서 만들수 있는데 필자가 여러분이 잊을만하면 건드리고 또 건드리고 해왔으므로 본 예제를 적절히 응용해서 접목시키면 선택에 따른 결과도출도 여러분이 스스로 쉽게 만들수 있으리라 생각한다. 그럼 여러분이 꿈(?)에 그리던 소스를 보여주기로 하겠다. 이해를 돕기 위해 정성스런 한줄 한줄 띄어쓰기를 통해 해당 결과물을 소스와 손쉽게 비교해볼수 있도록 세세한 신경(?)을 쓴점 여러분이 알아주기 바라면서 예제를 보기로 하자.^^


소스를 보면 놀라운 일들이 벌어질 것이다. 그냥 보는 족족 이해가 될것이다. 왜 그런지는 필자도 알수가 없다.ㅎㅎ 처음에 프레임을 만드는 이유는 대화창을 띄우는 기본 베이스가 필요하기 때문이니 그런가보다 하고 넘기고 그 다음부터 나오는 대화창 소스를 관심있게 보면 되겠다. JOptionPane클래스안에 들어있는 showMessageDialog, showConfirmDialog, showOptionDialog, showInputDialog와 같은 메소드를 이용하면 이렇게 간단하게 대화창을 쓸수가 있는데 형식은 안에 들어있는 내용을 결과와 함께 비교해보면 이해하는데 어려움이 없을 것이다. 소스를 보면 아래와 같은 텍스트를 보게 된다.

메세지 종류(message type)
WARNING_MESSAGE
ERROR_MESSAGE
INFORMATION_MESSAGE
QUESTION_MESSAGE
PLAIN_MESSAGE

옵션 종류(option type)
YES_NO_OPTION
YES_NO_CANCEL_OPTION
DEFAULT_OPTION
OK_CANCEL_OPTION

본 예제를 실행해보면서 결과와 비교해보면 느끼겠지만 위의 메세지와 옵션 타입 명령을 주는 것만으로도 아이콘을 상황에 따라 바꿀수 있고 또한 해당 아이콘을 여러분이 마음껏 교체하고 그 옵션 버튼에 대한 문구까지도 여러분이 손쉽게 바꿀수 있는 기능을 제공한다. 필자가 이번 예제 소스를 만들면서 둔 주안점은 그냥 여러분이 원하는 프로그램에 입맛대로 필요한 부분만 가져다가 바로바로 구현할수 있도록 최대한 배려해서 만든 대화창 소스이니 이보다 더 좋을순 없다 하겠다.ㅎㅎ

이 소스에서 재미있는 부분은 역시 배열(array) 요소가 가미된 부분이라 할수 있겠다. 대화창에서 버튼 누르는 이름까지도 object를 이용한 array 요소를 이용해서 여러분이 원하는데로 이름을 만들수 있고 맨끝에 options[1]이라는 부분은 커서를 CANCEL에다가 기본으로 놓아두라는 것을 의미한다. 아래의 선택 예제에서도 마찬가지로 커서의 위치가 어디에 놓여있는지 보면 뽀인트(?)가 무엇인지 저절로 알게 될것이다.^^