-
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