2012년 6월 17일 일요일

스윙으로 내부프레임 만들기(JInternalFrame)


Special-Purpose Containers
JInternalFrame
JLayeredPane
Root pane(JRootPane)


오늘부터는 UI에서 특정한 목적을 수행하기 위해 쓰이는 콤포넌츠에 대해서 공부해 보기로 하겠다. 위의 총 3가지 콤포넌트들을 살펴볼텐데 각각의 컨테이너들이 어떻게 쓰이는지 각 요소별로 필자의 예제와 곁들인 학습을 통해 여러분의 사고력을 증진시키는데 중요한 시간이 되리라 기대하면서 순서대로 오늘부터 학습하겠다. 그럼 오늘은 JInternalFrame에 대해서 알아보면서 슬슬 시작해보자.^^


JInternalFrame의 단어에서 풍기는 의미를 분석해보자. J로 시작하니 자바스윙이고 Internal이라고 하니 뭔가 안에 있는 것이고 Frame이라고 하니 프레임인가 보다. 그러니 자바스윙으로 내부프레임을 지칭하고 있는 함축적인 의미가 영어단어만 봐도 머리속에 팍팍오고 있을 것이라 기대하면서도 깊은 의심이 맴돌고 반신반의하는 마음이 교차하고 있지만 필자는 여러분을 굳게 믿고 묵묵히 강의를 진행해 보겠다.ㅎㅎ




오늘 공부하게될 예제의 결과물을 여러분의 흥미를 돋구기 위해 미리 공개하였다. 위의 그림에서 보다시피 가장 바깥에 항상 있는 기존 프레임 안을 보면 총 5가지의 내부프레임이 보일 것이다. 이 5가지의 내부프레임을 통해 여러분은 내부프레임으로 구성할수 있는 5가지 핵심기능들의 정수들을 바로 오늘 이시간 필자의 예제를 통해 짜릿한 흥분과 엄청난 경외심을 느끼면서 공부하게 될것이라 내심 흠칫 기대해 보면서 슬슬 이야기 보따리를 풀어보겠다.^^

예제코드를 보기에 앞서 여러분의 이해도를 높이기 위해 JInternalFrame을 쓸때 항상 염두에 두면서 프로그램을 짜야하는 사항이 있는데 그중에서 가장 기본적인 사항들을 간략하게 설명하자면 첫째로 내부프레임을 쓰기위해서 컨테이너에 집어넣어야 하고, 둘째로 사이즈를 지정해야하고, 셋째로 위치를 지정해야하고, 넷째 마지막으로 이것을 보이게끔 설정해 주어야한다.

지금 저게 무슨 말이지 정신이 멍한 이들이 있다면 그것은 너무도 당연한 것이다. 배우지도 않았는데 어떻게 벌써 다 이해한단 말인가? 원래 강의란 것이 좀 어렵다싶은 화두를 던져놔야 그게 나중에 그럴듯해 보인다.ㅎㅎ

자 설명 들어간다. 내부프레임을 만들려고 하는데 그럼 당연히 어느정도 크기로 만들어야지하는 기본적인 질문이 생길것이다. 그리고 프레임안에 넣으니 어디에 표시를 해야될지 생각하게 될거고 내부프레임 기본 설정이 자바에서는 기존 프레임처럼 원래 보이지 않게끔 되어있다. 따라서 이것을 보이게끔 바꿔줘야 써먹을수가 있도록 자바에서 만들어 놨으니 그냥 보이게끔 설정하는 방법만 알면된다. 너무 당연한걸 풀어서 설명하니까 어이가 없을 것이다. 이제 이 당연한 것을 예제코드로 보면서 여러분이 궁금해할만한 포인트만 콕콕 찝어서 풀어내도록 하겠다.^^


필자가 내부프레임에 대해서 핵심만 공부할수 있도록 정성에 정성을 담았으니 여러분은 온 힘을 기울여 필자의 정성을 쪽쪽 빨아가야 할것이다. 자 그럼 예제를 분석해 보도록 하자. 여러분이 위의 클래스 불러들인 것을 보면서 내부프레임 클래스 말고 JDesktopPane이라고 하는 생소한 클래스가 하나 보일 것이다. 아까 필자가 컨테이너에 넣어서 내부프레임을 만들어야 보인다고 했는데 보통 이 클래스에다가 내부프레임을 넣어서 보이도록 만든다.

JDesktopPane은 JInternalFrame의 부모격으로 쓰인다고 생각하면서 이용하면 이해가 쉬울 것이다. 또한 JDesktopPane에서 기본적으로 유저인터페이스의 자바 룩앤필이 적용되어 있으니 내부프레임이 조금 그럴듯하게 기존 윈도우 프레임보다 멋있게 나온다.

다시 프로그램으로 돌아가서 보면 이 예제의 핵심 부분은 바로 Enhanced For Loop 안에 있는 것이 지금 공부해야될 내부프레임의 요체라 할수 있겠다. 사실 포룹 위아래에 있는 것은 여태껏 지겹게 보아왔을 것이므로 설명 생략하고 본론으로 들어갸겠다. 그리고 향상된 포룹 형태인 enhanced for loop에 대해서 까먹었다면 필자가 예전에 강의했던 for loop 강좌를 다시 한번 숙지하고 이 자리로 돌아와서 보기 바란다. 필자 리바이벌은 안한다.ㅎㅎ

왜 필자는 For 룹을 굳이 이용했을까? 이런 의문이 드는가? 그럼 다시 한번 예제의 결과물을 쳐다보기 바란다. 내부프레임을 5개 만들려고 한다. 프레임이 다 비슷비슷하다. 그림처럼 코드도 거의 비슷한 것이 5번이나 반복될 것인데 이것을 왜 5배나 힘들게 생고생해야하나? 배운 것은 써먹자. 제발, 아끼지 말고~ ㅎㅎ

public JInternalFrame(String title,
                      boolean resizable,
                      boolean closable,
                      boolean maximizable,
                      boolean iconifiable)

지금 위의 코드는 바로 JInternalFrame의 생성자 중 하나인데 필자의 예제에 있는 internalFramesArray가 바로 이를 기초로 하고 있다. 첫째 매개변수는 제목을 쓰는데고, 두번째는 프레임에다가 마우스 갖다대면 화살표로 바뀌면서 폈다 줄였다 하는 기능이고, 세번째는 창을 닫게 하는 기능, 네번째는 보통 프레임 오른쪽 상단에 보면 중간에 있는 버튼으로 화면 확대와 줄임 기능이고, 다섯번째는 보통 프레임 첫번째에 위치하는 버튼으로 화면을 최소화할때 사용하는 기능을 말하는데 이게 boolean이다. 따라서 true나 false로 가능하게 만들지 아니면 사용하지 못하게 할지의 여부를 결정할수 있는 것이다. 예제의 배열에서 필자가 false를 각 요소마다 하나씩 넣은 이유가 이런 기능들을 프로그램을 구동시키면서 살펴보라고 고려한 끝없는 배려심이 담겨있는 것이니 그점 생각하면서 직접 버튼을 눌러보면서 차이점을 알아보는 시간을 필히 갖기 바란다.^^

그리고 필자가 예제의 핵심부분이라고 말했던 for 룹은 실상 가르칠게 없다. 여러분은 이미 알게모르게 내부프레임의 정수를 깨우치고 있을 것이기 때문이다. 필자가 내부프레임을 만들때 염두에 두어야 하는 사항 네가지를 이미 알려주었다. 그 네가지 사항이 바로 for 룹안에 있는 네단락에서 펼쳐지고 있는 것이다. 내부프레임을 어떻게 만드는지 프로그램의 흐름을 이미 알고있다면 그냥 보기만해도 저절로 이해가 될것이다. 굳이 들어가자면 사이즈와 크기를 지정하는 방법이 궁금할텐데 필자가 이미 그건 주석을 달아 한큐에 해결해 버렸으니 더 설명할 것도 없을 것이나 그래도 궁금해하는 이들이 혹여나 있을까봐 조금만 더더 설명하겠다.ㅎㅎ

사이즈와 크기를 한큐로 해결하는 방법이 콤포넌트에 있는 setBounds( )라는 메소드를 이용하는 방법이다. 물론 setSize나 setLocation같은 메소드를 이용할수도 있겠으나 좋은 길 놔두고 굳이 돌아갈 필요는 없다하겠다.

public void setBounds(int x, int y, int width, int height)

바로 위의 코드인데 x랑 y는 중심 좌표로 위치를 찍을수 있고 width랑 height을 통해 프레임의 가로와 세로 사이즈를 정할수 있다. 그리고 CENTER가 들어가 있는 것들은 원하는 곳에 위치를 설정해 주는 것인데 프레임을 최소화하거나 최대화시켰을때 내부프레임이 제대로 표시되도록 해주기위한 장치이다. 이게 말로 설명하는 것보다 이거 없애버리고 직접 실행해보면 저절로 알게된다. 마지막으로 setVisible( ) 메소드를 통해 보이게끔 만들어주는데 기존 프레임처럼 내부프레임도 이것이 있어야 볼수 있음을 잊지 말기 바란다. 한마디로 내부프레임을 만들면서 기본적으로 고려해야할 사항 네가지를 여러분이 숙지한다면 거침이 없을 것이다.^^

2012년 4월 28일 토요일

스윙으로 도구바 만들기(JToolBar)


오늘은 자바 스윙중에서 JToolBar 클래스에 대해서 공부하는 시간을 가져보기로 할텐데 지금쯤이면 이제 스윙의 클래스 계보도는 아마 다 까먹었을 것이다. ㅎㅎ 필자가 예전에 보여준적이 있지만 보시다시피 다시 리마인드하라고 친절하게도 필자가 위에 멋진 스윙 클래스 개요도를 올려놓았으니 오늘 배우는게 어디에 있는지라도 찾아보기 바란다. 찾다보면 한번은 보겄지.^^

자 다 봤으면 강이의 자바강좌 세계로 다시 돌아오기 바란다 오바~


이번 시간에 배울 예제는 위와 같다. 일단 보면 알겠지만 기본 프레임이 아닌 데코레이션을 예쁘게 해놓았는데 어떻게 표현하는지 예전 시간을 기억한다면 대충 감이 올것이고 아니라면 그냥 필자의 내공이 무지막지하게 담긴 소스만 봐도 쉽사리 알게 될것이다. 사실 코드로 해결이 안되는 부분이 있는데 위의 예제 결과를 보면 그림이 삽입되어 있다.

  

설마 이런걸 코드로 쓰면 나오는걸로 착각하고 있었던 이는 없겄지? 오바하지 말아라. 그런건 없다.ㅎㅎ 당근 그림 이미지를 불러들여서 써야한다. 그럼 뭐가 필요할까? 이거 예전 강의에서 하는 방법을 알려줬는데 기억하는 이가 있남?? 허걱~ 없는거여?_? 음.. 일단 알아서 자진 꿀밤 한대씩 때리고 아래의 예제 소스를 보기 바란다.^^


오늘 강의의 하이라이트인 예제 소스를 지금 막 공개하였다. 보기 좋으라고 가운데다가 중요한 내용이 눈에 쫘악 들어오도록 띄워쓰기까지 한 필자의 친절함에 심심한 감사를 표하길 기대하면서 오늘 자바 강의는 이만 마치도록 할까한다. 왜 설명이 없냐고? 예제를 자세히 보기 바란다. 너무 자세한 설명에 여러분은 심심하다못해 깊은 감사를 표하지 않을수 없을것이라 자못 다시한번 기대하면서 필자는 이만 물러갈까 한다.ㅎㅎ 다 배운거에 JToolBar에다가 기존에 배운 JButton을 어떻게 추가해 가는지 곰곰히 스텝(?)을 밟아보면 이해가 쏙쏙 될것이다. 원 투 원 투~ 이런 스텝 아니여~ㅎㅎ 이제 앞으로 자바 스윙 컴포넌츠에 대해서는 세번의 강좌만을 남겨두고 있다. 스윙의 전반적인 사항을 그렇게나마 마치려고 하니 힘들고 지친 여러분의 영혼을 세번만 더 다그치고 달리기 바란다.^^