프로그래밍 언어/JAVA

메뉴 만들기

· 코딩마이데이

메뉴 구성

스윙 프로그램에 메뉴를 만들어 달아봅시다.

 

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();
    }
}

 

초기 상태
Load 메뉴 아이템을 선택하면 레이블을 이용하여 이미지 출력
Hide 메뉴아이템 선택으로 이미지를 보이지 않게 함
ReShow 메뉴 아이템 선택으로 숨겨진 이미지가 다시 보이게 함
Exit 메뉴아이템 선택하면 프로그램 종료

'프로그래밍 언어 > 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