자바 스윙 (Java Swing)

Java Swing (7) 리뷰 포함 한국 축구 구단 관리 프로그램 (자바 스윙 프로젝트)

s_hoonee 2023. 1. 2. 12:16
반응형

2022 한국 축구 구단 관리 프로그램

(7) 일정

기능

1. 날짜마다 메모를 저장할 수 있고 바탕화면에 .txt 파일로 메모가 저장됩니다. 

for (int i = 0; i < buttons.length; i++) {
			buttons[i] = new JButton();
			buttons[i].setBackground(new Color(0xEDEDED));
			panel2.add(buttons[i]);
			buttons[i].addActionListener(this);

			if (i < 7) 
			{
				buttons[i].setText(dotw[i]);
				buttons[i].setFont(new Font("monospaced", Font.BOLD, 16));
				panel2.add(buttons[i]);

				if (buttons[i] == buttons[0]) {
					buttons[i].setForeground(Color.RED); // '일요일'의 색을 빨간색으로 지정
				}

				if (buttons[i] == buttons[6]) {
					buttons[i].setForeground(Color.BLUE); // '토요일'의 색을 파란색으로 지정
				}
			} 
			
			else 
			{
				buttons[i].setFont(new Font("monospaced", Font.PLAIN, 14));

				if (i % 7 == 6) // 토요일
				{
					buttons[i].setForeground(Color.BLUE);

				}
				else if (i % 7 == 0) // 일요일
				{
					buttons[i].setForeground(Color.RED);

				}
			}
		}
		
		calSet();
			
		for (int i = 0; i < buttons.length; i++) {
			if ( buttons[i].getText().equals("")) {
				buttons[i].setEnabled(false);
			} else
				buttons[i].setEnabled(true);
		}
		
		Edgepanel.add(panel2);
		add(panCenter);
//메모장 버튼 및 레이블 ---------------------------------------------------		
		memoday = new JLabel();
		memoday.setBounds(10, 10, 200, 30);
		Edgepanel2.add(memoday);
				
		tf = new JTextField();
		tf.setBounds(10, 50, 415, 270);
		Edgepanel2.add(tf);			
			
		memosave = new JButton("메모 저장");
		memosave.setBounds(110, 360, 90, 30);
		memosave.addActionListener(this);
		memosave.setBackground(Color.LIGHT_GRAY);
		Edgepanel2.add(memosave);	
		
		memodelete = new JButton("메모 삭제");
		memodelete.setBounds(240, 360, 90, 30);
		memodelete.addActionListener(this);
		memodelete.setBackground(Color.LIGHT_GRAY);
		Edgepanel2.add(memodelete);	
			
		setVisible(true);
	}

	
	// 달력 값을 관리하는 기본 메소드
	private void calManage() {
		calendar = Calendar.getInstance();
		year = calendar.get(Calendar.YEAR);
		month = calendar.get(Calendar.MONTH) + 1;
	}

	// 달력의 값을 변경하는 메소드
	private void calUpdate() {
		for (int i = 7; i < buttons.length; i++) // 요일의 값은 그대로 두고 일자의 값만 바꿔야 하기 때문에 초기값을 7로 설정
		{
			buttons[i].setText(""); // 달력의 값을 지움
		}

		calSet(); // 달력의 값을 다시 등록
		day.setText("  " + year + "년 " + month + "월 구단 일정  ");
	}

	// 달력의 연도를 바꾸는 메소드
	private void calChange() {
		if (month <= 0)
		{
			month = 12;
			year--;
		} 
		else if (month >= 13) 
		{
			month = 1;
			year++;
		}
	}

	// 달력에 날짜를 등록하는 메소드
	private void calSet() {
		calendar.set(year, month - 1, 1);
		int firstDay = calendar.get(Calendar.DAY_OF_WEEK) - 1;
		for (int i = 1; i <= calendar.getActualMaximum(Calendar.DATE); i++) { // getActualMaximum = 그 달의 값을 얻어옴				
			{
				buttons[6 + firstDay + i].setText(Integer.toString(i));
			}

		}

	}

	@Override
	public void actionPerformed(ActionEvent e) {
		Object obj = e.getSource();
				
		if (obj == beforeButton) {
			month -= 1;
			calChange();
			calUpdate();
			for (int i = 0; i < buttons.length; i++) {
				if ( buttons[i].getText().equals("")) {
					buttons[i].setEnabled(false);
				} else
					buttons[i].setEnabled(true);
			}

		}
		if (obj == afterButton) {
			month += 1;
			calChange();
			calUpdate();
			for (int i = 0; i < buttons.length; i++) {
				if ( buttons[i].getText().equals("")) {
					buttons[i].setEnabled(false);
				} else
					buttons[i].setEnabled(true);
			}
		} 
        
 //메모 바탕화면에 저장 ------------------------------------------------				
		if ( obj == memosave) {
				//날짜 선택 안할 경우
				if( clickday == null) {
					JOptionPane.showMessageDialog(this, "날짜를 선택해주세요.");
					return;
				//메모장이 빈 칸일 경우
				} else if (tf.getText().equals("")) {
					JOptionPane.showMessageDialog(this, "메모를 입력해주세요.");
					return;
				}
			
				String text = ""+tf.getText()+"";
				String fileNm = "C:\\Users\\mycom\\Desktop\\" + month +"월"+ clickday +"일 일정.txt";
				
				
				FileWriter fileWrite;
				try {
					File file = new File(fileNm);
					fileWrite = new FileWriter(file);
										
					fileWrite.write(text);
					fileWrite.flush(); 
					fileWrite.close();
					JOptionPane.showMessageDialog(this, "메모가 저장되었습니다.");
					fileWrite.close();
				} catch (IOException e1) {
					System.out.println("오류");
					e1.printStackTrace();
				}

			} else if ( obj == memodelete) {
				//날짜 선택 안할 경우
				if( clickday == null) {
					JOptionPane.showMessageDialog(this, "날짜를 선택해주세요.");
					return;																
				}
				
				String fileNm = "C:\\Users\\mycom\\Desktop\\" + month +"월"+ clickday +"일 일정.txt";
				File file = new File(fileNm);
				
				if( file.exists() ){ //파일존재여부확인	    			
		    		if(file.delete()){
		    			if(JOptionPane.showConfirmDialog(this, "메모를 삭제하시겠습니까?", "삭제", 
		    					JOptionPane.YES_NO_OPTION, 
		    					JOptionPane.WARNING_MESSAGE)== JOptionPane.YES_OPTION ) {
		    				JOptionPane.showMessageDialog(this, "메모가 삭제되었습니다.");
		    			}
		    			tf.setText("");
		    		}else{
		    			System.out.println("파일삭제 실패");
		    		}	    		
		    	} else{
		    		JOptionPane.showMessageDialog(this, "저장된 메모가 없습니다.");
		    	}
				
			}
	}

 

모든 기능을 포함하진 않고 몇개만 간략하게 뽑았습니다. 자세한 코드가 궁금하신 분은 댓글에 알려주세요!

 

 

 

한국 구단 관리 프로그램 업로드는 여기까지 입니다 자바 스윙으로 간단한 UI 작업과 이벤트 리스너 등록으로 기능을 추가할 수 있어서 프론트 엔드, 백엔드를 동시에 체험해 볼 수 있었습니다.

아직 코딩이 익숙하지 않은 분들 중 처음으로 자신만의 아이디어로 직접 무언가를 만들어보고 싶으신 분들께 스윙을 추천하고 싶습니다.