본문 바로가기

BackEnd/Java

[java]이것이 자바다 부록 Java UI 10 (Swing을 이용한 메뉴 컴포넌트)

728x90
반응형

1. 메뉴 컴포넌트

   ▷ 메뉴는 빠질 수 없는 구성 요소, Swing은 메뉴 생성을 위해 컴포넌트를 javax.swing 패키지에서 제공

 

NO 컴포넌트 설명
1 JMenuBar 메뉴바 컴포넌트
2 JMenu 주 메뉴 및 자식 메뉴 아이템을 갖는 서브 메뉴 컴포넌트
3 JPopupMenu 팝업 메뉴 컴포넌트
4 JMenuItem 메뉴 아이템 컴포넌트
5 JCheckBoxMenuItem JCheckBox로 선택할 수 있는 메뉴 아이템 컴포넌트
6 JRadioButtonMenuItem JRadioButton으로 선택할 수 있는 메뉴 아이템 컴포넌트
7 JSeparator 메뉴를 수직 또는 수평으로 분리시키는 컴포넌트

 

◎ 각 컴포넌트의 사용 위치를 그림으로 표시

 

(1) 메뉴 생성

   ▷ 가장 먼저 JMenuBar를 생성하고 윈도우 컨테이너 상단에 배치

   ▷ JMenuBar를 배치할 수 있는 윈도우 컨테이너에는 JFrame, JDialog 등이 있음

   ▷ JMenuBar를 상단에 배치하기 위해 setMenuBar() 메소드를 제공하고 있음

 

   ▷ 윈도우 상단에 메뉴를 수평으로 배치하는 역할만 하기때문에 메뉴가 없을 경우에는 윈도우 상단에 보이지 않음

   ▷ JMenu로 생성된 메뉴를 JMenuBar에 다음과 같이 추가해야만 윈도우 상단에 나타남

 

 

◎ 메뉴바, 메뉴, 서브 메뉴, 메뉴 아이템을 생성 및 추가 예제

import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JSeparator;
import javax.swing.SwingUtilities;

public class JMenuExample extends JFrame {
	private JMenuBar jMenuBar;
	private JMenu menuFile, menuNew, menuHelp;
	private JMenuItem menuItemNewFile, menuItemNewFolder;
	private JMenuItem menuItemOpen, menuItemSave, menuItemExit;
	
	// 메인 윈도우 설정
	public JMenuExample() {
		this.setTitle("JMenuExample");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setJMenuBar(getJMenuBar());
		this.setSize(300, 200);
	}
	
	// JMenuBar 생성
	public JMenuBar getJMenuBar() {
		if(jMenuBar == null) {
			jMenuBar = new JMenuBar();
			// 메뉴 추가
			jMenuBar.add(getMenuFile());
			jMenuBar.add(getMenuHelp());
		}
		return jMenuBar;
	}
	
	
	// 파일 메뉴 생성
	public JMenu getMenuFile() {
		if(menuFile == null) {
			menuFile = new JMenu("파일");
			// 서브 메뉴와 메뉴 아이템 추가
			menuFile.add(getMenuNew());
			menuFile.add(getMenuItemOpen());
			menuFile.add(getMenuItemSave());
			menuFile.add(new JSeparator());
			menuFile.add(getMenuItemExit());
		}
		return menuFile;
	}
	
	// 도움말 메뉴 생성
	public JMenu getMenuHelp() {
		if(menuHelp == null) {
			menuHelp = new JMenu("도움말");
		}
		return menuHelp;
	}
	
	// 새로 만들기 서브 메뉴 생성
	public JMenu getMenuNew() {
		if(menuNew == null) {
			menuNew = new JMenu("새로 만들기");
			// 메뉴 아이템 추가
			menuNew.add(getMenuItemNewFile());
			menuNew.add(getMenuItemNewFolder());
		}
		return menuNew;
	}
	
	// 새 파일 메뉴 아이템 생성
	public JMenuItem getMenuItemNewFile() {
		if(menuItemNewFile == null) {
			menuItemNewFile = new JMenu("새 파일");
		}
		return menuItemNewFile;
	}
	
	// 새 폴더 메뉴 아이템 생성
	public JMenuItem getMenuItemNewFolder() {
		if(menuItemNewFolder == null) {
			menuItemNewFolder = new JMenu("새 폴더");
		}
		return menuItemNewFolder;
	}
	
	// 파일 열기 메뉴 아이템 생성
	public JMenuItem getMenuItemOpen() {
		if(menuItemOpen == null) {
			menuItemOpen = new JMenuItem("파일 열기",
				new ImageIcon(getClass().getResource("open.gif")));
		}
		return menuItemOpen;
	}
	
	// 파일 열기 메뉴 아이템 생성
	public JMenuItem getMenuItemSave() {
		if(menuItemSave == null) {
			menuItemSave = new JCheckBoxMenuItem("파일 저장");
		}
		return menuItemSave;
	}
	
	// 종료 메뉴 아이템 생성
	public JMenuItem getMenuItemExit() {
		if(menuItemExit == null) {
			menuItemExit = new JCheckBoxMenuItem("종료");
		}
		return menuItemExit;
	}
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JMenuExample jFram = new JMenuExample();
				jFram.setVisible(true);
			}
		});
	}
}

 

 

(2) 이벤트 처리

   ▷ 사용자가 마우스로 메뉴 아이템을 선택하면 ActionEvent가 발생

   ▷ 메뉴 아이템에 ActionListener를 등록하여 이벤트를 처리할 수 있음

   ▷ 메뉴 아이템마다 별도의 ActionListener 추가가능, 그러나 하나만 만들어서 모든 메뉴 ActionEvent 처리가 편리 

   ▷  getSource ( )는 마우스로 선택한 JMenuItem 리턴 , getActionCommand()는 JMenuItem의 텍스트를 리턴

 

 

JCheckBoxMenuItem 선택과 해제 상태를 메시지 다이얼로그로 보여주는 예제

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class JMenuExample2 extends JFrame {
	private JMenuBar jMenuBar;
	private JMenu menuFile;
	private JMenuItem menuItemSave, menuItemExit;
	
	// 메인 윈도우 설정
	public JMenuExample2() {
		this.setTitle("JMenuExample2");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setJMenuBar(getJMenuBar());
		this.setSize(300, 200);
	}
	
	// JMenuBar 생성
	public JMenuBar getJMenuBar() {
		if(jMenuBar == null) {
			jMenuBar = new JMenuBar();
			jMenuBar.add(getMenuFile());
		}
		return jMenuBar;
	}
	
	// 파일 메뉴 생성
	public JMenu getMenuFile() {
		if(menuFile == null) {
			menuFile = new JMenu("파일");
			menuFile.add(getMenuItemSave());
			menuFile.add(getMenuItemExit());
		}
		return menuFile;
	}
	

	// 파일 저장 메뉴 아이템 생성
	public JMenuItem getMenuItemSave() {
		if(menuItemSave == null) {
			menuItemSave = new JCheckBoxMenuItem("파일 저장");
			menuItemSave.addActionListener(actionListener);
		}
		return menuItemSave;
	}
	
	// 종료 메뉴 아이템 생성
	public JMenuItem getMenuItemExit() {
		if(menuItemExit == null) {
			menuItemExit = new JCheckBoxMenuItem("종료");
			menuItemExit.addActionListener(actionListener);
		}
		return menuItemExit;
	}
	
	// 메뉴 선택 이벤트를 처리하는 ActionListener 필드 선언
	private ActionListener actionListener = new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			if(e.getSource() == menuItemSave) {
				if(menuItemSave.isSelected()) {
					JOptionPane.showMessageDialog(
						JMenuExample2.this, "해제 상태 >> 체크 상태.");					
				} else {
					JOptionPane.showMessageDialog(
							JMenuExample2.this, "체크 상태 >> 해제 상태.");				
				}
			} else if(e.getSource() == menuItemExit) {
				System.exit(0);
			}
		} 
	};
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JMenuExample2 jFram = new JMenuExample2();
				jFram.setVisible(true);
			}
		});
	}
}



 

JMenuBar을 이용해 메뉴 바를 만들어 펼쳐 기능을 추가했습니다.

 

JMenuBar를 이용하니 저희가 많이 봤던 메뉴 바가 생성되네요!!

 

더 많은 기능들에 대해서 배워볼게요~!!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형