Egloos 728x90

구글 애널리틱스


2009/01/05 13:13

[ Java ][ AWT ] CardLayout ▷ Java 복습



  CardLayout은 상당히 재미있는 녀석입니다. 애초에 여러 개의 레이아웃을 여러 장의 카드라는 식으로 나눠서 담아놓고, 각각의 카드를 전환해가며 보여줄 수 있도록 되어있습니다.

  메뉴나 키타 여러가지에 활용이 많을 것 같습니다.(예제 소스에서는 간편함을 위해 콘솔창에서 엔터키 입력으로 바뀌에 되어 있지만, 마우스 이벤트 처리를 하면 훨신 보기 좋고 쓰기도 좋겠죠.)


/* CardLayout 예제
JavaStudy(http://www.javastudy.co.kr)
→자바 프로그래밍 강좌→Java Programming / 박용우
→제8장 AWT(http://www.javastudy.co.kr/docs/yopark/chap08/chap08.html)
→→ 4. 컨테이너와 레이아웃 관리자(Layout Manager)
→→→ 마. 카드 레이아웃 관리자(CardLayout)
*/

import java.io.*;
import java.awt.*;


class CardLayoutTest extends Frame {

CardLayout cl = null;


public CardLayoutTest() {

cl = new CardLayout();
setLayout(cl); //카드 레이아웃을 사용하도록 설정


Panel p1 = new Panel();

p1.setLayout(new BorderLayout());
p1.add("North", new Label("Card 1. BorderLayout - North", Label.CENTER));
p1.add("East", new Button("East"));
p1.add("West", new Button("West"));
p1.add("Center", new Button("Center"));
p1.add("South", new Button("South"));


Panel p2 = new Panel();

p2.add(new Label("Card 2. DefaultLayout", Label.CENTER));
p2.add(new Button("Button 1"));
p2.add(new Button("Button 2"));
p2.add(new Button("Button 3"));


Panel p3 = new Panel();

p3.setLayout(new GridLayout(2, 2));
p3.add(new Label("Card 3. GridLayout", Label.CENTER));
p3.add(new Button("Button p3-1"));
p3.add(new Button("Button p3-2"));
p3.add(new Button("Button p3-3"));


add(p1, "BorderLayout");
//add(p1, "BorderLayout2");
add(p2, "DefaultLayout");
//add(p2, "DefaultLayout2");
add(p3, "GridLayout");
//add(p3, "GridLayout2");
add(new Button("Card 4. Button"), "Button");
//add(new Button("Button"), "Button2");


Choice colorChooser = new Choice();
colorChooser.add("Card 5. Choice");
colorChooser.add("Red");
colorChooser.add("Blue");
add(colorChooser, "Colors");
//add(colorChooser, "Colors2");

}



public static void main(String args[]) {

CardLayoutTest frm = new CardLayoutTest();

int ch;

frm.pack();
frm.setTitle("CardLayout");
frm.setVisible(true);


try {

while((ch=System.in.read()) != -1) { //콘솔 창을 통해 키 입력을 받는다.

if(frm.cl != null) {

frm.cl.next(frm); //키 입력(엔터)이 있으면 다음 카드를 보여준다.
//void next(Container parent): 주어진 컨테이너에 포함된 다음 카드를 보여줍니다.
//void first(Container parent): 주어진 컨테이너에 포함된 첫 번째 카드를 보여줍니다.
//void last(Container parent): 주어진 컨테이너에 포함된 마지막 번째 카드를 보여줍니다.
//void previous(Container parent): 주어진 컨테이너에 포함된 이전 카드를 보여줍니다.
//void show(Container parent, String name): 주어진 컨테이너에 포함된 컴포넌트 중 주어진 이름을 가진 컴포넌트로 전환합니다(보여줍니다).

}

}

} catch(IOException e) {
System.out.println(e);
}

}

}


  현재 예제에서는 엔터 키를 누르면 카드가 다음으로 넘어가게 되어 있는데, 문제는 MS플랫폼에서는 엔터키가 '\n'과 '\r' 두 문자로 구성되어 있어 카드가 두 장씩 넘어간다는 것. 마우스를 쓰거나 다른 방식으로 키를 입력받게 하면 해결될 문제이긴 합니다만 예제에서는 간결하게 하다보니...

  이 소스 역시 JAVA STUDY 박용우님의 강좌에 나와있던 것을, 개인적으로 보기 편하게 약간 수정하고 주석을 달았습니다.

덧글

댓글 입력 영역

애드센스336x280

알라딘TTB-Egloos(하단-일반)



이 이글루를 링크한 사람 (블랙)

36