기본 프레임 설정
package ch07;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
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();
} // end of main
} // end of class
로또 랜덤 클래스 생성 및 기능
package ch07;
import java.util.Arrays;
import java.util.Random;
// 클래스를 --> 단일 책임 원칙을 설정하는 것이 좋다
//
public class LottoRandomNumber {
final int LOTTO_NUMBER_COUNT = 6;
// 6개의 랜덤 번호를 생성하는 메서드 필요하다.
public int[] createNumber() {
int[] lottoWinNum = new int[LOTTO_NUMBER_COUNT];
Random random = new Random();
// outer for -> 0 --> inner for --> 동작 안함
// outer for -> 1 --> inner for --> 한번 동작
// outer for -> 2 --> inner for --> 두번 동작
for (int i = 0; i < lottoWinNum.length; i++) {
// 20 , 30, 20
lottoWinNum[i] = random.nextInt(45) + 1;
// 0 < 1
for(int j = 0; j < i; j++) {
// 20 == 20
if(lottoWinNum[j] == lottoWinNum[i]) {
// 값이 중복된 상태이다.
i--;
}
}
}
// 중복 제거 완료
Arrays.sort(lottoWinNum); // 오름차순으로 자동 정렬
return lottoWinNum;
}
// 코드 테스트
public static void main(String[] args) {
LottoRandomNumber randomNumber = new LottoRandomNumber();
int[] resultArray = randomNumber.createNumber();
for (int i = 0; i < resultArray.length; i++) {
System.out.println(resultArray[i]);
}
}
}
로또 클래스를 이용하여 로또 프로그램 작성
package ch07;
import java.awt.BorderLayout;
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;
public class LottoFrame extends JFrame implements ActionListener {
private JButton button;
private LottoRandomNumber lottoRandomNumber;
private boolean isStart = true;
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("그림을 그려라!");
// 이벤트가 일어나면 그림을 다시 그려라
isStart = false;
repaint();// 다시 그림을 그려라 요청하는 명령어 // F5
}
@Override
public void paint(Graphics g) {
super.paint(g);
Font f = new Font("궁서체", Font.BOLD, 20);
g.setFont(f);
if(isStart) {
g.drawString("로또 번호를 클릭하세요", 230, 200);
} else {
int[] getNumbers = lottoRandomNumber.createNumber();
g.drawString(getNumbers[0] + " ", 100, 300);
g.drawString(getNumbers[1] + " ", 120, 300);
g.drawString(getNumbers[2] + " ", 140, 300);
g.drawString(getNumbers[3] + " ", 160, 300);
g.drawString(getNumbers[4] + " ", 180, 300);
g.drawString(getNumbers[5] + " ", 200, 300);
}
}
// 메인 함수
public static void main(String[] args) {
new LottoFrame();
} // end of main
} // end of class
반복된 로또 번호 생성을 for문을 사용하여 작성
package ch07;
import java.awt.BorderLayout;
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;
public class LottoFrame extends JFrame implements ActionListener {
private JButton button;
private LottoRandomNumber lottoRandomNumber;
private boolean isStart = true;
private int NUMBER_DISTANCE = 50;
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("그림을 그려라!");
// 이벤트가 일어나면 그림을 다시 그려라
isStart = false;
repaint();// 다시 그림을 그려라 요청하는 명령어 // F5
}
@Override
public void paint(Graphics g) {
super.paint(g);
Font f = new Font("궁서체", Font.BOLD, 20);
g.setFont(f);
if(isStart) {
g.drawString("로또 번호를 클릭하세요", 230, 200);
} else {
int[] getNumbers = lottoRandomNumber.createNumber();
for (int i = 0; i < getNumbers.length; i++) {
g.drawString(getNumbers[i] + " ", 150 + (i * NUMBER_DISTANCE), 200);
}
}
}
// 메인 함수
public static void main(String[] args) {
new LottoFrame();
} // end of main
} // end of class
내가 꾸미기
package ch07;
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.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class LottoFrame extends JFrame implements ActionListener {
private JButton button;
private LottoRandomNumber lottoRandomNumber;
private boolean isStart = true;
private int NUMBER_DISTANCE = 50;
private JLabel backgroundMap;
public LottoFrame() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setTitle("Lotto Game");
setSize(800, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button = new JButton("Game Start");
lottoRandomNumber = new LottoRandomNumber();
Icon icon = new ImageIcon("images/background1.jpg");
backgroundMap = new JLabel(icon);
backgroundMap.setSize(700, 600);
backgroundMap.setLocation(0, 0);
setResizable(false);
}
private void setInitLayout() {
add(button, BorderLayout.NORTH);
add(backgroundMap);
setVisible(true);
}
private void addEventListener() {
button.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("그림을 그려라!");
// 이벤트가 일어나면 그림을 다시 그려라
isStart = false;
repaint(); // 이벤트가 일어나는 그림을 다시 그려라 // F5
}
@Override
public void paint(Graphics g) {
super.paint(g);
Font f1 = new Font("궁서체", Font.BOLD, 40);
Font f2 = new Font("맑은 고딕", Font.BOLD, 30);
g.setFont(f1);
g.setColor(Color.yellow);
if (isStart) {
g.drawString("로또 번호를 클릭하시오", 190, 270);
} else {
int[] getNumbers = lottoRandomNumber.createNumber();
for (int i = 0; i < getNumbers.length; i++) {
g.setFont(f2);
if (i == 0) {
g.setColor(Color.blue);
} else if (i == 1) {
g.setColor(Color.CYAN);
} else if (i == 2) {
g.setColor(Color.gray);
} else if (i == 3) {
g.setColor(Color.magenta);
} else if (i == 4) {
g.setColor(Color.WHITE);
} else if (i == 5) {
g.setColor(Color.GREEN);
}
g.drawString(getNumbers[i] + " ", (260 + i * NUMBER_DISTANCE), 260);
}
// }
// g.drawString(getNumbers[1] + " ", 160, 200);
// g.drawString(getNumbers[2] + " ", 180, 200);
// g.drawString(getNumbers[3] + " ", 200, 200);
// g.drawString(getNumbers[4] + " ", 220, 200);
// g.drawString(getNumbers[5] + " ", 240, 200);
}
}
public static void main(String[] args) {
new LottoFrame();
} // end of main
} // end of class
'Java > Swing' 카테고리의 다른 글
Swing - 8 (쓰레드 활용) (0) | 2024.05.03 |
---|---|
Swing - 6 (Key Listener) (0) | 2024.04.30 |
Swing - 5 (이벤트 리스너) (0) | 2024.04.29 |
Swing - 4 (이미지 겹치는 방법) (0) | 2024.04.29 |
Swing - 3 (이미지 올리기) (0) | 2024.04.29 |