- [Java 기본]Menu, Frame 정렬, FileDialog, Dialog, Event
//===========================================================================//
본 내용은 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(200, 150);
dlg.setLocation(--------);
dlg.setVisible(true); // 이것은 항상 마지막 라인에 적어 주어야 한다.
6. Event
- 상당히 중요한 부분임
- 이벤트 중심의 프로그램 : 내가 어떠한 행동을 했을 때 그 결과가 바로 나타나는 프로그램
내가 어떠한 행동을 했을 때 그 응답이 즉시 나타나는 프로그램
- 우리는 7가지 이벤트만 배울 것이다. 나머지는 이것을 토대로 공부를 해야함.
6.1 Event type -> 자주 이용하는 Component
1) Window -> Frame, Dialog
2) Action -> Button, List, TextField, MenuItem
3) Mouse - Mouse -> Botton, 대부분의 Component, Frame, Dialog
- MouseMotion -> Frame, Dialog
4) Focus -> TextField, 대부분의 component, Frame, Dialog
5) Item -> List, Checkbox, Choice, CheckboxMenuItem
6) Key -> TextField, TextArea
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를 모두 재정의 해주어야 한다.
-> 그러나 다중 상속이 가능하므로, 여러가지 이벤트를 정의해서 사용 할 수 있다.
-> 클래스의 수를 줄일 수 있다.
3) Frame 클래스에 Listener 구현
4) 익명 Inner 클래스 사용.
6.4 Awt 실행객체 종류
1) Method 가 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(300, 200);
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(200, 120);
}
}
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(300, 200);
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(300, 200);
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 MouseListener, WindowListener{
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. 마우스가 "나잡아봐라" 위로 이동시 해당 텍스트가 도망다니도록 프로그램하세요
'scrap > Java/JSP' 카테고리의 다른 글
- [Java 기본] Graphics (0) | 2011.05.14 |
---|---|
- [Java 기본]AWT, Listener, Event (0) | 2011.05.14 |
- [Java 기본] AWT - Panel, Label, Button, Checkbox, Choice, List, TextField, TextArea (0) | 2011.05.14 |
- [Java 기본]AWT, FlowLayout, GridLayout, BorderLayout (0) | 2011.05.14 |
- [Java 기본]프로세스와 쓰레드 (0) | 2011.05.14 |