2011년 8월 14일 일요일

스윙으로 테이블 만들기(JTable)

오늘은 스윙을 이용해서 테이블을 만들어 보기로 하겠다. 탁자를 말하는 것이 아니다. 아래와 같은 엑셀처럼 스프레드쉬트 그런 테이블을 만들어 보자는거다.ㅎㅎ


스윙에서 테이블을 만들때 이용하는 클래스가 바로 JTable이라는 클래스인데 JTable을 사용하면 테이블 각 요소 즉 칸에 자유롭게 글을 쓰고 수정할수 있다. 테이블에서는 각 단(칸)의 위치를 표현하기 위해 row랑 column을 보통 쓰는데 다른곳에서도 많이 쓰이니 별로 생소하지는 않으리라 본다. row는 옆으로 길게 늘어뜨린 열이나 줄같은 형태를 말하고 column은 세로로 정렬된 줄을 말하는데 보통 column에 각 요소에 대한 카테고리 제목을 쓰는게 일반적인 형태인데 위의 그림을 보면 감이 더 잘 잡힐 것이다. 여기 테이블에서 row나 column을 한국말로 표현한다면 row는 "가로단", column은 "세로단"이 되겠다. 그럼 테이블에 대한 명확한 개념을 여러분의 머리속에 집어넣기 위해 초심플 예제를 준비하였다. 아래를 보면서 계속하기로 하자.^^


뭔가 휑(?)하다.ㅎㅎ 가로단 2줄과 세로단 3줄로 만든 테이블이다. 모두다 이건 쉽게 이해하리라 생각하면서 예제 소스를 보기로 하겠다. 그 전에 노약자나 임산부는 소스 보는걸 자제하길 부탁드린다.(?) 너무 간단해서 기절할지도 모르니까 말이다.ㅎㅎ


예제에서 보면 JTable 쓰려고 import 한것이고 메인에서 보면 딱 한줄로 끝내버렸다. 새로 등장한게 table 인자밖에 없으니까 말이다. 코드처럼 괄호안에 (row,column) 갯수만 넣어주면 가로단 세로단 갯수데로 위와같이 테이블을 만들어준다. 그 뒤야 평소처럼 프레임에 테이블 장착시키면 끝이다. 그럼 다음에 또 보자.^^+

여기까지할까 하다가 하두 뒤가 따가워서 예제 하나를 더 준비하였다. 이번에는 직접 갯수를 넣어주는게 아니라 요소값을 넣어주면 그 갯수에 맞게 알아서 테이블을 자동으로 만들어주는 예제를 만들어보기로 하겠다. 배열이나 벡터로 이와같은 구현이 가능한데 우리는 친근한 배열로 이를 소화해볼 것이다. 필자가 테이블에 2차원 배열을 펼칠 것이니 경공(?)이 부족한 이들은 예전 스승의 가르침을 다시 전수받고 쫒아오기 바란다.ㅎㅎ


위의 그림은 인덱스가 이런식이라는걸 참고하라고 올린 것이니 다시한번 생각해보고 아래의 두번째 예제로 들어가보기로 하자.^^


이해하기 좋으라고 제목줄은 한글로 표기하였다. 각 위치에 따른 이해를 돕기위해 각 칸의 요소값은 인덱스로 표현한 것이니 그냥 보는데로 이해가 쉽게 가리라 본다. 본 예제는 2차원 배열의 값의 갯수에 따라 자동으로 테이블이 만들어지는데 어떻게 하면 이런것이 가능한지 예제를 보면서 살펴보기 바란다.


예전에 배운 2차원 배열이 기억이 난다면 거침이 없을 것이다. 그리고 이번 예제는 아까본 첫번째 예제와 다른 뚜렷한 특징이 있는데 JScrollPane을 썼다는 것이다. 뭐 그거야 스크롤바 기능 넣을려고 쓴거잖아라고 쉽게 넘길지 모르지만 테이블에서 이 기능을 첨가하면 의외의 보너스들이 생긴다. 일단 실행한 결과물을 마우스로 드래그앤드롭(잡아댕겼다가 놓는거..ㅎㅎ)으로 칼럼간의 이동이나 공간을 늘이거나 줄일수 있다. 뭐 당연하지만 안의 내용도 수정가능하고 말이다. 그런데 그것보다 더 중요한 점은 세로단 0 , 1, 2에서 보는 것처럼 맨위에다가 타이틀바를 만들수 있다는 것이다. 그냥 프레임에다가 넣는거랑 이런 부분에서 차이가 난다. 스크롤패인 빼고 프레임에다가 테이블 바로 넣고 해보면 뭐가 다른지 알게 될테니 직접 해보기 바란다. 참고로 스크롤패인 안쓰고 BorderLayout을 통해서 container에 집어넣으면 타이틀바를 만드는 것이 가능은 하다. 허나 굳이 편한길 놔두고 돌아갈 필요는 없어보인다. 스크롤바는 있으면 편하니까 말이다.

row는 2차원 배열로 column은 1차원 배열로 표현하였는데 테이블 자체가 2차원 배열로 거의다 구성가능하다. 우리가 3차원으로 테이블 만들일이 없으니까 말이다. 이렇게 예제에서처럼 배열 요소값을 넣고 테이블에 row,column값을 집어넣어주면 요소값의 갯수에 따라 테이블이 자동으로 만들어진다. 밑의 출력문은 참고하라고 필자가 친절(?)히 가로단과 세로단 갯수 몇개인지 프린트한 것인데 결과값 보면서 배열값 갯수 맞춰보기 바란다.^^

JScrollPane scroll = new JScrollPane(table);
frame.add(scroll);

다들 알고 있겠지만 스크롤바 인스턴스는 특별히 지금 다른데 써먹을데가 없으니 예제에서 쓴 frame.add(new JScrollPane(table));은 위의 두문장을 줄여서 바로 생성해서 집어넣은 것이다. 혹시 이 부분에서 멈칫(?)한 이들이 있다면 객체생성에 관한 예전 강의를 들춰보기 바란다.

스윙의 JTable을 이용하면 이렇듯 셀개념의 테이블을 손쉽게 만들수 있다. 한마디로 여러분이 자바를 이용해서 하나의 엑셀 프로그램을 만드는 것이나 별반 다를바 없다. 지금 스윙의 각 파트별로 하나씩 건드려 보고 있는데 따로보면 단순하겠지만 여러분이 각 파트를 이것저것 조합해서 모아보면 다기능이 첨가된 프로그램을 만들수도 있을 것이다. 아까 맨 위에서 본 그림처럼 체크박스나 캄보박스도 넣고해서 말이다. 여러분의 창의력과 상상력을 이용해서 작동이 되던 안되던 여러가지 아는 지식범위 내에서 떠오르는 것들을 시도해보라. 거기서 얻는 지혜는 필자가 가르치는게 불가능(?)할것이니까 말이다.^^

댓글 2개:

  1. 잘 보고 갑니다. 감사합니다.

    답글삭제
  2. 책 한권 내보시는게...설명이 정말 쉽게 잘되있네요^^

    답글삭제