ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 03. 메인 페이지
    [Java] 단축키 안내 프로그램 2021. 2. 17. 15:50

    안녕하세요 Becca입니다!

     

    단축키 안내 프로그램의 세 번째 시간입니다.

    이번 글에서는 메인 페이지를 만들어보도록 하겠습니다.


    메인 페이지는 프로그램을 실행시켰을 때 가장 먼저 볼 수 있는 화면입니다.

    그러면, 나중에 만들 단축키 사전과 단축키 검색 패널(Panel)으로 이동할 수 있어야 합니다.

    그리고, 저번 시간에 타이틀바를 삭제하여 프레임을 종료시키지 못하는 문제도 해결해야 합니다.

    [메인 페이지 생성]

    main_page 패키지에서 Mainpg 클래스를 생성합니다.

    (main_page 패키지에서 우클릭 → New → Class)

     

     

    [메인 페이지 Panel]

    1. javax.swing.* / java.awt.* / java.awt.event.* 을 import 합니다.

     

    package main_page;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class Mainpg
    {
    
    }

     

     

    2. Mainpg 클래스에 JPanel을 상속받습니다.

     

    public class Mainpg extends JPanel
    {
    
    }

     

     

    3. Mainpg() 생성자의 매개변수를 mframe로 하고, 아래 코드를 작성합니다.

     

    public class Mainpg extends JPanel
    {
    	private MainFrame mf;
    
    	public Mainpg(MainFrame mframe)
    	{
    		this.mf = mframe; // MainFrame 정보를 저장
    		setLayout(null); // 배치관리자 제거
    	}
    }

     

     

    4. Dictionary와 Search 버튼을 생성하고 크기, 위치, 글씨체를 설정해줍니다.

    4. - 크기, 위치를 설정하는 이유는 배치관리자를 제거하였기 때문입니다.

    4. - 배치관리자를 제거하면 버튼이 보이지 않거나 겹치기 때문에 크기, 위치를 설정해야 합니다.

    4. - 글씨체는 나중에 디자인을 하면 삭제할 것이므로 하지 않아도 무관합니다.

     

    public class Mainpg extends JPanel
    {
    	private MainFrame mf;
    
    	public Mainpg(MainFrame mf)
    	{
    		this.mf = mf;
    		setLayout(null);
    		
    		// Dictionary 버튼
    		JButton dict = new JButton("Dictionary"); // 버튼 생성
    		
    		dict.setSize(250, 70); // 버튼의 크기
    		dict.setFont(new Font("나눔바른고딕", Font.PLAIN, 30)); // 버튼의 글씨체, 스타일, 크기
    		dict.setLocation(170, 450); // 버튼의 위치
    		
    		dict.addActionListener(new DictionaryBtn()); // event
    		add(dict); // 패널에 버튼 추가
    		
    		// Search 버튼
    		JButton search = new JButton("Search");
    		
    		search.setSize(250, 70);
    		search.setFont(new Font("나눔바른고딕", Font.PLAIN, 30));
    		search.setLocation(680, 450);
    		
    		search.addActionListener(new SearchBtn());
    		add(search);
    	}
    	
    	// Dictionary 버튼 이벤트
    	class DictionaryBtn implements ActionListener 
    	{
    		public void actionPerformed(ActionEvent e) 
    		{
                
    		}
    	}
    	
    	// Search 버튼 이벤트
    	class SearchBtn implements ActionListener 
    	{ 
    		public void actionPerformed(ActionEvent e) 
    		{
                
    		}
    	}
    }

     

     

    5. X 버튼을 생성하고, Mainpg() 생성자 위에 ExitDialog를 선언해줍니다.

    5. 그리고, X 버튼을 클릭했을 때의 event로 ExitDialog를 생성하고 보이도록 합니다.

     

    public class Mainpg extends JPanel
    {
    	private MainFrame mf;
    	
    	private ExitDialog ed; // 종료 여부를 묻는 다이얼로그
    	
    	public Mainpg(MainFrame mf)
    	{
    		/* 생략 */
        
    		// Exit 버튼
    		ed = null;
    		
    		JButton exit = new JButton("X");
    		
    		exit.setSize(45, 45);
    		exit.setLocation(1025, 30);
    
    		exit.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e)
    			{
    				ed = new ExitDialog(mframe, "Exit"); // ExitDialog 생성
    				ed.setVisible(true); // 화면에 보이도록 함
    			}
    		});
    		add(exit);
    	}
    }

     

     

    6. X 버튼을 클릭했을 때 ExitDialog를 생성하는 과정에서 이 코드로 넘어오게 됩니다.

    6. - ExitDialog() 생성자는 5번에서 ExitDialog를 생성할 때 넣은 매개변수(인자)를 받아올 수 있도록 합니다.

    6. - super()를 사용하여 다이얼로그 창이 뜰 프레임, 다이얼로그의 타이틀을 위에서 받아온 매개변수로 지정합니다.

    6. - 버튼을 만들고 추가하는 과정은 4번과 같습니다.

    6. - 종료 버튼을 누르면 프로그램이 종료되고, 취소 버튼을 누르면 다이얼로그 창만 사라지도록 합니다.

    과정 : X 버튼 클릭 → 5번, ExitDialog 생성6번, ExitDialog에 버튼 추가5번, 다이얼로그가 화면에 보이도록

     

    /* Dictionary, Search 버튼 이벤트 아래에 위치 */
    
    // 종료 여부를 묻는 다이얼로그
    private class ExitDialog extends JDialog
    {
    	public ExitDialog(JFrame fr, String title)
    	{
    		super(fr, title, true); // JFrame, 타이틀, modal(모달) 다이얼로그
    			
    		// 종료 버튼
    		JButton exit_btn = new JButton("종료");
    
    		exit_btn.setSize(100, 40);
    		exit_btn.setFont(new Font("나눔바른고딕", Font.PLAIN, 20));
    		exit_btn.setLocation(50, 100);
    			
    		exit_btn.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e)
    			{
    				// 종료 버튼을 눌렀을 때 시스템 종료
    				System.exit(0);
    			}
    		});
    		this.add(exit_btn); // 다이얼로그에 버튼 추가
    			
    		// 취소 버튼
    		JButton cancle_btn = new JButton("취소");
    
    		cancle_btn.setSize(100, 40);
    		cancle_btn.setFont(new Font("나눔바른고딕", Font.PLAIN, 20));
    		cancle_btn.setLocation(200, 100);
    			
    		cancle_btn.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e)
    			{
    				// 취소 버튼을 누를 경우 보이지 않게 하고, 객체 삭제
    				setVisible(false);
    				ed = null;
    			}
    		});
    		this.add(cancle_btn);
    	}
    }

     

     

    7. mf를 이용하여 프레임이 움직이더라도 다이얼로그 창이 가운데에 위치하도록 합니다.

    (mf는 메인 프레임이므로 프레임의 현재 위치를 알 수 있습니다.)

     

    private class ExitDialog extends JDialog
    {
    	public ExitDialog(JFrame fr, String title)
    	{
    		/* 생략 */
        
    		setLayout(null); // 배치관리자 삭제
    		setSize(350, 200);
    
    		setLocation(getWidth() / 2 + 210 + mf.getLocation().x, 
    			getHeight() / 2 + 120 + mf.getLocation().y);
    		// 다이얼로그의 위치를 프레임의 가운데에 띄우도록 하는 코드
    		// 프레임이 움직이더라도 다이얼로그가 가운데 뜨도록 함
    	}
    }

     

    [메인 프레임 추가]

    프레임에서 메인 페이지를 보이도록 해야 하므로 MainFrame의 코드를 아래와 같이 바꿔줍니다.

     

    public class MainFrame extends JFrame
    {
    	private Mainpg m_pg = null; // Mainpg 불러오기
        
    	/* 생략 */
    
    	public static void main(String[] args) 
    	{
    		MainFrame mf = new MainFrame(); // MainFrame 생성
    		mf.m_pg = new Mainpg(mf); // Mainpg 생성
    		mf.add(mf.m_pg); // MainFrame에 Mainpg 추가
    		mf.revalidate(); // 프레임 새로 고침
    		mf.repaint(); // 프레임 다시 그리기
    		mf.m_pg.requestFocusInWindow(); // Mainpg 포커스 강제 설정
    	}
    }

     

     

    여기까지 작성하셨다면 메인 페이지와 ExitDialog의 모습이 아래 사진처럼 나올 것입니다.

    - Dictionary 버튼과 Search 버튼은 눌러도 아무 반응이 없고, X 버튼을 누르면 다이얼로그 창이 나와야 합니다.

    - Exit 다이얼로그 창에서 종료, 취소 버튼이 보여야 합니다.

    - 종료 버튼을 누르면 프로그램이 종료되고, 취소 버튼을 누르면 다이얼로그 창만 사라져야 합니다.

     

     

     

    [메인 페이지 전체 코드]

    package main_page;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class Mainpg extends JPanel
    {
    	private MainFrame mf;
    	
    	private ExitDialog ed;
    	
    	public Mainpg(MainFrame mframe)
    	{
    		this.mf = mframe;
    		setLayout(null);
    		
    		// Dictionary 버튼
    		JButton dict = new JButton("Dictionary");
    		
    		dict.setSize(250, 70);
    		dict.setFont(new Font("나눔바른고딕", Font.PLAIN, 30));
    		dict.setLocation(170, 450);
    		
    		dict.addActionListener(new DictionaryBtn());
    		add(dict);
    		
    		// Search 버튼
    		JButton search = new JButton("Search");
    		
    		search.setSize(250, 70);
    		search.setFont(new Font("나눔바른고딕", Font.PLAIN, 30));
    		search.setLocation(680, 450);
    		
    		search.addActionListener(new SearchBtn());
    		add(search);
    		
    		// Exit 버튼
    		ed = null;
    		
    		JButton exit = new JButton("X");
    		
    		exit.setSize(45, 45);
    		exit.setLocation(1025, 30);
    		
    		exit.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e)
    			{
    				ed = new ExitDialog(mframe, "Exit");
    				ed.setVisible(true);
    			}
    		});
    		add(exit);
    	}
    	
    	// Dictionary 버튼 이벤트
    	class DictionaryBtn implements ActionListener 
    	{
    		public void actionPerformed(ActionEvent e) 
    		{
                
    		}
    	}
    	
    	// Search 버튼 이벤트
    	class SearchBtn implements ActionListener 
    	{ 
    		public void actionPerformed(ActionEvent e) 
    		{
                
    		}
    	}
    	
    	// 종료 여부를 묻는 다이얼로그
    	private class ExitDialog extends JDialog
    	{
    		public ExitDialog(JFrame fr, String title)
    		{
    			super(fr, title, true);
    			
    			// 종료 버튼
    			JButton exit_btn = new JButton("종료");
    
    			exit_btn.setSize(100, 40);
    			exit_btn.setFont(new Font("나눔바른고딕", Font.PLAIN, 20));
    			exit_btn.setLocation(50, 100);
    			
    			exit_btn.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e)
    				{
    					// 종료 버튼을 눌렀을 때 시스템 종료
    					System.exit(0);
    				}
    			});
    			this.add(exit_btn);
    			
    			// 취소 버튼
    			JButton cancle_btn = new JButton("취소");
    
    			cancle_btn.setSize(100, 40);
    			cancle_btn.setFont(new Font("나눔바른고딕", Font.PLAIN, 20));
    			cancle_btn.setLocation(200, 100);
    			
    			cancle_btn.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e)
    				{
    					// 취소 버튼을 누를 경우 보이지 않게 하고, 객체 삭제
    					setVisible(false);
    					ed = null;
    				}
    			});
    			this.add(cancle_btn);
    
    			setLayout(null);
    			setSize(350, 200);
                
    			setLocation(getWidth() / 2 + 210 + mf.getLocation().x, 
    				getHeight() / 2 + 120 + mf.getLocation().y);
    		}
    	}
    }

    여기까지 잘 따라오셨나요?

    메인 페이지 전체를 한 페이지에 담으려니 코드가 많이 길어지게 되었습니다.

    코드가 어디에 들어가야 할지 헷갈리신다면 전체 코드를 참고해주세요.

     

    다음 글에서는 Visual Studio 단축키가 있는 사이트에서 크롤링을 하고, txt 파일로 저장해보도록 하겠습니다.

    다음 글에서 만나요!

    '[Java] 단축키 안내 프로그램' 카테고리의 다른 글

    04. 크롤링  (0) 2021.03.02
    02. 타이틀바 삭제  (0) 2021.02.09
    01. 메인 프레임  (0) 2021.01.08
    00. 프로그램 소개  (0) 2021.01.02

    댓글

Designed by Tistory.