2022 한국 축구 구단 관리 프로그램
사용 언어 : java (jdk 12.0.2)
사용 툴 : eclipse
데이터베이스 : 오라클
공통 프레임 UI 셋팅
public MainPlayerFrame(String title) {
setTitle(title);
setSize(1000, 600);
setLocation(570, 240);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLayout(null);
Container c = getContentPane();
c.setBackground(Color.LIGHT_GRAY);
panCenter = new JPanel();
panCenter.setBackground(new Color(0xEDEDED));
panCenter.setBounds(0, 40, 1000, 600);
MainInfopanel = new JPanel();
MainInfopanel.setBackground(new Color(0xEDEDED));
MainInfopanel.setBounds(10, 80, 440, 450);
MainInfopanel.setBorder(new TitledBorder(new LineBorder(Color.LIGHT_GRAY,1)));
SubInfopanel = new JPanel();
SubInfopanel.setBackground(new Color(0xEDEDED));
SubInfopanel.setBounds(535, 80, 440, 450);
SubInfopanel.setBorder(new TitledBorder(new LineBorder(Color.LIGHT_GRAY,1)));
//맨위 버튼 ---------------------------------------------------------
btn1 = new JButton("후보 선수 관리");
btn1.setBounds(10, 10, 120, 30);
btn1.setBackground(new Color(0xCECECE));
btn1.setBorderPainted(false); // 버튼 테두리 없애기
btn1.addActionListener(this);
btn2 = new JButton("선발 선수 관리");
btn2.setBounds(140, 10, 120, 30);
btn2.setBackground(new Color(0xEDEDED));
btn2.setBorderPainted(false); // 버튼 테두리 없애기
btn2.addActionListener(this);
btn3 = new JButton("포메이션");
btn3.setBounds(270, 10, 120, 30);
btn3.setBackground(new Color(0xCECECE));
btn3.setBorderPainted(false); // 버튼 테두리 없애기
btn3.addActionListener(this);
btn4 = new JButton("부상자 관리");
btn4.setBounds(400, 10, 120, 30);
btn4.setBackground(new Color(0xCECECE));
btn4.setBorderPainted(false); // 버튼 테두리 없애기
btn4.addActionListener(this);
btn5 = new JButton("선수 사진");
btn5.setBounds(530, 10, 120, 30);
btn5.setBackground(new Color(0xCECECE));
btn5.setBorderPainted(false); // 버튼 테두리 없애기
btn5.addActionListener(this);
btn6 = new JButton("경기장");
btn6.setBounds(660, 10, 120, 30);
btn6.setBackground(new Color(0xCECECE));
btn6.setBorderPainted(false); // 버튼 테두리 없애기
btn6.addActionListener(this);
btn7 = new JButton("식단");
btn7.setBounds(790, 10, 80, 30);
btn7.setBackground(new Color(0xCECECE));
btn7.setBorderPainted(false); // 버튼 테두리 없애기
btn7.addActionListener(this);
btn8 = new JButton("일정");
btn8.setBounds(880, 10, 80, 30);
btn8.setBackground(new Color(0xCECECE));
btn8.setBorderPainted(false); // 버튼 테두리 없애기
btn8.addActionListener(this);
add(btn1);
add(btn2);
add(btn3);
add(btn4);
add(btn5);
add(btn6);
add(btn7);
add(btn8);
과제의 기술내용
-프론트 엔드 -
모든 java파일에 JFrame를 extends하여 java-swing을 활용하였습니다. 각 각의 파일은 하나의 프로그램에서 작동하는 것처럼 보이기 위해 최상위 컨테이너에 담긴 모든 배치관리자를 setLayout(null)으로 설정하고 모든 객체를 setBounds()을 활용해 레이아웃의 객체들을 담고 각각의 좌표를 지정하는 방식으로 swing의 GUI를 최대한으로 활용하도록 설계 하였습니다. 세부적으로는 각 각의 java파일의 Frame마다 공통적으로 있는 다른 java파일로 이동하는 상단 버튼을 배치하여 하나의 프로그램으로 매끄럽게 연결 하였습니다. 화면의 구성요소로는 선발, 후보선수 관리(MainPlayerFrame, SubPlayFrame.java)는 연결되어 DB에 있는 선수들을 사용자에게 보여주고 선발 선수를 자신의 생각대로 구성할 수 있습니다. 이후 상단 버튼에 포메이션(FormationFrame.java)으로 넘어가면 기존에 사용자가 선발 선수로 기용한 선수들이 전술판에 등장하여 위치를 자유롭게 지정할 수 있습니다. 다른 버튼들은 부상자관리(InjuryPlatyerFrame.java, InjurySelect.java), 선수 사진(PicplayerFrame .java), 경기장(StadiumFrame.java), 식단(OrderFrame.java), 일정(ScheduleFrame.java)등의 java파일과 이어지고 각 각 부상자에 대한 부상정보 확인 및 부상자 추가, 대표팀 전체의 개별 프로필 사진과 감독 프로필 사진 확인, 월드컵 경기장의 대한 사진과 정보, 선수들의 식단, 대표팀 일정 등을 확인 할 수 있는 캘린더를 배치 및 구성하였습니다.
- 백 엔드 -
java의 이벤트 리스너(Event Listener)를 활용하여 이벤트 소스에서 이벤트가 발생하는지를 검사하고 있다가 이벤트가 발생이 되면 실제적으로 이벤트를 처리할 수 있도록 ActionListener, MoustListener, KeyListener, MouseListener, MouseMotionListener를 implements하여 메소드를 오버라이딩(재정의)하여 사용하여 개발하였습니다. Oracle은 대표팀 선수들의 명단과 상세 정보를 연동을 위하여 사용헸습니다. Jatlbe을 이용하여 데이터베이스에서 가져온 선수들의 명단을 출력시키고 KeyListner를 사용하여 선수들의 이름을 기준으로 타이핑된 글자와 비교하여 검색할 수 있도록 기능을 구현했습니다. 후보 선수로 등록하고 싶은 선수의 정보를 입력하여 DB에 저장할 수 있고 JoptionPane 기능으로 예외적인 상황을 Dialog로 사용자에게 메시지를 전달하여 처리하였습니다. Model 클래스를 활용, 식단과 사진 등의 리스트를 관리하고 ListSelectionEvent를 활용하여 추가적인 기능을 확장하였습니다. Calendar 클래스와 JButton을 조합, ActionListener를 활용하여 현재 DeskTop이 Default로 지정한 웹 브라우저를 사용해 연결된 URL로 연결되거나 특정 날짜마다 메모를 기록할 수 있는 기능 등이 있는 특별한 캘린더를 구현하였습니다. FileReader, FileWriter, FileDialog 등의 클래스로 컴퓨터의 파일을 업로드 할 수 있게 하여 선수 추가, 일정 추가 등 이후 프로그램의 확장성을 고려하였습니다. 레이아웃 전환 과정은 dispose() 기능을 활용하여 새로운 창이 열림과 동시에 기존 창이 닫히게 하여 매끄러운 연결을 구현했고 MouseEvenet를 적재 장소에 등록하여 시스템의 편리함을 더하였습니다.
- 데이터 베이스 -
Oracle을 이용하여 후보선수 레이아웃에서 입력받은 선수정보를 DB에 있는 테이블의 컬럼의 도메인과 비교 후 저장하게 됩니다. 이렇게 저장된 선수는 후보선수 레이아웃에서 선발선수로 이동 버튼을 눌러 선발 선수로 등록하거나 삭제 버튼을 눌러 DB에서 제거할 수 있습니다. 선수 사진 레이아웃에서는 선발 선수와 후보 선수의 구성을 가져와 포메이션별, 선발 기준별로 사진을 볼 수 있게 질의 문을 작성했습니다. 부상선수 레이아웃에서는 현재 대표팀 명단 선수 리스트에서 선수를 골라서 부상 부위, 부상 증상 등을 입력하여 부상 선수에 추가하고 해당 선수는 선발 선수 테이블에서 빠지도록 하였습니다. 추가로 부상 선수 리스트에서 선수를 검색 및 선택하여 삭제할 수 있고 해당 선수는 후보 선수로 돌아올 수 있는 기능을 구현하였습니다.
첫 블로그 첫 게시물입니다. 필자는 대학생이고 제 자신이 너무나 부족한 걸 잘 알고 있습니다. 발전하고자 하는 취지로 포트폴리오 작성해가는 연습이오니 코드가 스파게티여도 너그럽게 봐주세요…!
'자바 스윙 (Java Swing)' 카테고리의 다른 글
Java Swing (6) 한국 축구 구단 관리 프로그램 (자바 스윙 프로젝트) (0) | 2023.01.02 |
---|---|
Java Swing (5) 한국 축구 구단 관리 프로그램 (자바 스윙 프로젝트) (2) | 2023.01.02 |
Java Swing (4) 한국 축구 구단 관리 프로그램 (자바 스윙 프로젝트) (0) | 2023.01.01 |
Java Swing (3) 한국 축구 구단 관리 프로그램 (자바 스윙 프로젝트) (0) | 2023.01.01 |
Java Swing (2) 한국 축구 구단 관리 프로그램 (자바 스윙 프로젝트) (0) | 2023.01.01 |