1단계
package lotto.ch01;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class LottoFrame extends JFrame implements ActionListener {
private JButton button;
public LottoFrame() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setTitle("Lotto Game");
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button = new JButton("Game Start");
}
private void setInitLayout() {
add(button, BorderLayout.NORTH);
setVisible(true);
}
private void addEventListener() {
button.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("그림을 그려라");
}
// 테스트 코드 작성
public static void main(String[] args) {
new LottoFrame();
}
}
package lotto.ch01;
import java.util.Arrays;
import java.util.Random;
/**
* SRP - 클래스를 설계할 때의 원칙 중에 하나이다.
* 단일 책임의 원칙 (클래스는 가능한 단 하나의 책임을 가지는 것이 좋다.)
*/
public class LottoRandomNumber {
final int LOTTO_NUMBER_COUNT = 6;
// 메서드 : 6개의 랜덤 번호가 필요 (중복 제거, 정렬)
// 배열 활용
public int[] createNumber() {
int[] lottoWinNum = new int[LOTTO_NUMBER_COUNT];
Random random = new Random();
// random.nextInt(45) + 1; --> 0 ~ 44까지이므로 + 1
for (int i = 0; i < lottoWinNum.length; i++) {
lottoWinNum[i] = random.nextInt(45) + 1;
//outer for 1회차 순회 가상 값 -> 10
// 0 < 0 --> 첫번째 회차에는 반복을 하지 않음
//outer for 2회차 순회 가상 값 -> [10] [10]
for (int j = 0; j < i; j++) {
if (lottoWinNum[j] == lottoWinNum[i]) {
// 값이 중복된 상태라면 외부 for 구문의 i 값을 -1 해서
// 한번 더 반복문을 수행 시키게 한다.
i--; // --> 0
}
}
} // outer for
// 정렬 방법(오름차순)
Arrays.sort(lottoWinNum);
return lottoWinNum;
}
// 테스트 코드 작성
public static void main(String[] args) {
LottoRandomNumber lottoRandomNumber = new LottoRandomNumber();
int[] result = lottoRandomNumber.createNumber();
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
}
2단계
package lotto.ch02;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class LottoFrame extends JFrame implements ActionListener {
private int testNumber = 45;
private JButton button;
private LottoRandomNumber lottoRandomNumber;
private int[] lottoNumbers = new int[6];
public LottoFrame() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setTitle("Lotto Game");
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button = new JButton("Game Start");
lottoRandomNumber = new LottoRandomNumber();
}
private void setInitLayout() {
add(button, BorderLayout.NORTH);
setVisible(true);
}
private void addEventListener() {
button.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("그림을 그려라");
lottoNumbers = lottoRandomNumber.createNumber();
// 그림을 다시 그려라
repaint();
}
@Override
public void paint(Graphics g) {
super.paint(g);
Font f = new Font("궁서체", Font.BOLD, 20);
g.setFont(f);
g.drawString(lottoNumbers[0] + "", 100, 300);
g.drawString(lottoNumbers[1] + "", 150, 300);
g.drawString(lottoNumbers[2] + "", 200, 300);
g.drawString(lottoNumbers[3] + "", 250, 300);
g.drawString(lottoNumbers[4] + "", 300, 300);
g.drawString(lottoNumbers[5] + "", 1350, 300);
}
// 테스트 코드 작성
public static void main(String[] args) {
new LottoFrame();
}
}
package lotto.ch02;
import java.util.Arrays;
import java.util.Random;
/**
* SRP - 클래스를 설계할 때의 원칙 중에 하나이다.
* 단일 책임의 원칙 (클래스는 가능한 단 하나의 책임을 가지는 것이 좋다.)
*/
public class LottoRandomNumber {
final int LOTTO_NUMBER_COUNT = 6;
// 메서드 : 6개의 랜덤 번호가 필요 (중복 제거, 정렬)
// 배열 활용
public int[] createNumber() {
int[] lottoWinNum = new int[LOTTO_NUMBER_COUNT];
Random random = new Random();
// random.nextInt(45) + 1; --> 0 ~ 44까지이므로 + 1
for (int i = 0; i < lottoWinNum.length; i++) {
lottoWinNum[i] = random.nextInt(45) + 1;
//outer for 1회차 순회 가상 값 -> 10
// 0 < 0 --> 첫번째 회차에는 반복을 하지 않음
//outer for 2회차 순회 가상 값 -> [10] [10]
for (int j = 0; j < i; j++) {
if (lottoWinNum[j] == lottoWinNum[i]) {
// 값이 중복된 상태라면 외부 for 구문의 i 값을 -1 해서
// 한번 더 반복문을 수행 시키게 한다.
i--; // --> 0
}
}
} // outer for
// 정렬 방법(오름차순)
Arrays.sort(lottoWinNum);
return lottoWinNum;
}
// 테스트 코드 작성
public static void main(String[] args) {
LottoRandomNumber lottoRandomNumber = new LottoRandomNumber();
int[] result = lottoRandomNumber.createNumber();
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
}
3단계
package lotto.ch03;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class LottoFrame extends JFrame implements ActionListener {
private static final String INITIAL_MESSAGE = "로또 번호를 클릭하세요";
private static final String FONT_NAME = "굴림";
private static final int FONT_SIZE = 20;
private JButton button;
private LottoRandomNumber lottoRandomNumber;
private boolean isInitialState = true; // 초기 상태 플래그
private int[] currentNumbers;
public LottoFrame() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setTitle("Lotto Game");
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button = new JButton("Game Start");
lottoRandomNumber = new LottoRandomNumber();
currentNumbers = new int[LottoRandomNumber.LOTTO_NUMBER_COUNT];
}
private void setInitLayout() {
setLayout(new BorderLayout()); // 기본값
add(button, BorderLayout.NORTH);
setVisible(true);
}
private void addEventListener() {
button.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
isInitialState = false; // 상태값 변겅
currentNumbers = lottoRandomNumber.createNumber();
repaint();
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.setFont(new Font(FONT_NAME, Font.BOLD, FONT_SIZE));
if (isInitialState) {
g.drawString(INITIAL_MESSAGE, 200, 200);
} else {
for (int i = 0; i < currentNumbers.length; i++) {
g.drawString(currentNumbers[i] + "", 100 + (i * 50), 300);
}
}
}
// 테스트 코드 작성
public static void main(String[] args) {
new LottoFrame();
}
}
package lotto.ch03;
import java.util.Arrays;
import java.util.Random;
/**
* SRP - 클래스를 설계할 때의 원칙 중에 하나이다.
* 단일 책임의 원칙 (클래스는 가능한 단 하나의 책임을 가지는 것이 좋다.)
*/
public class LottoRandomNumber {
static final int LOTTO_NUMBER_COUNT = 6;
// 메서드 : 6개의 랜덤 번호가 필요 (중복 제거, 정렬)
// 배열 활용
public int[] createNumber() {
int[] lottoWinNum = new int[LOTTO_NUMBER_COUNT];
Random random = new Random();
// random.nextInt(45) + 1; --> 0 ~ 44까지이므로 + 1
for (int i = 0; i < lottoWinNum.length; i++) {
lottoWinNum[i] = random.nextInt(45) + 1;
//outer for 1회차 순회 가상 값 -> 10
// 0 < 0 --> 첫번째 회차에는 반복을 하지 않음
//outer for 2회차 순회 가상 값 -> [10] [10]
for (int j = 0; j < i; j++) {
if (lottoWinNum[j] == lottoWinNum[i]) {
// 값이 중복된 상태라면 외부 for 구문의 i 값을 -1 해서
// 한번 더 반복문을 수행 시키게 한다.
i--; // --> 0
}
}
} // outer for
// 정렬 방법(오름차순)
Arrays.sort(lottoWinNum);
return lottoWinNum;
}
// 테스트 코드 작성
public static void main(String[] args) {
LottoRandomNumber lottoRandomNumber = new LottoRandomNumber();
int[] result = lottoRandomNumber.createNumber();
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
}
'Swing' 카테고리의 다른 글
| bubble - 1 (기본 화면 완성 및 키 이벤트 처리) (0) | 2025.05.01 |
|---|---|
| Swing (Thread 활용) (0) | 2025.04.30 |
| Swing Key Listener (0) | 2025.04.29 |
| swing 이벤트 리스너 (ActionListener) - 연습 (0) | 2025.04.29 |
| swing 이벤트 리스너 (ActionListener) (0) | 2025.04.29 |