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를 이용하니 저희가 많이 봤던 메뉴 바가 생성되네요!!
더 많은 기능들에 대해서 배워볼게요~!!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

'BackEnd > Java' 카테고리의 다른 글
[java]이것이 자바다 부록 Java UI 12 (Swing을 이용한 다이얼로그) (0) | 2023.02.21 |
---|---|
[java]이것이 자바다 부록 Java UI 11 (Swing을 이용한 툴바 컴포넌트) (0) | 2023.02.20 |
[java]이것이 자바다 부록 Java UI 9 (Swing을 이용한 트리 컴포넌트) (0) | 2023.02.19 |
[java]이것이 자바다 부록 Java UI 8-1 (Swing을 이용한 테이블 컴포넌트 2) (0) | 2023.02.18 |
[java]이것이 자바다 부록 Java UI 8 (Swing을 이용한 테이블 컴포넌트 1) (0) | 2023.02.18 |