2011년 7월 2일 토요일

스윙으로 버튼 만들기(JButton)

자바의 룩앤필(Look and Feel)과 연관되어 있는 스윙 컴포넌츠(Swing components) 중에서 오늘은 JButton 클래스에 대해서 공부해 보기로 하겠다. 말그대로 스윙을 이용해 버튼을 만들어 보자는 것이다. 루우켄피일~ 좀 굴려봤다. ㅎㅎ Java의 룩앤필은 여러분이 그냥 볼때랑 쓰려고 했을때 어떻게 그 컴포넌트들이 느끼고 관련 액션에 반응하는지에 대해 그래픽으로 표현하는 것이라고 알고 있으면 된다.


이와 관련된 요소들로는 오늘 배울 버튼이나 아니면 메뉴 같은것에 적용이 될것이다. 버튼을 누르기 전이랑 누르고 난후에 Graphical User Interface가 달라지게 만들어야 그럴듯하지 않겠는가? 버튼을 눌렀을때 들어가게 보이고 다시 놓았을때 원상태로 돌아오니까 이를 다르게 보이게 한다면 보다 멋진 프로그램이 가능할 것이다. 그래픽상으로는 테두리에 음영처리를 통하거나 밝고 어둡게 조절 즉 칼라를 이용해 시각에 차이를 느끼도록 만들어 주는데 프로그램에 관계된 리스너(Listener)와 이벤트(Event) 처리 구문을 통해 자바에서는 이를 알아서 자동으로 만들어주므로 우리가 특별히 그래픽 액션(?)에 대해서 신경쓸 필요가 없다. 이런 편리한 자바의 기능으로 인해 많은 프로그래머들이 항상 해오던 중노동(?)을 대폭 덜어주고 있다는 이야기가 자바섬에서 전설처럼 전해내려오고 있다.^^

이제 서론은 이 정도로 하고 본격적으로 오늘 강의에 들어가겠다. 많은 이들이 자바의 리스너와 이벤트 기능에 대한 얘기가 나오면 슬슬 불안해하기 시작한다. listener, event, adapter 뭐 하여간 이런거 나오면 코드도 복잡해 보이고 무슨 말하는지도 모르겠고 그럴 것이다. 자바를 공부해본 이들은 지금 필자가 뭐때문에 그러는지 알텐데 바로 이해가 안되는게 이런 부분때문에 더할 것인데 괄호가 ({, }}); 명령문이 생전 보도듣도못한 이런식으로 끝나니 이게 뭐니? ㅎㅎ 자바 오래배운 이들도 잘 모르고 물어봐도 속이 답답하고 특히나 자기가 관심가지는 애플리케이션이나 게임소스들을 보면 도통 이런거 때문에 이해가 안되니 난 여기 체질이 아닌가봐 이건 내 적성이랑 안맞는가봐라면서 또다른 길(?)을 개척하는 선구자로 돌변하는 이가 많다.

강이의 자바강좌를 통해서 자바를 처음 접한 이들은 그냥 따라오면 되겠지만 위의 스토리에 여러분이 해당한다면 오늘 강의를 집중해서 들어보기 바란다. 여러분은 강의가 끝날때쯤이면 폭풍감동(?)과 함께 가슴속에서 뜨겁게 타오르는 뭔가(?)를 느낄수 있을 것이다.^^ 내용은 버튼에 관련된 간단한 예제지만 위에서 언급한 것처럼 여러개의 괄호(?)만 나와도 항상 멈칫하였다면 본 강좌를 주목하기 바란다.

여러분들은 오늘부터 두 어깨를 당당히 펼수 있도록 골머리 아팠던 괄호의 비밀을 푸는 열쇠와 함께하는 기적(?)같은 강의로 여러분의 짐을 조금이나마 필자가 덜어줄 것이다.^^ 여러분이 포기할까봐 강좌에 앞서 미끼(?) 열심히 던지는 중이니 그러려니 해라.ㅎㅎ


클릭하시면 이벤트 작동됩니다
클릭하시면 이벤트 작동됩니다
클릭하시면 이벤트 작동됩니다
http://alecture.blogspot.com
클릭하시면 이벤트 작동됩니다
클릭하시면 이벤트 작동됩니다
클릭하시면 이벤트 작동됩니다

위에껀 그냥 그림이니 괜히 마우스 갖다대고 누르지 말아라.ㅎㅎ 아래 보여줄 예제 소스에 대한 결과물을 위에 올려 놓은 것이니 직접 실행해서 살펴보기 바란다.


저번 시간 여러분이 강의를 자알 들었다면 리스너와 이벤트 관련 부분을 빼면 특별히 이해하기 힘든 부분은 없을 것이다. 여러분의 이해를 돕기 위해 예제를 간략히 설명하자면 프로그램에서 쓰일 클래스들을 import 하였고 프레임 만들고 버튼 만들어서 버튼에 마우스 갖다놓았을때와 그렇지 않았을때 반응하는 명령문들과 버튼을 클릭하였을때 반응하는 명령문들을 써놓은 것이다. 필자가 손수 제작하면서 여러분의 이해를 돕기 위해 버튼에 관련된 기본 지식을 가장 쉽게 습득할수 있도록 만들었다. 직접 예제를 실행해보면서 어떤 식으로 동작하는지 살펴보기 바란다.

예제는 마우스를 갖다대면 테두리에 음영이 지면서 다르게 표현하며 반응하는 것을 알리기 위해 "클릭하시면 이벤트 작동됩니다"라는 문구를 출력하고 마우스를 멀리해도 마찬가지로 아까와 같은 문구가 출력된다. 마우스를 클릭하면 "http://alecture.blogspot.com"이 찍히고 마우스를 클릭하고 눌렀을때와 놓았을때 그리고 멀리할때는 아까와 마찬가지로 반응하는 것을 알리기 위해 "클릭하시면 이벤트 작동됩니다"라는 문구가 역시 출력되는 것인데 필자가 무슨말을 하는지는 프로그램을 실행해서 이리저리 작동해보면 저절로 알게 될 것이다.

예제소스를 보면 역시 필자가 예상한대로 리스너와 이벤트에 관련된 부분이 이해가 잘 안갈것인데 사실 이것도 필자가 보기 좋으라고 정리를 해놔서 그렇지 일반적으로는 아래와 같이 한줄로 쓰는 것이 빈번하다. 내부클래스 공부할때 배운건데 기억이 나는이가 있을런지 모르겠다.^^

button.addChangeListener(new ChangeListener(){public void stateChanged(ChangeEvent e){System.out.println("ChangeEvent!");}});

button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.out.println"http://alecture.blogspot.com");}});

위와 같이 쓰는 것은 자바에서 축약형으로 쓰인 것인데 대부분이 여기서 포기하기도 하지만 그렇지 않고 강인한 정신력(?)으로 무장한 이들은 꿋꿋히 그냥 외우고 넘어간다. 그냥 외워서 나중에 응용하면서 이런 표현을 자유자재로 쓸수 있을까? 강이의 자바강좌를 애독하는 이들은 모르면 외우는 그런 게으른 태도(?)를 오늘부터 없애기 바란다.ㅎㅎ

필자가 위의 예제에서 이해가 안되는 부분을 그냥 눈으로 즐기면서 궁금증을 풀어주도록 하겠다. 세계 최초(?)로 자바 괄호들의 비밀 아닌 비밀을 풀어줄 것이니 아래의 예제를 보면서 위의 예제와 비교분석하기 바란다. 프로그램의 결과는 위의 예제와 똑같이 작동한다.^^


아마 여러분의 눈이 시원할 것이다. ChangeListener와 ActionListener가 인터페이스이므로 이를 클래스에서 따로따로 구현한 것인데 이렇게 쓰려면 예제처럼 따로 클래스 만들고 객체생성자 만들어서 이를 불러들여 리스너에 넣어야되니 코드상으로 일단 길어지고 한줄로 끝낼꺼 보다시피 내용이 길어진다. 그래서 이런 방법보다는 편하니까 아까 말한 축약형으로 휙휙 갈기는 것이다. 물론 여러분이 생성자를 이용해 여러군데 쓸데가 많다면 방금처럼 따로 구현하는 것이 좋을 것이나 어차피 예제에서는 관련된 기능 이외에는 써먹을데가 없으니 이런 경우엔 그냥 바로 처리하는 것이 훨씬 효율적이다.

막상 알고나니까 별거 없징? ㅎㅎ 원래 굉장히 어렵게 느끼는게 실상 알고보면 별거없다. 버튼을 공부하다가 갑자기 괄호를 건드려서 의아해 생각할지도 모르나 오늘 이 강의가 여러분의 어떤 이에게는 귀중한 시간(?)이 되었을 것이라 믿고 묻지도 말고 따지지도 말기 바란다.ㅎㅎ

JButton button = new JButton("눌러주세요");
frame.getContentPane().add(button);

오늘 공부한 내용은 리스너와 이벤트 관련 구문을 빼면 위의 두줄로 요약가능하다. 버튼을 만들기 위해서 JButton 클래스를 이용해 객체생성하고 이를 컨텐트패인에다가 add( ) 메소드를 이용해 넣어주면 끝난다.^^ 그리고 오늘 배운 리스너와 이벤트 기능은 처음 사용해보는 시간이기도 하고 앞으로도 자바 스윙을 공부할때 지겹도록 등장할 것이므로 여러분의 기초를 튼튼히 하기위해 곁다리에 더 공(?)을 들인만큼 오늘 배운것은 꼭 자기 것으로 만들기 바란다.^^

댓글 2개:

  1. 기본클래스를 찾거나 로드할 수 없다고 나오는데
    왜그런거죠?

    답글삭제
  2. 역시 명강의이십니다-.-b

    위에 댓글 다신 분..오타 나셨을거에요ㅋ

    답글삭제