메뉴 만들기
메뉴 구성
스윙 프로그램에 메뉴를 만들어 달아봅시다.
JMenuBar
메뉴바의 가능을 구현한 클래스입니다. 이곳에 JMenu로 만든 메뉴를 여러 개 답니다.
JMenu
하나의 메뉴를 구현한 클래스입니다. 이곳에 JMenuItem으로 만든 메뉴 아이템을 여러 개 답니다.
JMenuItem
하나의 메뉴아이템을 구현한 클래스입니다.

분리선
메뉴아이템 사이의 분리선으로서 separator라고 부르며, JMenu의 addSeparator() 메서드를 호출하면 메뉴에 문리선이 삽입됩니다.
메뉴 만들기
1. 메뉴바 만들기
JMenuBar mb = new JMenuBar();
2. 메뉴를 만들고 메뉴바에 붙이기
메뉴 이름은 문자열로 JMenu의 생성자에 전달합니다. 메뉴바에 메뉴를 붙일 때 JMenuBar의 add() 메서드를 이용합니다.
JMenu screenMenu = new JMenu("Screen"); // Screen 메뉴 생성
mb.add(screenMenu); // 메뉴바에 Screen 메뉴 붙이기
3. 메뉴아이템을 생성하여 메뉴에 붙이기
메뉴아이템의 이름은 문자열로서 JMenuItem의 생성자에 전달합니다. 메뉴바에 메뉴를 붙일 때 JMenuBar의 add() 메서드를 이용합니다.
screenMenu.add(new JMenuItem("Load"));
screenMenu.add(new JMenuItem("Hide"));
screenMenu.add(new JMenuItem("ReShow"));
screenMenu.addSeparator(); // ReShow 메뉴아이템 다음에 분리선 삽입
screenMenu.add(new JMenuItem("Exit"));
4. 메뉴바를 프레임에 붙이기
JFram의 setJMenuBar() 메소드를 이용하여 메뉴바를 붙이는 예는 다음과 같습니다.
frame.setJMenuBar(mb);

메뉴 만들기
import javax.swing.*;
public class MenuEx extends JFrame {
public MenuEx() {
setTitle("Menu 만들기 예제");
createMenu(); // 메뉴 생성, 프레임 삽입
setSize(250, 200);
setVisible(true);
}
// 메뉴를 만들어 프레임에 삽입한다.
private void createMenu() {
JMenuBar mb = new JMenuBar(); // 메뉴바 생성
JMenu screenMenu = new JMenu("Screen"); // Screen 메뉴 생성
// Screen 메뉴에 메뉴 아이템을 생성 삽입
screenMenu.add(new JMenuItem("Load"));
screenMenu.add(new JMenuItem("Hide"));
screenMenu.add(new JMenuItem("ReShow"));
screenMenu.addSeparator(); // 분리선 삽입
screenMenu.add(new JMenuItem("Exit"));
// 메뉴바에 메뉴 삽입
mb.add(screenMenu); // Screen 메뉴 삽입
mb.add(new JMenu("Edit")); // Edit 메뉴 생성 삽입
mb.add(new JMenu("Source")); // Source 메뉴 생성 삽입
mb.add(new JMenu("Project")); // Project 메뉴 생성 삽입
mb.add(new JMenu("Run")); // Run 메뉴 생성 삽입
// 메뉴바를 프레임에 부착
setJMenuBar(mb);
}
public static void main(String[] args) {
new MenuEx();
}
}
[실행결과]

메뉴아이템에 Action 이벤트 달기
많은 경우 메뉴아이템을 사용자로부터 작업 명령을 받는데 사용됩니다. 사용자가 아이템을 선택하면 Action 이벤트가 발생합니다.
JMenuItem item = new JMenuItem("Load");
item.addActionListener(new NenuActionListener()); // 메뉴아이템에 Action 리스너 등록
screenMenu.add(item);
...
class MenuActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// 사용자가 Load 메뉴아이템을 선택하는 경우 처리할 작업 구현
}
}
메뉴아이템 선택시 Action 리스너 활용
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MenuActionEventEx extends JFrame {
private JLabel imgLabel = new JLabel(); // 빈 이미지를 가진 레이블
public MenuActionEventEx() {
setTitle("Menu에 Action 리스너 만들기 예제");
createMenu();
getContentPane().add(imgLabel, BorderLayout.CENTER);
setSize(250, 220);
setVisible(true);
}
private void createMenu() { // 메뉴바에 Screen 메뉴 생성. Screen 메뉴에 4개의 메뉴아이템 삽입
JMenuBar mb = new JMenuBar(); // 메뉴바 생성
JMenuItem [] menuItem = new JMenuItem[4];
String[] itemTitle = {"Load", "Hide", "ReShow", "Exit"};
JMenu screenMenu = new JMenu("Screen");
// 4개의 메뉴 아이템을 Screen 메뉴에 삽입한다.
MenuActionListener listener = new MenuActionListener(); // Action 리스너 생성
for (int i = 0; i < menuItem.length; i++) {
menuItem[i] = new JMenuItem(itemTitle[i]); // 메뉴아이템 생성
menuItem[i].addActionListener(listener); // 메뉴아이템을 Screen 메뉴에 삽입
screenMenu.add(menuItem[i]); // 메뉴아이템을 Screen 메뉴에 삽입
}
mb.add(screenMenu); // 메뉴바에 Screen 메뉴 삽입
setJMenuBar(mb); // 메뉴바를 프레임에 부착
}
class MenuActionListener implements ActionListener { // 메뉴아이템 처리 Action 리스너
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand(); // 사용자가 선택한 메뉴아이템의 문자열 리턴
switch (cmd) { // 메뉴 아이템의 종류 구분
case "Load":
if (imgLabel.getIcon() != null)
return; // 이미 로딩되었으면 리턴
imgLabel.setIcon(new ImageIcon(("images/img.jpg")));
break;
case "Hide":
imgLabel.setVisible(false);
break;
case "ReShow":
imgLabel.setVisible(true);
case "Exit":
System.exit(0);
break;
}
}
}
public static void main(String[] args) {
new MenuActionEventEx();
}
}





'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| 툴팁 (0) | 2025.09.02 |
|---|---|
| 툴바 (1) | 2025.08.31 |
| wait(), notify(), notifyAll()을 이용한 스레드 동기화 (4) | 2025.08.25 |
| 스레드 동기화(Thread Synchronization) (3) | 2025.08.22 |
| 스레드 종료 (4) | 2025.08.19 |