Java/Excercise

swing ch08 RunLottoGame

낭구리 2021. 9. 10. 17:01
package ch08;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class LottoFrame extends JFrame implements ActionListener{

	JButton button; //맴버변수 초기화시키기
	LottoPanel lottoPanel;
	LottoNumber lottoNumber;
	//변수 선언, 초기화
	int[] lotto = new int[LottoNumber.LOTTO_NUMBER_SIZE];
	//LottoNumber 가 대문자 이기때문에 호출을 할수있는 것도 스태틱만 가능한데
	//LOTTO_NUMBER_SIZE 가 스태틱으로 바꾸어 놓아서 호출이 가능
	
	
	public LottoFrame() {
		initData();
		setInitLayout();
		addEventListener();
	}
	
	private void initData() {
		setTitle("로또 번호 생성기");
		setSize(600, 400);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		button = new JButton("++로또 번호 생성하기++");
		lottoPanel = new LottoPanel(); //메모리 올리기
		lottoNumber = new LottoNumber();
	}
	
	private void setInitLayout() {
		setVisible(true);
		setBackground(Color.gray);
		add(button, BorderLayout.NORTH);
		add(lottoPanel, BorderLayout.CENTER);
		
	}
	
	private void addEventListener() {
		button.addActionListener(this); //addActionListener를 임플리먼트해서 this 사용가능
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		lotto =  lottoNumber.getLottoNumber();
		repaint();
	}

	private class LottoPanel extends JPanel {
		@Override
		public void paint(Graphics g) {
			Font font = new Font("궁서체", Font.BOLD,20);
			g.setFont(font);
			
			if(lotto[0] == 0) {
				g.drawString("로또 버튼을 클릭하세요", 180,180 );				
				return;
			}
			int xPosition = 150;
			for (int i = 0; i < lotto.length; i++) {
				g.drawString(lotto[i]+ "",	 xPosition, 150);
				xPosition += 50;
			}
		}
	}
	
	
	//테스트 코드
//	public static void main(String[] args) {
//		new LottoFrame();
//	}
	
}

 

 

package ch08;

import java.util.Arrays;
import java.util.Random;

public class LottoNumber {

	static final int LOTTO_NUMBER_SIZE= 6;
	//힙에 미리 올라간 static(태양)이기때문에 클래스가 다르더라도 사용을 할수있다.
	//number print 참고
	
	public  int[]  getLottoNumber() {
		//번호를 담을 공간 만들기
		int[] numbers = new int[LOTTO_NUMBER_SIZE];
		Random random = new Random();
		
		for (int i = 0; i < numbers.length; i++) {
			int selectedNumber = random.nextInt(45) + 1;
			numbers[i] = selectedNumber;
			
			for(int j= 0; j<i; j++) {
				if(numbers[i] == numbers[j]) {
					i= i-1;
					break;
				}
			}
		}
		//배열 정렬
		Arrays.sort(numbers);
		return numbers;
	}
	
	//테스트코드
//	public static void main(String[] args) {
//		int[] nums = LottoNumber.getLottoNumber();
//
//		for (int i  : nums ) {
//			System.out.println( " i :" +i);
//		}
//	}
}

 

package ch08;

public class RunLottoGame {

	public static void main(String[] args) {

		new LottoFrame();
		
	}

}

'Java > Excercise' 카테고리의 다른 글

javaio ch01 SysteminTest  (0) 2021.09.13
swing ch09 Play1945  (0) 2021.09.10
swing ch07 MainTest lotto  (0) 2021.09.10
callback ch05 Phonebook  (0) 2021.09.10
callback ch04 News  (0) 2021.09.09