2011년 9월 10일 토요일

스윙으로 라벨 만들기(JLabel)

오늘 이 시간에는 JLabel이라는 스윙 클래스를 이용해서 텍스트나 이미지 아니면 둘다 화면창에 띄우는 방법을 알아볼텐데 이 레이블이 ㅎㅎ 이 라벨이 여러분 입맛대로 예전 텍스트창처럼 키보드로 글자 또 입력하고 수정하고 이런거 되지 않는다. 라벨이 뭐냐? 매장에서 물건살때 가격 라벨을 손님이 제멋대로 바꿀순 없지 않나? 마찬가지다. 자바 라벨도 유저가 임의로 바꿀수가 없다.(?) 비유가 이상하더라도 묻지도 말고 따지지도 말아라. 차이점을 설명하기 위한 배려니까 말이다. ㅎㅎ

그럼 이제 본격적으로 스윙 라벨에 대해서 공부해 보기로 하자. 노파심에 다시 말하지만 위에서 언급한 가격 라벨은 잊어라. 전혀 상관없으니까 말이다. 지금 가격 라벨 얘기했다고 물건이나 상품 생각하고 있는 이들은 당장 컴터 책상앞에서 일어나 냉수라도 한잔 마시고 오기 바란다.^^

강이의 자바강좌를 통해 열심히 공부하고 있는 이들은 알게 모르게 확실하지는 않지만 막연하게나마 JLabel이 어떤 것이라고 짐작(?)정도는 하고 있으리라 기대한다. 성급한 기대인가?^^ 약방에 감초처럼 필자가 다른 예제를 통해서 써왔다고 기억되니까 말이다. 기억이 안난다고 자기자신을 자책하는 이들은 없길 바란다. 다만 오늘 강좌를 보고도 기억이 가물가물하다면 그때 자신을 원망해도 늦지않다.ㅎㅎ 허나 원망할 일은 죽었다 깨어나도 없을 것이다. 여러분은 오늘 이 한편의 드라마틱한 강좌를 통해 JLabel의 개념과 원리를 아주 자연스럽게 습득하게 될것이니까 말이다.^^


자바 스윙의 패널인 JPanel에 대해서도 후에 다루겠지만 라벨이 뭔지 판넬이 뭔지 도저히 뭐가뭔지 모르겠다 하는 이들은 도움이 될까하여 관련 그림을 올려본다.


오늘은 초반부터 JLabel을 이용해서 텍스트 글자와 이미지를 동시에 띄워보도록 하겠다. 동시에 작동시키는거라 엄청난 내공(?)이 가미된 예제인만큼 여러분이 소화할수 있을지 극히 염려스러운 마음 금할수 없지만 이를 뒤로한채 오늘의 예제를 이용한 결과물을 아래에 올려보겠다.^^


결과를 보니 이미지와 글자가 동시에 찍혀있다. 그럼 소스는 어떤 식으로 구성되어 있을까? 필자의 답만 하염없이 기다리지 말고 잠시 생각해보기 바란다. 졸지말고~ 쨔샤~ ㅎㅎ 오늘 JLabel 클래스에 대해서 설명하고 있으니 당연히 썼을거고 이미지를 올렸는데 어떻게 하나? 눈치 빠른 이들은 벌써 ImageIcon이라는 클래스를 사용했을거라는 것을 짐작했을 것이다. 필자가 조금전에 이미 슬쩍(?) 언급했으니까 말이다. 안보이면 할수없고.. 자 그럼 소스를 보겠다.


언제나 그렇지만 소스를 보다시피 솔직히 필자가 설명할 것이 없다. 거참 도대체 왜 그런지 신기할 뿐이구나.ㅎㅎ 그래도 강이의 자바강좌 수강생들(?)을 위해 몇마디 읊어보기로 하겠다. 그 와중에 또 여러분이 건질게 있을지도 모르니까 말이다.^^ 맨위에 필요한 것들 자바도서관(?)에서 수입(?)해서 가져왔고 메인메소드 안에 내용을 봐도 여러분이 열공했다면 중간 단락 빼고는 뭐 특별하게 씹을것도 없을 것이다. 라벨을 정의할때 즉 라벨 생성자 만들때 안에다가 쓰여질 텍스트, 이미지, 위치를 저렇게 정하여 주면 위의 결과를 볼수가 있다. 이미지를 불러오는 것은 이미지아이콘 클래스를 이용하였는데 자바파일이 있는 위치에 images 폴더를 만들고 java.gif(이거 없다고 안해보는 이들을 방지하기 위해 밑에 올리겠다.)를 넣어두면 무리없이 작동될 것이다. 물론 폴더 안만들고 자바파일이 있는 위치에 이미지 파일이 있다면 경로없이 ImageIcon 생성할때 그냥 java.gif만 써놔도 당근 된다. 뭐 있어보이라고 아니 경로를 지정해서 불러다 쓸수 있다는거 보여줄려고 이렇게 만든거다.ㅎㅎ


소스를 보면서 이런 이들이 있을지도 모르겠다. 난 글자만 올리고 싶어 아니면 그림만 올리고 싶어하는 이들 말이다. 필자는 이렇게 딴지 거는 이들(?)을 항상 환영한다. 자바 밖의 세계에서는 이런 딴지가 통용되지 않을지 모르지만 이 자바 세계에서만큼은 여러분이 거는 딴지만큼 여러분의 실력이 향상될 것이니까 말이다.^^ 필자는 여러분이 걸 딴지조차 사전에 제거해 버리는 걸로 유명세(?)를 타고 있으니 오늘도 예외없이 사전제거 작업에 들어가 보겠다.

JLabel클래스를 이용해서 글자만 올리고 싶다면
JLabel label = new JLabel("자바");

이미지만 올리고 싶다면
JLabel label = new JLabel(image);

속으로 그거 너무 당연한거 아니냐하는 이들을 위해 다음부터 이런 내용은 생략할테니 앞으로는 스스로 해보기 바란다. 위치는 예제 소스에서 보는 것처럼 그 뒤에 알아서 써주면 된다. LEFT나 RIGHT 혹은 CENTER로 말이다. 자 여기서 또 다른 딴지를 거는 위대한 이들(?)이 혹여나 있을지 모르겠다. 그럼 위치를 정하지 않으면 어디에 찍히는거얌? 호오~ 정말 이렇게 딴지 거는 이들이 있을까? 그런 이들을 위해 선차단 전문가인 필자가 준비했다는듯이 거침없이 답변하겠다. 디폴트(default) 기능이 있어서 개발자가 정해놓지 않으면 이미지는 중앙에 자동으로 배치되고 텍스트는 이런 글처럼 알아서 자동으로 표현된다고 말이다. 해보면 알게된다.^^ 다음 시간에 만나요~ 룰루랄라~~

이렇게 하면서 끝낼려고 했는데 JLabel이 여러분 생각처럼 쉽지 않을거다. 특히 여러분 중에 딴지대마왕(?)이 있으면 해결이 힘들어 여러분의 뇌세포가 죽기 시작할지도 모른다. 도대체 어떤 딴지이길래?? 만약에 누군가가 그럼 이미지 이거랑 저거랑 양옆이나 위아래에 글자 넣어서 쓸수는 없어?라고 묻는다면 어떻게 해야되겠는가? 꼭 한번만 쓰라는 법이 있나 여러번 쓸수도 있지 않겠나 당근 그렇다. 이런 여러분의 궁금증을 해결하기 위해 오늘은 강의 시간을 대폭 늘려 2 세컨라운드에 돌입하겠다. 첫라운드에 넉다운된 이들이 있다면 잠시 간식이라도 먹고와서 계속 공부해 나가기 바란다.^^

자 그럼 충분한 휴식은 취했으리라 보고 2라운드를 시작하겠다. 결과부터 선방때리고 소스는 이어서 보기로 하자.


예제에서 풍기는 포스(?)가 심상치 않음을 느낄 것이다. 더불어 여러분이 이것을 습득한다면 JLabel이 여러분의 든든한 우군(?)으로 자리잡게 될것이니 긴장풀고 따라오기 바란다. 그냥 따라오면 되도록 필자가 강력한 자바 필진(?)을 예제에 구축해 놓았다.ㅎㅎ

소스를 실행하기에 앞서 images 폴더안에 준비물(?)이 필요하다. 제군들은 본 그림 파일을 알아서 저장하고 폴더안에 이미지 파일들을 넣어서 예제 실행하는데 이상이 없도록 만전을 기하기 바란다. 오바~ ㅎㅎ






위의 그림들이 순서대로 예제에서 사용된 것들이다. 이름이나 관련 그림은 굳이 소스를 보지않아도 실행화면만 보면 저절로 매치가 될것이다. 올린 그림 하나하나에도 필자의 장인정신(?)이 모락모락 피어나고 있다.ㅎㅎ

이제 오늘의 하이라이트일까나? 대망(?)의 예제소스를 살펴보면서 이번 강좌를 마무리해 보도록 하겠다.


예제가 잘 안보이는 이들은 예제에 대고 클릭하면 확대해서 보여준다. 참고로 그 기능은 필자가 구현한게 아니다.ㅎㅎ

그럼 소스 해설을 시작하겠다. 수입목록(?)부터 살펴보면 GridLayout이라는 클래스를 가져온것이 보일 것이다. 레이아웃은 말그대로 배치를 자알~ 하기위해서 있는거다. 종류도 꽤 된다. 플로우레이아웃 보더레이아웃 지금보는 그리드레이아웃등이 있는데 사실 선택해서 쓰는건 여러분 자유지만 오늘 예제에 가장 적합하면서도 여러분의 이해력을 월등히 증진시키고 그보다도 제대로된 정석플레이(?)를 여러분에게 보여줌으로써 무슨 소스를 봐도 대응할수 있도록 만들기위해 고민의 고민을 거듭한 결과 그리드레이아웃이라는 솔루션을 들고 여러분을 찾아뵙게 된것이다. 과장(?)이 너무 심하더라도 한귀로 듣고 한귀로 흘리는 여러분의 지혜를 기대하면서 다시 소스로 돌아가보기로 하겠다.ㅎㅎ

사실 그동안 스윙을 공부하면서 은근슬쩍 다 건드려놔서 이해하는데 무리가 없겠지만 그래도 어려워하는 이들을 위해 주석을 조금 달아놓았다. 필자의 설명과 함께 소스를 보면 어려울건 없을 것이니 계속 보기로 하자. 첫번째 단락은 이미지와 라벨에서 쓰일 변수들을 선언해놓은 것이다. 총 5개의 라벨을 이용할 것이고 또한 5개의 이미지를 함께 넣은 것이라 변수가 5번까지다. 두번째 단락은 강이의 자바강좌 회원들은 누구나 알것이니 생략하고 세번째 단락은 좀전에 언급한 그리드레이아웃 설정하는 부분인데 라벨을 가로로 3줄과 세로로 2줄을 만들어 끼어넣는다고 보면 될것인데 정 이해가 안가는 이들은 테이블처럼 생각해보면 감이 올것이다.

네번째 단락은 쓰일 그림의 이미지경로를 설정하는 부분인데 워밍업 시간에 충분히 공부하였으니 보면 알것이고 다섯번째 단락부터 쭈욱 라벨을 어떻게 쓰고 표기할 것인지 설정하는 부분인데 setVerticalTextPosition과 setHorizontalTextPosition 메소드를 이용해서 글자(text)를 어디다가 배치할지 정할수 있다. 힌트를 주자면 Vertical은 상하배치(TOP, BOTTOM, or CENTER)고 Horizontal은 좌우배치(LEFT, RIGHT, or CENTER)이니 메소드에 맞게 명령을 주면 된다. 수직과 수평의 개념인데 비단 자바뿐만 아니라 여러곳에 쓰이니 이 정도 용어는 이미 익숙하리라 본다.

label5 설정부분을 보면 필자가 주석을 달아놓았는데 SwingConstants 인터페이스를 이용해서 SwingConstants.RIGHT 이런 식으로 라벨의 위치를 정하여도 똑같은 사용이 가능하다. 어 바꿔서 해봤는데 안돼요?라고 말하는 학생은 없길 바란다. 보나마나 import javax.swing.SwingConstants; 를 빠뜨리고 실행했을테니까 말이다. 이 정도는 알아서 척척! 알간? ㅎㅎ 말그대로 스윙에서는 레이아웃할때 써먹기 좋으라고 이런 위치좌표를 상수로 정해놓았는데 말로 다 설명하기는 힘들어 필자가 요약정리된 것을 올릴테니 필요한 이들은 참고하기 바란다.


겉핧기를 너무한듯한데 그렇게 써먹을수도 있다는 것이니 알아만두고 다시 소스로 돌아가서 JLabel에다가 점찍고 위치정해서 우리는 정석플레이(?)하면 그만이다. 그리고 수직 수평 설정할때 방금 보여준 것처럼 자바에서는 안에서 처리를 int(정수)로 읽어들인다. 그래서 예제처럼 숫자를 넣어도 작동하는 것이다. 다음 단락은 getContentPane( ) 메소드를 이용해서 라벨들을 프레임에다가 하나 하나 정성들여 추가시키면 되고 마지막 단락이야 역시 강자인(강이의 자바강좌를 사랑하는 사람들의 모임? ㅎㅎ)이라면 당근 알아들었을 것이니 생략한다.

JLabel은 스윙에서 심심치않게 이용되는 중요한 키워드인데 쓸줄 알아도 제대로 알지못해 혼란을 겪고 있는 이들을 위해 무려 2라운드에 걸친 대장정(?)을 바로 이 자리에서 펼쳤다. 그런만큼 여러분도 평소에 비해 2배로 복습에 임해주길 바라면서 오늘 강의를 마치겠다. 아참 또 잊을뻔 했다. 사측에서 회원 좀 모집하라는 눈치를 주지만 그런거에 굴하지않고 제한없이 그냥 강의를 날리고 있다. 필자가 딴 이야기는 안하겠다. 회원 가입하고 인강을 보면 미처 보지 못했던 주옥같은 해설들(?)이 군데군데 화면에 보이기 시작할 것이다. 허나 그에 개의치말고 가입하는 그 시간(1분 미만)조차 아까운 이들이라면 그냥 공부에 정진하기 바란다.^^

댓글 3개: