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


안녕하세요? 이번 시간에도 마찬가지로 저번시간에 이어서 Java GUI 이벤트 처리에 대해서 알아보겠습니다.



 1. 이벤트(Event) 

GUI 컴포넌트에서 발생되는 모든 행위


- 예를 들어 버튼을 클릭하거나 윈도우 종료단추를 클릭하는 행동


- ActionEvent(JButton, JTextField, JCheckBox, JFileChooser, JMenuItem, JRadioButton..)

- 버튼이 클릭되거나 리스트, 메뉴 등이 선택되었을 때 발생하는 이벤트

- ActionListener 인터페이스의 actionPerformed(ActionEvent) 메서드를 이용해서 처리


 필드명

 해당 키 

 ALT_MASK

 ALT 키 

 CTRL_MASK

 Ctrl 키 

 SHIFT_MASK

 Shifit 키 


 메소드

해당 키

 getActionCommand()

 이벤트를 발생시킨 객체의 문자열을 가져온다 

 getSource()

 이벤트를 발생시킨 객체의 위치값을 가져온다. 

 getModifiers()

 이벤트가 발생되었을 때 같이 사용된 modifier키들을 가져온다.


- KeyEvent(JFrame, JButton, JTextField, JTextAread..)

- 키보드를 통해서  키 입력이 오면 발생

- KeyListener 인터페이스나 KetAdapter 추상클래스를 이용

- 이벤트 처리 메소드

- keyPressed(KeyEvent e) : 컴포넌트에서 키가 눌러지면 호출

- keyReleased(KetEvent e) : 키에서 뗄 때 호출

- ketTyped(KeyEvent e) : 키보드를 통해 문자가 입력되었을 때 호출


 필드명

 해당 키 

 VK_0 ~ VK_9

 숫자 0~9 

 VK_A ~ VK_Z

 영문자 A~Z 

 VK_F1 ~ VK_F24

 기능키 F1 ~ F24 

 VK_ENTER

 엔터 키 

 VK_SPACE

 스페이스바 키 

 VK_BACKSPACE

 BackSpace 키 

 KEY_PRESSED

 키가 눌려진 이벤트 의미 

 KEY_RELEASED

 키가 눌렸다 놓아진 이벤트 의미 

 KEY_TYPED

 키 입력 이벤트 의미 


 메소드

 내용 

 getKeyChar()

 이벤트에 의해 입력된 문자값을 가져온다. 

 getKeyCode()

 이벤트에 의해 입력된 문자에 해당하는 코드값을 가져온다. 


- MouseEvent(JList를 제외한 거의 모든 컴포넌트)

- 마우스 버튼을 누르거나 특정 컴포넌트 안에 진입하거나 벗어날 때 호출되는 이벤트

- MouseListener 인터페이스나 MouseAdapter 추상 클래스를 이용해서 처리

- 메소드

- mouseClicked(MouseEvent e) : 마우스를 클릭했을 때 호출

- mouseEntered(MouseEvent e) : 마우스 커서가 컴포넌트 영역에 들어오면 호출

- mouseExited(MouseEvent e) : 마우스 커서가 컴포넌트 영역에서 벗어나면 호출

- mousePressed(MouseEvent e) : 마우스 버튼이 눌러지면 호출

- mouseReleased(MouseEvent e) : 마우스 버튼이 눌러졌다 띄어지면 호출


 필드명

 설명 

 MOUSE_CLICKED

 마우스 버튼이 클릭된 경우 발생되는 이벤트 

 MOUSE_ENTERED

 마우스 커서가 컴포넌트 영역으로 들어왔을 때 발생되는 이벤트

 MOUSE_EXITED

 마우스 커서가 컴포넌트 영역 밖으로 나가면 발생되는 이벤트 

 MOUSE_PRESSED

 마우스 버튼이 눌러졌을 때 발생하는 이벤트 

 MOUSE_RELEASED

 마우스 버튼이 눌렀다 띄었졌을 때 발생하는 이벤트 

 MOUSE_DRAGGED

 마우스 버튼이 클릭된 상태에서 움직일 때 발생되는 이벤트 

 MOUSE_ MOVED

 마우스 커서가 움직일 때 발생되는 이벤트 


 메소드

 내용 

 getClickCount()

 마우스 눌려진 횟수를 얻어온다. 

 getPoint()

 마우스 이벤트가 발생한 좌표를 얻어온다. 

 getX()

 마우스 이벤트가 발생한 X좌표를 얻어온다. 

 getY()

 마우스 이벤트가 발생한 Y좌표를 얻어온다. 


- MouseMotionEvent(JList를 제외한 거의 모든 컴포넌트)

- 마우스를 움직이면 호출되는 이벤트

- MouseMotionListener 인터페이스 or MouseMotionAdapter 추상 클래스 이용

- 메소드

- mouseDragged(MouseEvent e) : 마우스 버튼이 눌러진 상태로 이동하면

- mouseMoved(MouseEvent e) : 마우스를 이동하면 호출


- WindowEvent(JFrame)

- 윈도우를 활성화, 아이콘화, 비활성화 작업 시 발생하는 이벤트

- WindowListener 인터페이스 or WindowAdapter 추상 클래스 이용

- 메소드

- windowOpened(WindowEvent e) : 윈도우가 열릴 때

- windowClosing(WindowEvent e) : 윈도우가 닫힐 때

- windowActivated(WindowEvent e) : 윈도우가 활성화 되었을 때

- windowDeactivated(WindowEvent e) : 윈도우가 활성화 되었을 때

- windowIconified(WindowEvent e) : 윈도우가 아이콘화 되었을 때

- windowDeiconfied(WindowEvent e) : 윈도우가 최소화 상태에서 원래도로 되돌아올 때


 필드명

 설명 

 WINDOW_ACTIVATED

 윈도우가 활성화될 때 발생 

 WINDOW_DEACTIVATED

 윈도우가 비활성화 될 때 발생 

 WINDOW_CLOSED

 윈도우가 닫힐 때 발생 

 WINDOW_CLOSING

 윈도우가 사용자의 요청으로 닫힐 때 발생 

 WINDOW_ICONIFIED

 윈도우가 아이콘화 될 때 발생 

 WINDOW_OPENDED

 윈도우가 생성될 때 발생 


 메소드

 내용 

 getWindow()

 이벤트가 발생된 윈도우를 가져온다. 


- 이벤트 관련 객체

- Listener 인터페이스 - 하나 또는 2개 이상의 이벤트 처리를 위한 메소드를 소유한 인터페이스

- Adapter 클래스 - 2개 이상의 메소드를 가진 Listener를 변환한 추상 클래스


- 이벤트 처리

- 원하는 Listener를 클래스에 implements 하거나 Adapter 클래스를 상속

- 이벤트에 따라 호출되는 메소드 재정의

- 넘어오는 매개변수의 getSource()가 이벤트를  발생시킨  컴포넌트를 리턴

- 컴포넌트에 이벤트 리스너를 추가


- 이벤트 처리는 Anoymous Class를 이용해서 한번에 처리 가능  


<Event 예제 소스코드1 - Event1.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
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
public class Event1 extends JFrame implements ActionListener
{
    // 레이블과 버튼 정의
    JLabel lbl;
    JButton btn1, btn2;
    
    public Event1(String str)
    {
        super(str);
        lbl = new JLabel("버튼을 입려하세요.");
        btn1 = new JButton("첫번째 버튼");
        btn2 = new JButton("두번째 버튼");
          // 버튼1,2를 ActionListener 사용하기
        btn1.addActionListener(this);
        btn2.addActionListener(this);
        // 패널 생성
        JPanel panel = new JPanel();
        panel.add(btn1);
        panel.add(btn2);
        
        add("Center", panel);
        add("South", lbl);
        
        setSize(300, 200);
        setVisible(true);
    }
    
   // 이벤트 발생시 행동하는 함수
    public void actionPerformed(ActionEvent e) 
    {
        Object obj = e.getSource();
        if((JButton)obj == btn1) 
        {
            lbl.setText("첫번째 버튼을 눌렀습니다.");
        }
        else     {
            lbl.setText("두번째 버튼을 눌렀습니다.");
        }
    }
}
 
 


<Event 예제 소스코드1 - Main.class>

1
2
3
4
5
6
public class Main{
    public static void main(String[] args) 
    {
        new Event1("ActionEvent 테스트");
    }
}


<결과>

- 버튼 클릭을 리스너로 받아 이벤트 발생시 텍스트가 변함 


<Event 예제 소스코드2 - Event2.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
52
53
54
55
56
57
58
59
60
61
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JTextField;
 
public class Event2 extends JFrame
{
    // 텍스트 필드와 체크박스 정의
    JTextField text;
    JCheckBox bold;
    
    public Event2()
    {
        super("체크박스에서 Item처리");
        
          // Container를 생성해 FlowLayout 생성
        Container c = getContentPane();
        c.setLayout(new FlowLayout());
        
          // 텍스트 필드에 "너구리 해적단" 쓰기
        text = new JTextField("너구리 해적단", 10);
        text.setFont(new Font("굴림", Font.PLAIN, 14));
        c.add(text);
        
        bold = new JCheckBox("진하게");
        c.add(bold);
        
          // 체크박스 핸들러 생성
        CheckBoxHandler  handler = new CheckBoxHandler();
        // 리스너를 만들어 핸들러 넣기
        bold.addItemListener(handler);
        
        setSize(300,100);
        setVisible(true);
    }
    
   // 이벤트 발생시 처리될 메소드
    public class CheckBoxHandler implements ItemListener
    {
        int valBold = Font.PLAIN;//보통 폰트
        
        //[진하게]체크박스를 선택 또는 해제시 자동으로 실행
        public void itemStateChanged( ItemEvent e ) {
            //이벤트가 발생한 컴포넌트가 bold이면 실행
            if ( e.getSource() == bold )
               //아이템의 상태 변화가 체크박스 체크 이면
               if ( e.getStateChange() == ItemEvent.SELECTED )
                  valBold = Font.BOLD; //글꼴 스타일 진하게
               else
                  valBold = Font.PLAIN; //글꼴 스타일 보통으로
 
            //지정한 폰트를 텍스트 상자에 적용
            text.setFont( new Font( "굴림", valBold , 14 ) );
        }
    }
}
 


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

1
2
3
4
5
6
7
8
9
10
11
import javax.swing.JFrame;
 
public class Main extends JFrame
{
    public static void main(String[] args) 
  {
        Event2 item = new Event2();
        item.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
 
}


<결과>




 2. Pane 


- 특정 목적에 맞도록 작성된 컴포넌트


- JEditorPane

- 여러 가지 형태의 문서를 보여줄 수 있는 컴포넌트

- 일반 텍스트나 html, rft 문서를 보여줄 수 있습니다.


- JTabbedPane

- 여러 패널을 담을 때 사용하는 컴포넌트

- 기능별로 분류된 옵션들을  동시에 보여 줄 필요가 없고, 필요 시 하나의 패널만 보여주기 위해서 사용하는 컴포넌트

- 사용 방법은 타이틀이나 아이콘을 가지는 탭을 클립함으로써 여러개의 패널 중에 선택된 탭을 보여줌

- 탭의 위치는 기본적으로 왼쪽 위에 위치


<JTabbedPane 예제 소스코드1 - JTabbedPaneTest.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 javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import java.awt.*;
 
public class JTabbedPaneTest extends JFrame
{
    // 텝과 레이블 변수 선언
    JTabbedPane tab;
    JTable1 j1;
    JTable2 j2;
    
    public JTabbedPaneTest()
    {
        super("JTabbedPane 연습예제");
        // 텝 생성과 위치 선정
        tab = new JTabbedPane(JTabbedPane.TOP);
        
        // 패널 생성
        JPanel one = new JPanel();
        j1 = new JTable1();
        
        JPanel two = new JPanel();
        j2 = new JTable2();
        
        // 패널 추가
        one.add(j1);
        two.add(j2);
        
        // 탭 명칭과 컴포넌트 추가
        tab.addTab("기본 데이터", one);
        tab.addTab("기타 데이터", two);
        
        getContentPane().add(tab, BorderLayout.CENTER);
        setSize(500, 200);
        setVisible(true);
    }
    
    public static void main(String args[])
    {
        JTabbedPaneTest jt = new JTabbedPaneTest();
        jt.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}
 


<JTabbedPane 예제 소스코드2 - JTable1.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
 
// 첫 번째 탭 
public class JTable1 extends JPanel
{
    public JTable1(){
        String title[] = {"번호""이름""나이"};
        String data[][] = {
            {"1","너구리""26"},
            {"2","돼   지""25"},
            {"3","족제비""26"}
        };
        // 테이블 생성
        JTable table = new JTable(data, title);
        JScrollPane sp = new JScrollPane(table);
       add(sp);         
    }
}


<JTabbedPane 예제 소스코드3 - JTable2.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
 
// 두 번째 탭
public class JTable2 extends JPanel
{
    public JTable2(){
        String title[] = {"번호""직업""소속"};
         String data[][] = {
             {"1","프로그래머""네이X"},
             {"2","백수""집"},
             {"3","디자이너""엔X소X트"}
         };
         // 테이블 생성
         JTable table = new JTable(data, title);
         JScrollPane sp = new JScrollPane(table);
         add(sp);         
     }
 
}


<결과>


- JOptionPane

- 실행하는 도중에 사용자로부터 데이터를 입력 받거나 특정한 메시지를 출력시켜 확인시키는 작업

- 자체적으로 실행시키는게 아니므로 showDialog()메소드를 통해 확인해야한다. 

 종류

 기능 

 호출 함수 

 MessageDialog

 사용자에게 메시지를 보여준다. 

 showMessageDialog() 

 ConfirmDialog

 Yes, No, Cancel과 같은 버튼으로 확인 

 showConfirmDialog() 

 InputDialog

 사용자로부터 자료를 입력받기 위한 다이어로그 

 showInputDialog() 

 OptionDialog

 위 세 가지를 포함한 다이어로그 

 showOptionDialog()


<JOptionPane 예제 소스코드 - JOptionPaneTest.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
52
53
54
55
56
57
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
 
public class JOptionPaneTest extends JFrame implements ActionListener
{
    JButton btn[] = new JButton[4];
    String[] str = {"로그인""회원가입"};
    
    public JOptionPaneTest()
    {
        super("JOptionpane 테스트");
        
        setLayout(new FlowLayout());
        
        btn[0]=new JButton("메세지");    
        btn[1]=new JButton("확인");
        btn[2]=new JButton("입력");
        btn[3]=new JButton("옵션");
        
        for(JButton n : btn){
            add(n);
            n.addActionListener(this);
        }
        pack();
        setLocation(300,300);
        setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e)
    {
        if (e.getActionCommand()== "메세지")
        { 
            JOptionPane.showMessageDialog(this,"메세지다이얼로그박스","메세지",JOptionPane.INFORMATION_MESSAGE);
        }else if(e.getActionCommand()=="확인")
        {    
            JOptionPane.showConfirmDialog(this,"확인다이얼로그박스","확인",JOptionPane.YES_NO_OPTION);
        }else if(e.getActionCommand()=="입력")
        {
            JOptionPane.showInputDialog(this,"입력다이얼로그박스","입력",JOptionPane.YES_NO_OPTION);
        }else if(e.getActionCommand()=="옵션")
        {
            JOptionPane.showOptionDialog(this,"옵션다이얼로그박스","옵션",JOptionPane.YES_NO_CANCEL_OPTION,
            JOptionPane.INFORMATION_MESSAGE, null, str, str[1] );
        }
    }
        
    public static void main(String[] args)
    {
        new JOptionPaneTest();
    }
 
}


<결과>





 3. JFileChooser 


- 프로그램을 실행하는 도중에 데이터를 파일로부터 불러오거나 파일에 저장할 수 있도록 선택 다이어로그 생성


- 파일 선택창은 FileSystemView, FileView, FileFilter 등과 같은 컨트롤러와 함께


- FileSystemView는 파일 시스템과 디렉토리 정보를 제공


- FileView는  디렉토리 내부에 있는 파일들에 대한 정보를 제공


- FileFilter는 파일을 원하는 종류만 보여줄 수 있도록 걸러주는 역할


- 멤버필드

- static int CANCEL_OPTION : 취소를 선택했을 때 리턴되는 값

- static int APPROVE_OPTION : 예나 확인을 선택했을 때 리턴되는 값


- 생성자

- JFileChooser() : 디폴트 경로

- JFileChoorser(File currentDirectory) : 지정한 경로를 보여줌

- JFileChooser(String currentDirectoryPath) : 지정한 경로를 보여줌


<FileChooser예제 소스코드 - JFileChooserTest.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
52
53
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
 
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileNameExtensionFilter;
 
public class JFileChooserTest extends JFrame implements ActionListener
{
    // JFileChooser 선언
    JFileChooser fc;
    public JFileChooserTest()
    {
        // JFileChooser 생성
        fc = new JFileChooser();
        // 여러가지 선택 가능
        fc.setMultiSelectionEnabled(true);
        // JButton 생성
        JButton btn = new JButton("파일선택");
        btn.addActionListener(this);
        add("North", btn);
        setBounds(0, 0, 200, 200);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    // 버튼 클릭시 메소드
    public void actionPerformed(ActionEvent e)
    {
        // 파일 이름 텍스트.txt가 디폴트값
        FileNameExtensionFilter filter = new FileNameExtensionFilter("텍스트""txt");
        // 위 내용 적용
        fc.setFileFilter(filter);
        // 다이어로그 생성
        int result = fc.showOpenDialog(this);
        // 예 확인시
        if(result == JFileChooser.APPROVE_OPTION) 
        {
            // 파일 선택
            File[] f = fc.getSelectedFiles();
            int i = 0;
            for(File n : f)
            System.out.println(++i + "번째 선택한 파일:" + n.getName());    
        }
    }
    public static void main(String[] args) 
    {
        new    JFileChooserTest();    
    }
}
 


<결과>


 4. JColorChooser 


- 색상을 선택할 수 있는 다이어로그


- 생성자

- JColorChooser() : 초기 색이 흰색

- JColorChooser(Color initialColor) : 초기 색이 매개 변수

- JColorChooser(ColorSelectionModel model) : 지정된 선택 판 모델을 가지고 생성


- 메소드

- static JDialog createDialog(Component c , String title, boolean modal, JColorChooser chooserPane,

ActionListener okListener, ActionListener cancelListener)

- OK, Cancel 및 Reset 버튼과 함께 지정된 ColorChooser을 가지는 새로운 다이어로그 생성

- Color getColor() : 색상을 리턴

- void setColor(Color color): 색 설정

- void setColor(int c): 색 설정

- void setColor(int r, int g, int b): 색 설정

- static Color showDialog(Component component, String title, Color initialColor

- 모델 다이얼로그로 화면에 표시


 5. JMenu 

- JMenuBar, JMenu, JMenuItem으로 구성

- 사용 방법
- 1단계: JMenuBar 객체를 생성
- 2단계: setJMenuBar(JMenuBar객체)를 이용해서 컨테이너에 메뉴바 부착
- 3단계: JMenu객체를 생성해서 JMenuBar 객체의 add(JMenu객체)로 부착
- 4단계: JMenuItem 객체를 생성해서 JMenu객체의 add (JMenuItem 객체)로 부착

- 스윙에서는 JMenuItem, JCheckBoxMenuItem, JRadioButtonMenuItem의 메뉴 아이템이 제공

- 메뉴 객체에서 setMnemonic(int mnemonic)을 이용해서 단축키도 지정이 가능

- ALT와 조합되서 단축키가 됩니다.

<JMenu 예제 소스코드 - JMenuTest.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
 
public class JMenuTest extends JFrame
{
    // JRadioButtonMenuItem 선언
    private JRadioButtonMenuItem colorItems[], fonts[];
    // JCheckBoxMenuItem 선언
    private JCheckBoxMenuItem styleItems[];
    // ButtonGroup 선언
    private ButtonGroup fontGroup, colorGroup;
    
    public JMenuTest()
    {
        super("JMenu 테스트");
        // 메뉴바 생성
        JMenuBar bar = new JMenuBar();
        setJMenuBar(bar);
        // 파일 메뉴
        JMenu fileMenu = new JMenu("파일(F)");
        fileMenu.setToolTipText("파일 메뉴입니다.");
        fileMenu.setMnemonic('F');
        
        // 파일 메뉴 안에 내용
        JMenuItem newItem = new JMenuItem("새파일(N)");
        newItem.setMnemonic('N');
        fileMenu.add(newItem);
 
        JMenuItem openItem = new JMenuItem("열기(O)");
        openItem.setMnemonic('O');
        fileMenu.add(openItem);
        
        JMenuItem saveItem = new JMenuItem("저장(S)");
        saveItem.setMnemonic('S');
        fileMenu.add(saveItem);
        
        JMenuItem exitItem = new JMenuItem("닫기(X)");
        exitItem.setMnemonic('X');
        fileMenu.add(exitItem);
        
        bar.add(fileMenu);
        
        // 편집 메뉴 생성
        JMenu formatMenu = new JMenu("편집(E)");
        formatMenu.setToolTipText("편집 메뉴입니다.");
        formatMenu.setMnemonic('E');
        
        // 편집 메뉴 안에 내용
        String colors[] = {"검정""파랑""빨강""초록"};
        JMenu colorMenu = new JMenu("색상(C)");
        colorMenu.setMnemonic('C');
        colorItems = new JRadioButtonMenuItem[colors.length];
        colorGroup = new ButtonGroup();
        
        for(int i = 0 ; i < colors.length ; i++)
        {
            colorItems[i] = new JRadioButtonMenuItem(colors[i]);
            colorMenu.add(colorItems[i]);
            colorGroup.add(colorItems[i]);
        }
        
        colorItems[0].setSelected(true);
        formatMenu.add(colorMenu);
        formatMenu.addSeparator();
        
        String fontNames[] = {"굴림""바탕""고딕"};
        JMenu fontMenu = new JMenu("글꼴(T)");
        fontMenu.setMnemonic('T');
        fonts = new JRadioButtonMenuItem[fontNames.length];
        fontGroup = new ButtonGroup();
        
        for ( int i = 0; i < fonts.length; i++ ) 
        {
            fonts[ i ] = new JRadioButtonMenuItem( fontNames[ i ] );
            fontMenu.add( fonts[ i ] );
            fontGroup.add( fonts[ i ] );
        }
 
        
        fonts[0].setSelected(true);
        fontMenu.addSeparator();
        
        String styleNames[] = {"굵게""기울임"};
        styleItems = new JCheckBoxMenuItem[styleNames.length];
        
        for ( int i = 0; i < styleNames.length; i++ ) 
          {
             styleItems[ i ] = new JCheckBoxMenuItem( styleNames[ i ] );
             fontMenu.add( styleItems[ i ] );
          }
          formatMenu.add( fontMenu );
          bar.add( formatMenu ); 
          
          // 도움말 메뉴 생성
          JMenu helpMenu = new JMenu( "도움말(H)" );
          helpMenu.setToolTipText("도움말 메뉴입니다");
          helpMenu.setMnemonic( 'H' );
          JMenuItem helpItem = new JMenuItem( "도움말항목(L)" );
          helpItem.setMnemonic( 'L' );
          helpMenu.add(helpItem);
          bar.add( helpMenu );
          setSize( 400, 200 );
          setVisible(true);
          setDefaultCloseOperation(EXIT_ON_CLOSE);
 
    }
    
       public static void main( String args[] )
       {
          new JMenuTest();      
       }
 
}


<결과>


여기까지 Java GUI의 대하여 알아보았습니다. 


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