import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/*
 *  [1] JMenuBar 에 등록 : [File], [Edit], [View], [Help]
 *    1) [View] 메뉴 클릭 시 - [Show], [Hidden] 서브 메뉴(메뉴 아이템)
 *    2) [File] 메뉴 클릭 시 - [New], [Notepad], [Calc], [msPaint], [Exit] 메뉴아이템
 *       - 단, [New] 메뉴 아래에 구분선 삽입, [msPaint] 메뉴 아래에도 구분선 삽입
 *       - [Exit] 메뉴 선택 시 : 종료 확인 다이얼로그(예/아니오 버튼) -> "예" 버튼 누르면 프로그램 종료
 */
public class Menu extends JFrame{
 JPanel p = new JPanel();
 JLabel imglbl = new JLabel(); // 이미지를 출력할 라벨 생성
 
 Menu() {
  this.setTitle("나만의 프로그램");
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setSize(800, 700);
  
  //=============================== 메뉴바와 메뉴아이템 생성하는 메소드 호출 ===============================
  createMenu();
  // ========================================================================================
  p.setLayout(new BorderLayout()); // 동서남북, 가운데 방향 지정
  p.add(imglbl, BorderLayout.CENTER); // 이미지 라벨을 가운데에 출력
  this.setContentPane(p); // 프레임의 컨테이너로 패널을 부착
  this.setVisible(true); // 화면 보이기
 }
 
  void createMenu() {
   // 메뉴바 생성
   JMenuBar mb = new JMenuBar();
   // [File], [Edit], [View], [Help] 메뉴 생성
   JMenu fileMenu = new JMenu("File");
   // 배열을 이용해 메뉴아이템 생성, 액션리스너 달기 [New], [Notepad], [Calc], [msPaint], [Exit]
   JMenuItem[] menuItem = new JMenuItem[5];
   String[] menuTitle = {"새로만들기", "메모장", "계산기", "그림판", "끝내기"};
   for(int i=0; i<menuItem.length; i++) {
    menuItem[i] = new JMenuItem(menuTitle[i]); // 문자열 갖는 메뉴아이템 생성
    menuItem[i].addActionListener(new ShowAction()); // actionPerformed() 메소드가 실행
    fileMenu.add(menuItem[i]);
    if(i==0 || i==3) { // 파일 메뉴의 메뉴아이템 0번, 3번 아래에 구분선 삽입하기
     fileMenu.addSeparator();
    }
    
   }
   //================================================================================
   JMenu editMenu = new JMenu("Edit");
   
   JMenu viewMenu = new JMenu("View");
   // 액션리스너 달기 : [Show], [Hidden] 메뉴 아이템 부착
   JMenuItem showItem = new JMenuItem("Show");
   showItem.addActionListener(new ShowAction()); // actionPerformed() 메소드가 실행
   viewMenu.add(showItem);
   
   viewMenu.addSeparator(); // 분리선 삽입
   
   JMenuItem hiddenItem = new JMenuItem("Hidden");
   hiddenItem.addActionListener(new ShowAction()); // actionPerformed() 메소드가 실행
   viewMenu.add(hiddenItem);
   //=================================================================================
   JMenu helpMenu = new JMenu("Help");
   
   // 메뉴바에 생성한 메뉴 등록하기
   mb.add(fileMenu);  mb.add(editMenu);
   mb.add(viewMenu); mb.add(helpMenu);
   // 프레임에 메뉴바 부착하기
   this.setJMenuBar(mb);
  }
  class ShowAction implements ActionListener {
   public void actionPerformed(ActionEvent e) {
    String cmd = e.getActionCommand(); // 선택한 메뉴 아이템의 문자열 리턴
    switch(cmd) {
    case "Show" : // 이미지 보이기
     imglbl.setIcon(new ImageIcon("a.jpg"));
     imglbl.setVisible(true);
     break;
    case "Hidden" : // 이미지 감추기
     imglbl.setVisible(false);
     break;
    // "새로만들기", "메모장", "계산기", "그림판", "끝내기"
    case "새로만들기" :
     imglbl.setIcon(null); // 이미지 출력하는 라벨 초기화
     break;
    case "메모장" :
     try { // 메모장 프로그램 가져와 실행하기
      Process ps1 = Runtime.getRuntime().exec("c:\\windows\\notepad.exe");
     }catch(IOException e1) { // 파일이 없거나 예외사항이 발생하면
      System.out.println("파일이 없습니다.");
     }
     break;
    case "계산기" : 
     try { // 메모장 프로그램 가져와 실행하기
      Process ps1 = Runtime.getRuntime().exec("c:\\windows\\system32\\calc.exe");
     }catch(IOException e1) { // 파일이 없거나 예외사항이 발생하면
      System.out.println("파일이 없습니다.");
     }
     break;
    case "그림판" :
     try { // 메모장 프로그램 가져와 실행하기
      Process ps1 = Runtime.getRuntime().exec("c:\\windows\\system32\\mspaint.exe");
     }catch(IOException e1) { // 파일이 없거나 예외사항이 발생하면
      System.out.println("파일이 없습니다.");
     }
     break;
    case "끝내기" :
     // JOptionPane.showConfirmDialog( null, "출력메세지", "타이틀", "버튼종료");
     int result = JOptionPane.showConfirmDialog(null, "끝내시겠습니까?", "종료", JOptionPane.YES_NO_OPTION);
     if(result==JOptionPane.CANCEL_OPTION) {
      // [X] 버튼 누른 경우
      break;
     }
     else if(result==JOptionPane.YES_OPTION) {
      System.exit(0); // 예 버튼 누른 경우
      break;
     }
     else {
      break; // 아니오 버튼 누른 경우
     }
    }
   }
  }
  
 public static void main(String[] args) {
  new Menu();
 }

 

+ Recent posts