- [Java 기본]Menu, Frame 정렬, FileDialog, Dialog, Event

Posted by 겨울에
2011. 5. 14. 16:09 scrap/ Java/JSP
출처 : http://cafe.naver.com/litave/379



//===========================================================================//
  본 내용은 2002년 제가 Java 강의를 수강하며 정리 했던 내용을
    기본으로 하여 정리하였습니다.
  - 마침 java 기초를 전파할 기회가 생겨 핑계김에 정리해 가려 합니다.
  작성자 : litwave
//---------------------------------------------------------------------------//

<목차>
1. ScrollPane
2. Menu
3. Frame 배치
4. FileDialog
5. Dialog
6. Event

//---------------------------------------------------------------------------//
일반적으로 java를 배우는 순서
설치->자료형->연산자->기본I/O->제어문->Java Method->Java 배열->기본클래스->String
-static->Info class->무한 Data->Package->예외처리->상속성->다형성->abstract->Inner클래스
-> Awt->Event->Graphics->applet->Thread->I/O->Swing->network->JDBC

1. ScrollPane 사용 방법
    Panel p = new Panel(new BorderLayout());

    this.add("North"~);
    this.add("Center"~);
    this.add("South",~);        //this -> sp로 바꿈

    ScrollPane sp = new ScrollPane();
    sp.add(p);
    this.add("Center", sp);

2. Menu관련 된 것
  2.1 사용 방법
    MenuBar mb  = new MenuBar();        //메뉴바 객체를 만든다.(회색메뉴공간)
    Menu file   = new Menu("파일");     //메뉴를 생성 시킨다.
    Menu option = new Menu("옵션");
    Menu help   = new Menu("도움말");                
    //메뉴바에 올라갈 수 있는 메뉴는 메뉴들만 올라갈 수 있다.
    //이러한 메뉴를 메뉴바에 올린다.
    MenuItem fnew = new MenuItem("New");
    MenuItem fexit = new MenuItem("Exit");

    file.add(fnew);         //파일 메뉴 항목 메뉴에 넣기
    file.addSeparator();    //분할 선 삽입
    file.add(fexit);        //종료 메뉴에 넣기

    mb.add(file);           //메뉴바에 파일 메뉴 넣기
    mb.add(option);
    mb.add(help);
    this.setMenuBar(mb);              //메뉴바를 현재의 프레임에 추가 시킨다.

    //메뉴 하단부에 올수 있는 것은 메뉴, 메뉴아이템, 체크박스 메뉴아이템
    Menu : 하위 메뉴를 가지는 것
    MenuItem : 단독적으로 객체로 작용 되는 것
    CheckboxMenuItem : 채크가 가능한 MenuItem


3. 화면에 뜨는 화면을 프레임 정중앙에 뛰우는 방법
  -Toolkit 을 사용하면 화면, 프린터, 경고음  등의 정보를 나타낼 수 있다.
  -> 화면의 정중앙은 x축과 y축이 만나는 점(정중앙)을 찾고 프레임 크기의 절반 만큼
     좌측과 상단으로 이동 시키면 된다.

    Toolkit tk = Toolkit.getDefaultToolkit();      //화면의 정중앙에 배치 시키기
    Dimension di = tk.getScreenSize();  // 폭과 높이를 얻어 온다.
    Dimension di1 = this.getSize();    //프레임의 높이를 얻어 온다
    int xx = (int)(di.getWidth() / 2 - di1.getWidth() / 2);    //화면의 전체폭 나누기 2
    int yy = (int)(di.getHeight() / 2 - di1.getHeight() / 2);
    this.setLocation(xx, yy);

4. FileDialog  //어딘가에 종속되어 나타나야 한다.
  1) 생성자 :  
    // (다이얼로그가 포함될 프레임-특정 컴포넌트, "Title", FileDialog.SAVE-FileDialg.LOAD)
    FileDialog fd = new FileDialog(this"내꺼열기"FileDialog.SAVE);         


5. Dialog //객체에 의한 방법을 많이 쓴다.
  -> 누군가에게 종속되어서 만들어져야 한다는 것만 제외하고는 Frame과 거의 똑같다.
  -> 배경색이 회색으로 되어 있고, X 버튼만 있다.(창 최소, 최대는 없음)
  -> Frame의 객체 만드는 것과 동일하게 하면 된다.

  1) 생성자 :  
        Dialog dlg = new Dialog(this"title"true/false); 
        // Modal 상태지정(true: Dialog가 죽어야 다음 실행을 한다. false: Dalog상태와 상관 없이 실행 된다.)
        dlg.setLayout(new BorderLayout());
        dlg.set.add("North"new Label("Test"));
        .
        .
        .
        dlg.setSize(200150);
        dlg.setLocation(--------);
        dlg.setVisible(true);          // 이것은 항상 마지막 라인에 적어 주어야 한다.

6. Event
    - 상당히 중요한 부분임
    - 이벤트 중심의 프로그램 : 내가 어떠한 행동을 했을 때 그 결과가 바로 나타나는 프로그램
                               내가 어떠한 행동을 했을 때 그 응답이 즉시 나타나는 프로그램
    - 우리는 7가지 이벤트만 배울 것이다. 나머지는 이것을 토대로 공부를 해야함.

  6.1  Event type           -> 자주 이용하는 Component
    1Window               -FrameDialog
    2Action               -ButtonListTextFieldMenuItem
    3) Mouse - Mouse        -> Botton, 대부분의 ComponentFrameDialog
             - MouseMotion  -FrameDialog
    4) Focus                -TextField, 대부분의 component, FrameDialog
    5) Item                 -ListCheckboxChoiceCheckboxMenuItem
    6Key                  -TextFieldTextArea

  6.2 Event 추가 / 삭제
    1) 추가 : 대상객체, add(Event type)Listener(실행객체);
    2) 삭제 : 대상객체, remove(Event type)Listener(실행객체);

  6.3 실행 객체 정의 법
    1) Adapter 상속     -> Ex0120_04.java 참조
    2) Listener 구현    -> Interface 상속이므로, 모든 abstract method를 모두 재정의 해주어야 한다.
                        -> 그러나 다중 상속이 가능하므로, 여러가지 이벤트를 정의해서 사용 할 수 있다.
                        -> 클래스의 수를 줄일 수 있다.
    3Frame 클래스에 Listener 구현
    4) 익명 Inner 클래스 사용.

  6.4 Awt 실행객체 종류
    1Method 가 1개 존재하면 Listener만 존재
    2) 나머지는 Listener와 Adapter type 존재

  6.5 접근자 및 결과형 리턴값 : public void

  6.6 매개변수 : type Event
    -> 예외) Mouse          -->  MouseEvent
             MouseMotion    -->  MouseEvent

7. Event 정리
  7.1 실재로 이벤트는 무수히 많다.
    - java.awt.event.*;        // * 는 폴더는 불러 오지 못하므로 따로 import시켜야 한다.
    - java.awt.event.*; 여기에 무수한 이벤트를 포함하고 있다.

  7.2 어떤 컴포넌트에 어떤 이벤트를 사용할 수 있는지 알아보는 방법.
      - Window 이벤트를 가지고 할수 있는 일  7가지
      - java doc -> java.awt.event -interface -Window Listener -Method Summary 에 나와 있음.
    1) Closing  -x 버튼을 눌렀을 때 이벤트 처리 할수 있다.
    2) Open 할때
    3) Close
    4) Iconified     -> 아이콘화 시킬 때
    5) Deiconified
    6) Activated     -> 창을 활성화 시킬 때
    7) Deactivated   -> 창을 비활성화 시킬 때

      - 다른 이벤트들도 위와 같이 찾아서 사용할 수 잇다.
      - 여기서 다루는 메소드는 알아 두는 것이 좋다.
        접근자 및 결과형 리턴값은 public void 이고, 매개변수 typeEvent : 해당 타입의 이름이 소문자로 적혀 있다.

  7.2 Event를 처리하는 클래스는 두가지 종류가 있다.
    - Listener와 Adapter 는 거의 똑같다.
    - 차이점이 있다면   Adapter : 클래스(단일 상속) 이고,
    - Listener : Interface 이다.(다중 상속이 가능하다.)

//---------------------------------------------------------------------------//
// 수업중 소스
// Ex0120_01.java : FileDialog 예제
import java.awt.*;

class Ex0120_01_Sub extends Frame{
  private MenuBar mb = new MenuBar();
    private Menu file = new Menu("파일");
    private Menu option = new Menu("욥션");
    private MenuItem mnew = new MenuItem("New");
    private MenuItem mopen = new MenuItem("Open");
    private MenuItem msave = new MenuItem("Save");
    private MenuItem mexit = new MenuItem("Exit");
    private Menu msize = new Menu("크기");
    private Menu mcolor = new Menu("색상");
    private CheckboxMenuItem tw = new CheckboxMenuItem("12"true);
    private CheckboxMenuItem tf = new CheckboxMenuItem("24");
    private CheckboxMenuItem ts = new CheckboxMenuItem("34");
    private CheckboxMenuItem mred = new CheckboxMenuItem("Red");
    private CheckboxMenuItem mgreen = new CheckboxMenuItem("Green"true);
    private CheckboxMenuItem mblue = new CheckboxMenuItem("Blue");
    private FileDialog fd = new FileDialog(this"내꺼열기"FileDialog.SAVE);
    
    Ex0120_01_Sub(String str) {
      super(str);
      this.setMenuBar(mb);
      init();
      this.setSize(300,200);
        
      Toolkit tk = Toolkit.getDefaultToolkit();      //화면의 정중앙에 배치 시키기
      Dimension di = tk.getScreenSize();  // 폭과 높이를 얻어 온다.
      Dimension di1 = this.getSize();    //프레임의 높이를 얻어 온다
      int xx = (int)(di.getWidth() / 2 - di1.getWidth() / 2);    //화면의 전체폭 나누기 2
      int yy = (int)(di.getHeight() / 2 - di1.getHeight() / 2);
      this.setLocation(xx, yy);
        
        this.setVisible(true);
        fd.setVisible(true);
     
    }
    
    public void init() {
        mb.add(file);
        mb.add(option);
        file.add(mnew);
        file.addSeparator();
        file.add(mopen);
        file.add(msave);
        file.addSeparator();
        file.add(mexit);
        
        option.add(msize);
        option.addSeparator();
        option.add(mcolor);
        msize.add(tw);
        msize.add(tf);
        msize.add(ts);
        mcolor.add(mred);
        mcolor.add(mgreen);
        mcolor.add(mblue);      
    }
}

public class Ex0120_01 {
    public static void main(String [] ar) {
      Ex0120_01_Sub e1s = new Ex0120_01_Sub("메뉴바");
    }
}

//---------------------------------------------------------------------------//
// Ex0120_02.java : Dialog 예제
import java.awt.*;
class Ex0120_02_Sub extends Frame {
    private Dialog dlg = new Dialog(this"경고"false);
    private Label dlglb = new Label("경고가 발생했습니다."Label.CENTER);
    private Button dlgbt = new Button("확인");
    public Ex0120_02_Sub() {
        super("Test");
        this.init();
        this.setSize(300200);
        dlg.setVisible(true);
        Toolkit.getDefaultToolkit().beep();
        this.setVisible(true);
    }
    public void init() {
        this.initMenu();
        this.initDlg();
    }
    public void initMenu() {
        
    }
    public void initDlg() {
        dlg.setLayout(new BorderLayout());
        dlg.add("Center", dlglb);
        Panel p = new Panel(new FlowLayout());
        p.add(dlgbt);
        dlg.add("South", p);
        dlg.setSize(200120);
    }
}

public class Ex0120_02 {
    public static void main(String[] ar) {
        Ex0120_02_Sub es = new Ex0120_02_Sub();
    }
}

//---------------------------------------------------------------------------//
// Ex0120_03.java : Adapter를 이용한 Event 처리
import java.awt.*;
import java.awt.event.*;

class Ex0120_03_Sub extends Frame{
    Button bt = new Button("확인");
    Ex0120_03_Sub(String str) {
        super();
        setLayout(new FlowLayout(FlowLayout.CENTER));
        setSize(200,150);
        init();
        start();
        setVisible(true);
    }
    public void init() {
        this.add(bt);
    }
    public void start() {
        A ap = new A();
        bt.addMouseListener(ap);
    }
}

public class Ex0120_03 {
    public static void main(String [] ar) {
        Ex0120_03_Sub e3s = new Ex0120_03_Sub("Text");
    }
}

class A extends MouseAdapter {
    public void mousePressed(MouseEvent e) {
      System.exit(0);
    }
}

//---------------------------------------------------------------------------//
// Ex0120_03.java : WindowAdapter를 이용한 Event 처리
import java.awt.*;
import java.awt.event.*;
class Ex0120_03_Sub extends Frame {
    public Ex0120_03_Sub() {
        super("Test");
        this.init();
        this.start();
        this.setSize(300200);
        this.setVisible(true);
    }
    public void init() {
        
    }
    public void start() {
        A ap = new A();
        this.addWindowListener( ap );
    }
}
public class Ex0120_03 {
    public static void main(String[] ar) {
        Ex0120_03_Sub es = new Ex0120_03_Sub();
    }
}

class A extends WindowAdapter {
    public void windowOpened(WindowEvent e) {
        System.out.println("Window 열림!!");
    }
    public void windowIconified(WindowEvent e) {
        System.out.println("Window 아이콘화!!");
    }
}

//---------------------------------------------------------------------------//
// Ex0120_04.java : WindowAdapter를 이용한 Event 처리
import java.awt.*;
import java.awt.event.*;
class Ex0120_04_Sub extends Frame{
    private Button bt = new Button("확인");
    public Ex0120_04_Sub(){
        super("Test");
        this.init();
        this.start();
        this.setSize(300200);
        this.setVisible(true);
    }
    public void init(){
        this.setLayout(new FlowLayout());
        this.add(bt);
    }
    public void start(){
        A ap = new A();
        bt.addMouseListener( ap );
        this.addWindowListener( ap);
    }
}
public class Ex0120_04 {
    public static void main(String[] ar){
        Ex0120_04_Sub es = new Ex0120_04_Sub();
    }
}

class A implements MouseListenerWindowListener{
    public void mouseEntered(MouseEvent e){
        System.exit(0);
    }
    public void mouseClicked(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
    public void mousePressed(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void windowClosing(WindowEvent e){
        System.exit(0);
    }
    public void windowOpened(WindowEvent e) { }
    public void windowIconified(WindowEvent e) { }
    public void windowDeiconified(WindowEvent e) { }
    public void windowDeactivated(WindowEvent e) { }
    public void windowClosed(WindowEvent e) { }
    public void windowActivated(WindowEvent e) { }
}

 

//---------------------------------------------------------------------------//

 

과제 1. 입력한 글을 System.out.println으로 출력하세요.
 



과제 2. 주민등록번호 6자리를 입력하면 자동으로 뒤의 TextField로 넘어가도록 프로그램하세요.





과제 3. 셀렉트 박스를 변경시 변경된 값을 System.out.println으로 출력하세요.





과제 4. 리스트 박스 선택 시 선택된 값을 화면에 출력하세요.





과제 5. 생년월일을 입력 후 확인 버튼을 클릭하면 해당 일자를 화면에 출력하세요.





과제 6. 확인 버튼과 취소버튼을 클릭시 해당 정보를 화면에 출력하세요.





과제 7. 마우스가 "나잡아봐라" 위로 이동시 해당 텍스트가 도망다니도록 프로그램하세요