GUI 실습 - lotto
/src
ㄴ/controller
ㄴMain.java
ㄴ/model
ㄴLottoModel.java
ㄴ/view
ㄴLottoView.java
Model
package model;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Arrays;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
public class LottoModel {
private int count,bonusCount;
private String winNum[] = new String[6];
private String bonus;
private String myNum[] = new String[6];
private String checkNum[]=new String[6];
public LottoModel(String turn) {
setLotto(turn);
System.out.println(this.getBonus());
System.out.println(this.getWinNum());
setRandom();
System.out.println(this.getMyNum());
check();
}
public void setLotto(String turn) {
URL result;
String winNums[]=new String[6];
try {
result = new URL("http://www.nlotto.co.kr/common.do?method=getLottoNumber&drwNo="+turn);
InputStreamReader isr = new InputStreamReader(result.openConnection().getInputStream(),"UTF-8");
JSONObject obj = (JSONObject)JSONValue.parse(isr);
System.out.println("읽어온 결과 : "+obj.toJSONString());
if("success".equals(obj.get("returnValue"))) {
System.out.print("로또 번호 : ");
for(int i=1;i<=6;i++) {
System.out.print(" "+obj.get("drwtNo"+i));
winNums[i-1]=obj.get("drwtNo"+i).toString();
this.setWinNum(winNums);
}
System.out.println("보너스 : "+obj.get("bnusNo"));
this.setBonus(obj.get("bnusNo").toString());
}else {
System.out.println("로또 정보 읽기 실패");
}
}catch(Exception e) {
e.printStackTrace();
}
}
public void setRandom() {
String[] myNum=new String[6];
int[] lotto = new int[6];
for(int i=0;i<myNum.length;i++) {
lotto[i] = (int)(Math.random()*45)+1;
for(int j=i-1;j>=0;j--) {
if(lotto[i]==lotto[j]) {
i--;
break;
}
}
}
Arrays.sort(lotto);
for(int i=0;i<myNum.length;i++) {
myNum[i]=String.valueOf(lotto[i]);
System.out.println(myNum[i]);
}
this.setMyNum(myNum);
}
public void check() {
this.count=0;
this.bonusCount=0;
for(String i : winNum) {
if(Arrays.asList(myNum).contains(i)) {
this.checkNum[count++]=i;
}
}
for(int i=count;i<6;i++) {
this.checkNum[i]=null;
}
if(Arrays.asList(this.myNum).contains(bonus)&&count==5) {
this.checkNum[count]=bonus;
bonusCount=1;
}
}
public int result() {
switch (this.count) {
case 6:
return 1;
case 5:
if(this.bonusCount==1)return 2;
else return 3;
case 4:
return 4;
case 3:
return 5;
default:
return 6;
}
}
public String[] getWinNum() {
return winNum;
}
public void setWinNum(String[] winNum) {
this.winNum = winNum;
}
public String getBonus() {
return bonus;
}
public void setBonus(String bonus) {
this.bonus = bonus;
}
public String[] getMyNum() {
return myNum;
}
public void setMyNum(String[] myNum) {
this.myNum = myNum;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getBonusCount() {
return bonusCount;
}
public void setBnousCount(int bnousCount) {
this.bonusCount = bonusCount;
}
public String[] getCheckNum() {
return checkNum;
}
public void setCheckNum(String[] checkNum) {
this.checkNum = checkNum;
}
}
View
package view;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Graphics;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.Border;
import model.LottoModel;
public class LottoView extends JFrame{
private JPanel panel,win, my,result;
Border blackline = BorderFactory.createLineBorder(Color.black);
private JLabel lottoNum[]= new JLabel[6],myNum[] = new JLabel[6],resNum[] = new JLabel[6];
private JLabel plus,res,turn_name,my_name,bonus;
private String winNums[],myNums[];
private String[] resNums;
// public void paint(Graphics g) {
// g.setColor(Color.white);
// g.drawOval(480, 480, 200, 200);
// g.setColor(Color.red);
// g.fillOval(240,240,200,100);
// }
public LottoView(String turn) {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 450);
getContentPane().setLayout(null);
panel = new JPanel();
panel.setBounds(6, 6, 438, 415);
panel.setLayout(null);
this.add(panel);
win = new JPanel();
win.setBounds(6, 38, 426, 96);
win.setLayout(new GridLayout(1,8));
win.setBorder(blackline);
panel.add(win);
my = new JPanel();
my.setBounds(6, 181, 426, 96);
my.setLayout(new GridLayout(1,6));
my.setBorder(blackline);
panel.add(my);
result = new JPanel();
result.setBounds(6, 313, 426, 96);
result.setLayout(new GridLayout(1,6));
result.setBorder(blackline);
panel.add(result);
turn_name = new JLabel(turn+"회 로또번호");
turn_name.setFont(new Font("Apple SD Gothic Neo", 1, 20));
turn_name.setBounds(6, 6, 426, 30);
panel.add(turn_name);
my_name = new JLabel("나의 로또 번호");
my_name.setFont(new Font("Apple SD Gothic Neo", 1, 20));
my_name.setBounds(6, 147, 208, 30);
panel.add(my_name);
res = new JLabel("결과");
res.setFont(new Font("Apple SD Gothic Neo", 1, 20));
res.setBounds(6, 284, 426, 30);
panel.add(res);
}
public LottoView(String turn, LottoModel model) {
this(turn);
winNums = model.getWinNum();
int i=0;
for(String winN : winNums) {
System.out.println(winN);
lottoNum[i] = new JLabel(winN, SwingConstants.CENTER);
lottoNum[i].setOpaque(true);
lottoNum[i].setFont(new Font("Apple SD Gothic Neo", 1, 20));
win.add(lottoNum[i++]);
}
plus = new JLabel("+", SwingConstants.CENTER);
plus.setOpaque(true);
plus.setFont(new Font("Apple SD Gothic Neo", 1, 25));
win.add(plus);
bonus = new JLabel(model.getBonus(), SwingConstants.CENTER);
bonus.setOpaque(true);
bonus.setFont(new Font("Apple SD Gothic Neo", 1, 20));
win.add(bonus);
JButton button = new JButton("새로 뽑기");
button.setBounds(315, 146, 117, 29);
panel.add(button);
myNums = model.getMyNum();
i=0;
for(String myN : myNums) {
myNum[i] = new JLabel(myN, SwingConstants.CENTER);
myNum[i].setOpaque(true);
myNum[i].setFont(new Font("Apple SD Gothic Neo", 1, 20));
my.add(myNum[i++]);
System.out.println(myN+"view: "+i);
}
res.setText("결과 : "+model.result()+"등입니다.");
resNums = model.getCheckNum();
i=0;
for(String resN : resNums) {
resNum[i] = new JLabel(resN, SwingConstants.CENTER);
resNum[i].setOpaque(true);
resNum[i].setFont(new Font("Apple SD Gothic Neo", 1, 20));
result.add(resNum[i++]);
}
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("a클릭");
model.setRandom();
model.check();
res.setText("결과 : "+model.result()+"등입니다.");
int i=0;
for(String myN : model.getMyNum()) {
System.out.println(i+"view: "+myN);
myNum[i++].setText(myN);
}
i=0;
for(String myN : model.getCheckNum()) {
System.out.println(i+"checkview: "+myN);
if(myN==null) {
System.out.println("null");
resNum[i++].setText(" ");
}else {
resNum[i++].setText(myN);
}
}
}
});
}
}
Controller
package controller;
//import java.util.Calendar;
//import java.util.TimeZone;
import model.LottoModel;
import view.LottoView;
public class Main {
public static void main(String[] args) {
String turn="807";
LottoModel m = new LottoModel(turn);
LottoView v= new LottoView(turn,m);
v.setVisible(true);
}
}
Last updated