자바(Java)의 기초 박살내기 - Java GUI①



안녕하세요. 이번 시간에는 자바 GUI에 대해 공부하겠습니다.


 1. 자바 GUI 


- java.awt패키지의 클래스 이용

- 만들기가 쉬움.

- 느리고 무거움.


- javax.swing 패키지의 클래스 이용

- 만들기가 힘듬

- 빠르고 가벼움.


- MVC 패턴 : Model-View-Controller

- Model : 데이터를 가져와 어떤 작업을 처리하거나 처리한 작업을 저장

- View : 데이터를 보여주는 역할

- Controller : 뷰와 모델 사이의 흐름제어


- 컴포넌트 : 화면을 구성하는 부품

- 컨테이너에 포함되어야 비로소 화면에 출력될 수 있는 GUI 객체

- 모든 GUI 컴포넌트의 최상위 클래스 : java.awt.Component

- 스윙 컴포넌트의 최상위 클래스 : javax.swing.Jcomponent


- 컨테이너는 컴포넌트로 부터 상속 받은 하나의 윈도우 영역을 의미

- 다른 컴포넌트를 포함할 수 있는 GUI 컴포넌트

- java.awt.Container를 상속받음

- 다른 컨테이너에 포함될 수 있음

- AWT 컨테이너 : Panel, Frame, Applet, Dialog, Window

- Swing 컨테이너 : 다른 컨테이너에 속하지 않고 독립적으로 존재 가능한 컨테이너

- 최상위 컨테이너 : 다른 컨테이너에 속하지 않고 독립적으로 존재 가능

- 스스로 화면에 자신을 출력하는 컨테이너 : JFrame, JDialog, JApplet

- 모든 컴포넌트는 컨테이너에 포함되어야 비로소 화면에 출력 가능     



- 자주 사용하는 AWT 패키지

- java.awt

- java.awt.event


- 자주 사용하는 swing 패키지

- javax.swing

- javax.colorchooser

- javax.swing.event



 2. AWT 


- Frame(프레임)

- 응용프로그램에 윈도우를 생성하기 위해 사용.

- 기본적으로 타이틀, 최소버튼, 최대버튼, 종료버튼 지원.

- 상위클래스인 Window는 타이틀, 메뉴가 지원되지 않음.

-  기본으로 화면에 안보이게 설정했기 때문에 반드시 setVisible(true)값으로 설정해야 화면상에 보여짐

- 만드는 방법은 Frame을 상속받아도 되고, main 메소드에서 직접 작성 가능.


<생성자>

 Frame()

 타이틀이 빈 상태로 생성 

 Frame(String str)

 str을 타이틀을 지정하여 프레임을 생성 


<주요 메소드>

 static Frame[] getFrames()

 애플리케이션에서 생선한 모든 프레임을 리턴 

 MenuBar getMenuBar()

 프레임의 메뉴바를 리턴

 int getState()

 프레임의 상태를 리턴 

 String getTitle()

 타이틀 바의 문자열을 리턴 

 void remove(MenuComponent m)

 프레임에서 지정한 메뉴를 제거 

 void setMenuBar(MenuBar mb)

 프레임의 메뉴바를 지정 

 void setResizable(Boolean resizable)

 프레임의 크기를 사용자가 변경할 수 있게 지정

 void setSize(int width, int height)

 이 컴퍼넌트의 사이즈를 width 및 height로 변경 

 void setVisible(boolean b)

 파라미터 b값에 응해, 이 컴퍼넌트를 표시하는지 비표시로하는지 합니다.

 void setLocation(int x, int y)

 이 컴퍼넌트를 새로운 위치로 이동 

 void setBounds(intx, inty, int width, int height)

 위치와 크기를 설정


<main메소드에 직접 작성 예제 소스코드 - FrameTest1.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.awt.Frame;
 
public class FrameTest1 
{
    // 메인 
    public static void main(String args[])
    {
        Frame f= new Frame();
        f.setTitle("첫 번째 프레임 입니다.");
        f.setBounds(100100300300);
        f.setVisible(true);
    }
}
 
cs


<결과>


<Frame 상속 예제 소스코드1 - FrameTest.class>

1
2
3
4
5
6
7
8
9
10
11
12
import java.awt.Frame;
 
// Frame 상속해서 
public class FrameTest extends Frame
{
    public FrameTest()
    {
        super("두 번째 프레임입니다.");
        setBounds(100100300300);
        setVisible(true);
    }
}
cs

<Frame 상속 예제 소스코드2 - Main.class>
1
2
3
4
5
6
7
8
public class Main 
{
    public static void main(String args[])
    {
        FrameTest Obj = new FrameTest();
    }
}
 
cs


<결과>


- Panel
- 컴포넌트들을 그룹 별로 묶어서 처리할 때 주로 사용
- 일반적으로 Frame 컴포넌트들을 직접 붙이지 않고 Panel에 그룹별로 붙이고 Panel을 Frame에 다시 붙임

<생성자>

 Panel()

 디폴트의 레이아웃 매니저를 사용해 새로운 Panel 생성 

 Panel(LayoutManager layout)

 지정된 레이아웃 매니저를 이용하여 새로운 Panel  


<Panel 예제 소스코드1 - PanelTest.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;
 
public class PanelTest extends Frame
{
    public PanelTest(String str)
    {
        super(str);
        Panel panel1 = new Panel();
        // 색을 빨강으로 지정
        panel1.setBackground(Color.RED);
        // 추가
        add(panel1);
        // 크기
        setSize(300,300);
        setVisible(true);
    }
}
cs


<Panel 예제 소스코드2 - Main.class>

1
2
3
4
5
6
7
public class Main 
{
    public static void main(String args[])
    {
        new PanelTest("패널 테스트");
    }
}
cs

<결과>


- Dialog
- 메인 윈도우 외에 메시지를 출력하거나 사용자로부터 자료를 입력 받을 때 사용하는 컨테이너

<주요 생성자>

 Dialog(Dialog owner)

 소유하는 Frame이 owner인 Dialog 생성 

 Dialog(Dialog owner, String title)

 title을 가진 Modeless Dialog 생성 

 Dialog(Dialog owner, String title, boolean modal)

 modal이 true이면 modal다이얼 로그 생성

 아니면 modeless 다이얼로그 생성 

 Dialog(Frame owner)

 owner 프레임이 소유하는 Modeless 다이얼로그 생성 


<Dialog 예제 소스코드1 - ModelessDialog.class>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.awt.Dialog;
import java.awt.Frame;
 
public class ModelessDialog extends Frame
{
    public ModelessDialog()
    {
        super("다이얼로그 테스트");
        // 객체 생성
        Dialog d= new Dialog(this"모덜리스 다이얼로그");
        // 위치와 크기 결정
        setBounds(00400400);
        // 창을 화면에 보이게함
        setVisible(true);
        // 크기 결정
        d.setSize(200,200);
        // 다이어로그를 화면에 보이게함
        d.setVisible(true);
    }
}
cs


<Dialog 예제 소스코드2 - Main.class>

1
2
3
4
5
6
7
8
9
public class Main 
{
    public static void main(String args[])
    {
        // ModelessDialog 생성자
        new ModelessDialog();
    }
}
 
cs


<결과>



 3. AWT 컨테이너 


<주요 메소드>

 Color getBackground()

 컴퍼넌트의 배경 색상을 리턴 

 Font getFont()

 컴퍼넌트의 폰트를 리턴 

 Color getForeground()

 컴퍼넌트의 전경색을 리턴 

 int getHeight()

 컴퍼넌트의 위치를 리턴 

 Point getLocation()

 컴퍼넌트의 위치를 리턴 

 Point getLocationOnScreen()

 화면의 좌표 공간 위치 리턴 

 String getName()

 컴퍼넌트의 이름을 리턴 

 Container getParent()

 컴퍼넌트의 부모를 리턴 

 Dimension getSize()

 컴퍼넌트의 사이즈를 오브젝트로 리턴 

 int getWidth()

 컴퍼넌트의 현재의 폭을 리턴 

 int getX()

 컴퍼넌트의 원점의 현재의 x좌표를 리턴 

 int getY()

 컴퍼넌트의 원점의 현재의 y좌표를 리턴 

 void setBackground(Color c)

 컴퍼넌트의 배경색을 설정합니다. 

 void setBounds(int x, int y, int width, int height)

 컴퍼넌트를 이동해, 사이즈 변경합니다. 

 void setEnabled(boolean b)

 b값에 의해, 이 컴퍼넌트를 사용가능 또는 사용 불가능하게 합니다. 

 void setFocusable(boolean focusable)

 컴퍼넌트의 포커스 상태가 지정된 값으로 설정합니다. 

 void setFont(Font f)

 폰트 설정

 void setForeground

 전경색 설정 

void setLocation(int x, int y)

 위치 설정 

void Location(Point p)

 위치 설정 

void setMaximumSize(Dimension maximumSize)

 최대 사이즈 설정 

 void setMinimumSize(Dimension minimumSize) 

 최소 사이즈 설정 

void setName(String name)

 이름 설정 

 void setSize(Dimension d)

 사이즈 설정 

 void setVisible(boolean b)

 표시 여부 설정 


- Button


<생성자>

 Button()

 버튼 기초 생성자

 Button()

 버튼 이름정하는 생성자 



<Button 예제 소스코드1 - Button1.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
 
// class를 Button으로 만들게되면 Button 객체와 겹치게되므로
// Button1로 만들어주는게 편하다.
public class Button1 extends Frame
{
    // 버튼 변수 선언
    Button btn1, btn2, btn3;
    
    // 버튼 생성자
    public Button1(String str) 
    {
        super(str);
        // 버튼을 생성하기위해 패널 생성
        Panel p = new Panel();
        // 가위 버튼 생성
        btn1 = new Button(" 가위 ");
        // 바위 버튼 생성
        btn2 = new Button(" 바위 ");
        // 보 버튼 생성
        btn3 = new Button("  보  ");
        // 패널에 3가지 버튼 생성
        p.add(btn1); p.add(btn2); p.add(btn3);
        add(p);
        // 보 버튼은 사용 안함
        btn3.setEnabled(false);
        // 윈도우창 크기는 200 x 200
        setSize(200200);
        // 윈도우창 
        setVisible(true);
    }
}
 
cs


<Button 예제 소스코드2 - Main.class>

1
2
3
4
5
6
7
8
public class Main 
{
    public static void main(String args[])
    {
        // 버튼 생성자
        new Button1("버튼 만들기");
    }
}
cs


<결과>


- CheckBox


<생성자>

 CheckBox()

 레이블이 없는 체크 박스 생성 

 CheckBox(String lable)

 레이블을 설정한 체크 박스 생성 

 CheckBox(String label, Boolean state)

 지정된 레이블과 state를 넣어서 생성

 CheckBox(String label, boolean state, CheckboxGroup group)

 지정된 레이블이 붙은 체크 박스를 지정된 체크 박스 그룹에 구축해 지정된 상태로 생성

CheckboxGroup 

 객체를 생성해서 지정해주면 라디오 버튼이 됩니다.  


<체크박스 예제 소스코드1 - Checkbox1.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Frame;
import java.awt.Panel;
 
// 버튼과 마친가지로 겹치지 않도록 조심
public class Checkbox1 extends Frame
{
    // 레이블이 있는 생성자
    public Checkbox1(String str)
    {
        super(str);
        // 패널 생성
        Panel p = new Panel();
        // 치킨 체크 박스 체크 표시
        Checkbox cbx1=new Checkbox("치킨"true);
        // 피자 체크 박스 디폴트여도 true
        Checkbox cbx2=new Checkbox("피자");    
        // 피자 체크 박스 디폴트여도 true
        Checkbox cbx3=new Checkbox("햄버거");
        // 패널에 생성
        p.add(cbx1);
        p.add(cbx2);
        p.add(cbx3);
        
        // 체크 박스 그룹 생성
        CheckboxGroup group = new CheckboxGroup();
        // 치킨 체크 박스 체크 표시
        Checkbox cbx4=new Checkbox("치킨",group,true);
        // 피자 체크 박스 체크 표시X
        Checkbox cbx5=new Checkbox("피자",group,false);    
        // 햄버거 체크 박스 체크 표시X
        Checkbox cbx6=new Checkbox("햄버거",group,false);
        // 패널에 생성
        p.add(cbx4);
        p.add(cbx5);
        p.add(cbx6);
 
        add(p);
        // 윈도우 사이즈 180 x 300
        setSize(180300);
        // 윈도우 
        setVisible(true);
    }
 
}
cs


<체크박스 예제 소스코드2 - Main.class>

1
2
3
4
5
6
7
8
public class Main 
{
    public static void main(String args[])
    {
        // 체크박스 
        new Checkbox1("체크 박스 테스트");
    }
}
cs


<결과>


- Choice

- List와 유사한 기능을 가지는 여러 아이템 중 하나만 선택할 수 있도록 해주는 컴포넌트


- 생성자

- Choice(): 생성자


<주요 메소드>

 void add(String item)

 항목을 추가 

 String getItem(int index)

 선택 항목 리턴 

 int getItemCount()

 항목 수를 리턴 

 int getSelectedIndex()

 현재 선택된 항목의 인데스를 리턴 

 String getSelectedItem()

 현재 선택된 항목의 문자열을 리턴 

 void insert(String item, int index)

 항목을 지정된 위치에 삽입 

 void remove(int position)

 지정된 위치의 항목을 삭제 

 void remove(String item)

 item 처음 표시되는 항목을 삭제 

 void removeAll()

 모든 항목 삭제

 void select(int pos)

 위치를 설정 

 void select(String str)

 지정된 항목으로 설정 


<콤보 박스 예제 소스코드1 - Choice1.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.awt.Choice;
import java.awt.Frame;
 
public class Choice1 extends Frame 
{
    // 콤보 박스 변수 생성
    Choice ch;
    
    // 레이블이 있는 콤보 박스 생성자
    public Choice1(String str)
    {
        super(str);
        // 콤보 박스 객체 생성
        ch = new Choice();
        // 콤보 박스 아이템 생성
        ch.addItem("치킨");
        ch.addItem("피자");
        ch.addItem("햄버거");
        // 추가
        add(ch);
        setSize(300,100);
        setVisible(true);
    }
 
}
 
cs

<콤보 박스 예제 소스코드2 - Main.class>
1
2
3
4
5
6
7
8
9
public class Main 
{
    public static void main(String args[])
    {
        // 콤보 박스 생성자
        new Choice1("초이스 테스트");
    }
}
 
cs

<결과>


- Label(레이블)
- 사각형의 영여겡 문자열을 표시할 때 사용하는 컴포넌트

<생성자>
- Label()
- Label(String text)
- Label(String text, int alignment)
- Label.CENTER, LEFT, RIGHT 등

<주요 메소드>

 getText()

 text를 리턴 

 setText(String text)

 text로 레이블 설정 

 setAlignment(int align)

 정렬 상태 설정 


<레이블 예제 소스코드1 - LableTest.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

import java.awt.Color;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
 
public class LabelTest extends Frame
{
    // 패널 변수
    Panel p;
    // 레이블 변수
    Label label1, label2, label3;
    
    // 레이블 생성자
    public LabelTest(String str) 
    {        
        super(str);
        // 패널 생성
        p = new Panel();
        // 레이블 설정
        label1=new Label("치킨");
        label2=new Label("피자", Label.CENTER);
        label3=new Label("종로", Label.LEFT);
        // 레이블 색 설정
        label1.setBackground(Color.red);
        label2.setBackground(Color.blue);
        label3.setBackground(Color.green);
        // 패널에 레이블 
        p.add(label1);     p.add(label2);     p.add(label3);
        add(p);
        setSize(300,300);
        setVisible(true);    
    }
}
 
cs


<레이블 예제 소스코드2 - Main.class>


1
2
3
4
5
6
7
8
9
public class Main 
{
    public static void main(String args[])
    {
        // 레이블 
        new LabelTest("레이블 테스트");
    }
}
 
cs

<결과>

- List(리스트)
- 여러 개의 항목을 보여주고 사용자가 하나 또는 여러 개의 항목을 선택할 수 있도록 지원하는 컴포넌트 입니다.
- 기본적으로 하나의 항목을 선택할 수 있지만 MultipleMode를 설정하면 한 번에 여러개의 항목을 선택 가능

<생성자>

 List()

 비어 있는 리스트 생성 

 List(int rows)

 숫자만큼의 항목을 보여주는 리스트 생성 

 List(int rows, boolean, multipleMode)

 숫자만큼의 항목을 보여주고 멀티 선택 가능 리스트 생성 


<주요 메소드>

 void add(String item)

 item 추가 

 void add(String item, int index)

 선택한 위치에 item 추가 

 void deselect(int index)

 지정된 인덱스에 있는 항목을 선택 해제 

 String getItem(int index)

 인덱스에 해당하는 항목을 리턴 

 int getItemCount()

 항목 수를 리턴 

 String[] getItems()

 리스트내의 항목을 리턴 

 int getSelectedIndexes()

 선택된 항목들의 인덱스 리턴 

 String getSeleectedItem()

 선택된 항목의 문자열을 리턴 

 String[] getSelectedItems()

 선택된 항목들의 문자열을 리턴 

 void remove(int position)

 항목 삭제 

 void remove(String item)

 item 항목 삭제 

 void removeAll()

 항목 전체 삭제 


<리스트 예제 소스코드1 - ListTest.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.awt.Frame;
import java.awt.List;
import java.awt.Panel;
 
public class ListTest extends Frame
{
    Panel p;
    List list;
 
    public ListTest(String str)
    {        
        super(str);
        // 패널 생성
        p = new Panel();
        // 크기 2행 배열 생성
        list = new List(2,true);
        // 리스트 
        list.add("치킨");
        list.add("피자");
        list.add("햄버거");
        list.add("족발");
        p.add(list);
        add(p);
        setSize(300,100);
        setVisible(true);
    }
 
}
 
cs
<>

<리스트 예제 소스코드2 - Main.class>
1
2
3
4
5
6
7
8
public class Main 
{
    public static void main(String args[])
    {
        // 리스트 생성자 호출
        new ListTest(" 선택 리스트");
    }
}
cs

<결과>


- TextField

- 한 줄 내의 텍스트를 입력 받거나 편집할 수 있는 컴포넌트


<생성자>

 TextField()

 비어있는 텍스트 필드 객체 생성 

 TextField(int columns)

 지정한 컬럼 수만큼 문자를 보여줄 수 있는 크기로 텍스트 필드 객체 생성 

 TextField(Strimg text)

 초기 텍스트를 설정해서 생성 

 TextField(String text, int columns)

 초기 텍스트를 설정하고 보여줄 수 있는 크기로 생성 

 

<주요 메소드>

 setEchoChar(char c)

 보여지는 문자를 설정 

 int getCaretPosition()

 텍스트 내에서 현재 마우스 포인터의 위치를 리턴 

 String getText()

 텍스트 내의 표시되는 텍스트를 리턴 

 void select(int selectionStart, int selection End)

 시작위치부터 마지막위치까지 선택 

 void selectAll()

 텍스트 컴퍼넌트 내의 모든 텍스트를 선택 

 void setBackground(Color c)

 백그라운드 칼라를 설정 

 void setCaretPosition(int position)

 caret의 위치를 설정 

 void setText(String t)

 표시되는 텍스트를 지정된 텍스트로 설정 


<텍스트 필드 예제 소스코드1 - TextField1.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
 
public class TextField1 extends Frame
{
    public TextField1(String str)    
    {
        super(str);
        // 패널 생성
        Panel p = new Panel();
        // 레이블 생성
        Label lbl1 = new Label(" 아 이 디:");      
        Label lbl2 = new Label(" 비밀번호:");
        // 20자리 텍스트 필드 생성      
        TextField txt1 = new TextField("ID"20 );
        TextField txt2 = new TextField(20);
        // 비밀번호 * 로 
        txt2.setEchoChar('*');
        p.add(lbl1);
        p.add(txt1);
        p.add(lbl2);  
        p.add(txt2);
        add(p);
        setSize(200,200);
        setVisible(true);      
    }
 
}
cs


<텍스트 필드 예제 소스코드2 - Main.class>

1
2
3
4
5
6
7
8
9
10
public class Main 
{
    public static void main(String args[])
    {
        // 텍스트 필드 생성자 
        new TextField1("TextField 테스트");
 
    }
}
 
cs


<결과>


- TextArea

- 여러 줄의 텍스트를 입력 받거나 편집할 수 있는 컴포넌트


- 상수

- static int SCROLLBARS_BOTH: 수평과 수직 스크롤바

- static int SCROLLBARS_HORIZONTAL_ONLY : 수평 스크롤바

- static int SCROLLBARS_NONE

- static int SCROLLBARS_VERTICAL_ONLY : 수직 스크롤바


<생성자>

TextArea()

 새로운 텍스트 영역을 생성 

 TextArea(int rows, int columns)

 행수와 열수 지정 생성 

 TextArea(String text)

 초기값을 설정 

 TextArea(String text, int rows, int columns)

 초기값과 행수와 열수 지정 생성 

 TextArea(String text, int rows, int columns, int scrollbars) 

 행수와 열수를 지정하고 스크롤바 표시여부를 설정해서 생성 



<텍스트 에어리어 예제 소스코드1 - TextArea1.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
 
public class TextArea1 extends Frame
{
    public TextArea1(String str)
    {
          super(str);
        // 패널 생성
        Panel p = new Panel();
        // 텍스트 에어리어 10행 30열 생성
        TextArea txt1 = new TextArea(10,30);
        // 텍스트 필드 생성
        TextField txt2 = new TextField("Hello Java",20);    
        txt1.setText("  Java World ");
        // 배경색 노랑
          txt1.setBackground(Color.yellow);
        // 폰트 궁서체
          txt1.setFont(new Font("궁서체",Font.BOLD, 10));
        // 폰트색 파랑
          txt1.setForeground(Color.blue);
        // 텍스트필드 '@'로 대체
          txt2.setEchoChar('@');
        // 텍스트 필드 폰트 색 
          txt2.setForeground(Color.red);
          p.add(txt1); 
          p.add(txt2);      
        add(p);
          setSize(200,200);
          setVisible(true);      
    }
 
}
cs

<텍스트 에어리어 예제 소스코드2 - Main.class>
1
2
3
4
5
6
7
8
9
10
public class Main 
{
    public static void main(String args[])
    {
        // 텍스트에어리어 생성자 
        new TextArea1("Text Area 테스트");
 
    }
}
 
cs

<결과>


- Canvas

- 특정한 모양을 갖지 않고 사각형의 영역만을 가지는 컴포넌트로 주로 그림을 표시할 때 사용


- 메뉴 컴포넌트

- MenuBar : 메뉴 표시줄을 만들 때 사용

- Menu : 메뉴 표시줄에 보이게 될 메뉴를 만들 때 사용

- MenuItem : 메뉴에 포함될 세부 메뉴를 만들 때 사용

- CheckboxMenuItem : 체크 박스가 있는 메뉴

- PopupMenu : 동적 메뉴를 만들 때 사용


- 생성방법

- MenuBar 메뉴바 객체 = new MenuBar();

- Menu 메뉴객체 = new Menu(메뉴명);

- 메누바객체.add(메누 객체);

- MenuItem 세부메뉴객체 = new MenuItem("세부 메뉴 명");

- 메뉴명.add(세부메뉴명);


<메뉴 예제 소스코드1 - Menu1.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import java.awt.CheckboxMenuItem;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
 
public class Menu1 extends Frame
{
    public Menu1(String str) 
    {
        super(str);
        // 메뉴바 생성
        MenuBar mb = new MenuBar();
        // 메뉴 '파일' 생성
        Menu file = new Menu("파일");
        // 하위 항목 정의
        MenuItem file_new = new MenuItem("새로 만들기");
        MenuItem file_open = new MenuItem("열기");
        MenuItem file_save = new MenuItem("저장");
        MenuItem file_newname = new MenuItem("저장");
        // 하위 항목 
        file.add(file_new); 
        file.add(file_open);
        file.add(file_save);
        file.add(file_newname);
    
        Menu edit = new Menu("편집");
        MenuItem edit_undo = new MenuItem("실행취소"); 
        MenuItem edit_cut = new MenuItem("잘라내기");
        MenuItem edit_copy = new MenuItem("복사");
        MenuItem edit_paste = new MenuItem("붙여넣기");
        edit.add(edit_undo);
        edit.add(edit_cut);
        edit.add(edit_copy);
        edit.add(edit_paste);
 
        Menu view = new Menu("보기");
        CheckboxMenuItem view_status = new CheckboxMenuItem("상태표시줄");
        view.add(view_status);
        
        mb.add(file);
        mb.add(edit);
        mb.add(view);
    
        setMenuBar(mb);
        setSize(200,200);
        setVisible(true);
    }
 
}
 
cs


<메뉴 예제 소스코드2 - Main.class>

1
2
3
4
5
6
7
8
9
public class Main 
{
    public static void main(String args[])
    {
        // 메뉴 생성자 
        new Menu1("메뉴 테스트 ");
 
    }
}
cs


<결과>



 4. 배치 관리자 


- 레이아웃에 따라 컴포넌트들을 배치하기 위한 객체


- setLayout()을 이용하고 종류로는 FlowLayout, BorderLayout, GridLayout, CardLayout등이 있다.


- FlowLayout : panel의 기본으로 컴포넌트 들을 수평으로 순서대로 나열하는 레이아웃입니다.


- 수평으로 배치하다가 더 이상 공간이 없으면 다음 줄로 이동해서 배치 합니다.


<FlowLayout 예제 소스코드1 - FlowLayout1.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
 
public class FlowLayout1 extends Frame
{
    FlowLayout f = new FlowLayout();
    Button btn[] = new Button[10];
    
    public FlowLayout1(String str)
    {        
        super(str);
        // FlowLayout 
        setLayout(f);
        // 버튼 10개 생성
        forint i = 0; i < 10; i++
        {
            btn[i] = new Button((i+1)+"번 버튼");
            add(btn[i]);
        }
        setBounds(100,100,200,200);
        setVisible(true);
    }
}
 
cs

<FlowLayout 예제 소스코드2 - Main.class>
1
2
3
4
5
6
7
8
9
10
public class Main 
{
    public static void main(String args[])
    {
        // FlowLayout 생성자 
        new FlowLayout1("FlowLayout 테스트");
 
    }
}
 
cs


<결과>


- BorderLayout

- 5개의 영역으로 구분하여 보여줌

- 프레임은 기본적으로 BorderLayout

West

North 

East 

 Center

 South


<BorderLayout 예제 소스코드1 - BorderLayout1.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
 
public class BorderLayout1 extends Frame
{
    public BorderLayout1(String str) 
    {
        super(str);
        // BorderLayout 생성
        setLayout(new BorderLayout());
        // 배치에 맞게 
        add("North"new Button("북쪽"));
        add("West"new Button("서쪽"));
        add("East"new Button("동쪽"));
        add("Center"new Button("중앙"));
        add("South"new Button("남쪽"));
 
        setSize(200,200);
        setVisible(true);
    }
}
cs


<BorderLayout 예제 소스코드2 - Main.class>
1
2
3
4
5
6
7
8
9
public class Main
{
    public static void main(String[] args) 
    {
        // BorderLayout 생성자 
        new BorderLayout1("BorderLayout 테스트");
    }
}
 
cs


<결과>


- GridLayout

- 격자 모양으로 배치

- 행과 열의 수를 지정해서 배치

- 행과 열 수보다 컴포넌트의 수가 많으면 자동적으로 늘어남





<GridLayout 예제 소스코드1 - GridLayout1.class>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
 
public class GridLayout1 extends Frame
{
    // 버튼 6개 선언
    Button btn[] = new Button[6];
    public GridLayout1(String str) 
    {
        super(str);
        // GridLayout 생성(3 x 2)
        setLayout(new GridLayout(3,2) );
        // 버튼 6개 
        for(int i = 0; i <  6; i++
        {
            btn[i] = new Button(i+1 + "번 버튼");
            add(btn[i]);
        }
        setSize(200,200);
        setVisible(true);
    }
}
 
cs

<GridLayout 예제 소스코드2 - Main.class>
1
2
3
4
5
6
7
8
9
public class Main 
{
    public static void main(String args[])
    {
        // GridLayout 생성자 호출
        new GridLayout1("GridLayout Test");
    }
}
 
cs


<결과>



- CardLayout

- 여러 개의 카드를 쌓은 것처럼 보여주는 레이아웃으로 한번에 하나만 보여줍니다.

- next 메소드를 이용해서 다음 화면을 출력합니다.

- Layout에 null을 설정하면 좌표와 크기를 직접 설정해서 배치합니다.


<CardLayout 예제 소스코드1 - CardLayout1.class>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
 
public class CardLayout1 extends Frame
{
    // CardLayout 선언
    CardLayout card = new CardLayout();
    // 패널 선언
    Panel panel[] = new Panel[5];
    // 색상 선언
    Color color[] = {Color.red, Color.blue, Color.yellow, Color.green,Color.cyan};
    
    // CardLayout 생성자
    public CardLayout1(String str) 
    {
        super(str);
        // CardLayout 생성
        setLayout(card);
        // 마우스 핸들러 선언
        MouseHandle mouse = new MouseHandle();
        
        // 패널과 색상 변경을 위한 반복문
        for(int i = 0; i < 5; i++
        {
            panel[i] = new Panel();
            panel[i].setBackground(color[i]);
            panel[i].addMouseListener(mouse);
            add(""+ (i+1), panel[i]);
        }        
        setSize(200,200);
        setVisible(true);
    }
    
    // 마우스 핸들러를 위한 클래스
    public class MouseHandle extends MouseAdapter     
    {
        public void mouseClicked(MouseEvent e)     {
            card.next(CardLayout1.this);
        }
    }
 
}
 
cs


<CardLayout 예제 소스코드2 - Main.class>

1
2
3
4
5
6
7
8
public class Main 
{
    public static void main(String args[])
    {
        // CardLayout 생성자 호출
        new CardLayout1("CardLayout Test");
    }
}
cs


<결과>

- 클릭시 패널이 변화하므로 색상도 변함




  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유