### : 목차 구분 기호
--- : 목차 내에 항목 구분 기호

목차
1. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드
4. 과제

###################################
1. 이론 및 정보
-----------------------------------
----------------------------------- 
----------------------------------- 
----------------------------------- 
###################################
2. 설정 및 그 밖에
-----------------------------------
###################################
3. 소스코드
-----------------------------------
3-1
/day16/src/awt/event/EventTest1.java
 
package awt.event;
 
import java.awt.Button;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
/*
public class EventTest1 extends Frame implements ActionListener{
     Button b1, b2;
     TextArea ta;
     public EventTest1() {
          b1 = new Button("눌러주세요");
          b2 = new Button("종료");
          ta = new TextArea();
          add("North",b1);
          add("South",b2);
          add("Center",ta);
          b1.addActionListener(this);
          b2.addActionListener(this);
     }
     public static void main(String[] args) {
          // TODO 이벤트 소스와 이벤트 핸들러가 같은 클래스인 경우
          EventTest1 et = new EventTest1();
          et.setSize(300, 400);
          et.setVisible(true);
     }
     @Override
     public void actionPerformed(ActionEvent e) {
          if(e.getSource() == b1){
               ta.setText(ta.getText()+"버튼이 눌렸어요...\n");              
          }else if(e.getSource() == b2){
               dispose();
          }
     }
}
*/
/*
class EventDemo1 implements ActionListener {
     Frame f;
     public EventDemo1(Frame f) {
          this.f = f;
     }
     @Override
     public void actionPerformed(ActionEvent e) {
          if (e.getSource() == ((EventTest1) f).b1) {
               ((EventTest1) f).ta.setText(((EventTest1) f).ta.getText()
                         + "버튼이 눌렸어요...\n");
          } else if (e.getSource() == ((EventTest1) f).b2) {
               f.dispose();
          }
     }
}
public class EventTest1 extends Frame {
     Button b1, b2;
     TextArea ta;
     public EventTest1() {
          b1 = new Button("눌러주세요");
          b2 = new Button("종료");
          ta = new TextArea();
          add("North", b1);
          add("South", b2);
          add("Center", ta);
          EventDemo1 demo = new EventDemo1(this);
          b1.addActionListener(demo);
          b2.addActionListener(demo);
     }
     public static void main(String[] args) {
          // TODO 이벤트 소스와 이벤트 핸들러가 다른 클래스인 경우
          EventTest1 et = new EventTest1();
          et.setSize(300, 400);
          et.setVisible(true);
     }
}
*/
public class EventTest1 extends Frame {
     Button b1, b2;
     TextArea ta;
 
     public EventTest1() {
          b1 = new Button("눌러주세요");
          b2 = new Button("종료");
          ta = new TextArea();
          add("North", b1);
          add("South", b2);
          add("Center", ta);
          EventDemo1 demo = new EventDemo1(this);
          b1.addActionListener(demo);
          b2.addActionListener(demo);
     }
 
     class EventDemo1 implements ActionListener {
          Frame f;
 
          public EventDemo1(Frame f) {
               this.f = f;
          }
 
          @Override
          public void actionPerformed(ActionEvent e) {
               if (e.getActionCommand().equals("종료")) {
                    f.dispose();
               } else {
                    ta.setText(ta.getText() + "버튼이 눌렸어요...\n");
               }
          }
     }
 
     public static void main(String[] args) {
          // TODO 이벤트 핸들러가 내부 클래스인 경우
          EventTest1 et = new EventTest1();
          et.setSize(300400);
          et.setVisible(true);
     }
}
----------------------------------- 
3-2
/day16/src/awt/event/EventTest2.java
 
package awt.event;
 
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
/*
public class EventTest2 extends Frame implements WindowListener{
    
     TextField tf;
     public EventTest2() {
          setLayout(new FlowLayout());
          tf = new TextField();
          tf.setText("x버튼을 누르면 윈도우가 종료됩니다.");
          add(tf);
          addWindowListener(this);
     }
     public static void main(String[] args) {
          // TODO 어댑터 클래스 테스트
          EventTest2 et = new EventTest2();
          et.setSize(300, 400);
          et.setVisible(true);
     }
     @Override
     public void windowClosing(WindowEvent e) {
          // TODO Auto-generated method stub
          System.exit(0);
          //dispose();
     }
     @Override
     public void windowActivated(WindowEvent e) {
          // TODO Auto-generated method stub
         
     }
     @Override
     public void windowDeactivated(WindowEvent e) {
          // TODO Auto-generated method stub
         
     }
     @Override
     public void windowDeiconified(WindowEvent e) {
          // TODO Auto-generated method stub
         
     }
     @Override
     public void windowIconified(WindowEvent e) {
          // TODO Auto-generated method stub
         
     }
     @Override
     public void windowOpened(WindowEvent e) {
          // TODO Auto-generated method stub
         
     }
     @Override
     public void windowClosed(WindowEvent e) {
          // TODO Auto-generated method stub
         
     }
}
*/
class WindowExit extends WindowAdapter {
 
     @Override
     public void windowClosing(WindowEvent e) {
          System.exit(0);
     }
}
public class EventTest2 extends Frame {
 
     TextField tf;
 
     public EventTest2() {
          setLayout(new FlowLayout());
          tf = new TextField();
          tf.setText("x버튼을 누르면 윈도우가 종료됩니다.");
          add(tf);
          addWindowListener(new WindowExit());
     }
 
     public static void main(String[] args) {
          // TODO 어댑터 클래스 테스트
          EventTest2 et = new EventTest2();
          et.setSize(300400);
          et.setVisible(true);
     }
}
----------------------------------- 
3-3
/day16/src/awt/event/ItemEventTest1.java
 
package awt.event;
 
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
 
 
public class ItemEventTest1 extends Frame {
     Panel p;
     Checkbox c1,c2,c3,r1,r2;
     TextArea area;
     CheckboxGroup g1;    
    
     public ItemEventTest1() {
          p = new Panel();
          c1 = new Checkbox("딸기");
          c2 = new Checkbox("사과");
          c3 = new Checkbox("바나나");
          g1 = new CheckboxGroup();
          r1 = new Checkbox("남성", g1,true);
          r2 = new Checkbox("여성", g1,false);
          area = new TextArea();
          ItemEventProc item = new ItemEventProc();
          c1.addItemListener(item);
          c2.addItemListener(item);
          c3.addItemListener(item);
          r1.addItemListener(item);
          r2.addItemListener(item);
          p.add(c1);
          p.add(c2);
          p.add(c3);
          p.add(r1);
          p.add(r2);
          add("North",p);
          add("Center",area);
          addWindowListener(new WindowExit());         
     }
    
     class ItemEventProc implements ItemListener{
          @Override
          public void itemStateChanged(ItemEvent e) {              
               Checkbox cb = (Checkbox)e.getSource();              
               if(cb.getState()){
                    area.setText(area.getText()+"\n"+cb.getLabel()+"가 선택되었습니다.");
               }else{
                    area.setText(area.getText()+"\n"+cb.getLabel()+"가 해제되었습니다.");
               }
          }
     }
    
     public static void main(String[] args) {
          // TODO ItemEvent 첫번째 테스트
          ItemEventTest1 et = new ItemEventTest1();
          et.setSize(300400);
          et.setVisible(true);
     }
}
----------------------------------- 
3-4
/day16/src/awt/event/ItemEventTest2.java
 
package awt.event;
 
import java.awt.Choice;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
 
public class ItemEventTest2 extends Frame {
     String item[] = {"서울""경기""인천""수원"};
     Choice cho;
     TextArea ta;
     public ItemEventTest2() {
          cho = new Choice();
          ta = new TextArea();
          for (int i = 0; i < item.length; i++) {
               cho.addItem(item[i]);
          }
          cho.addItemListener(new ItemEventProc1());
          add("North",cho);
          add("Center",ta);
          addWindowListener(new WindowExit());
     }
    
     class ItemEventProc1 implements ItemListener{
          @Override
          public void itemStateChanged(ItemEvent e) {              
               Choice c = (Choice)e.getSource();
               ta.setText(ta.getText()+c.getSelectedItem()+"이 선택되었습니다.\n");
          }
     }
 
     public static void main(String[] args) {
          // TODO ItemEvent 두번째 테스트
          ItemEventTest2 et = new ItemEventTest2();
          et.setSize(300400);
          et.setVisible(true);
     }
}
----------------------------------- 
3-
/day16/src/awt/event/TextEventTest.java
 
package awt.event;
 
import java.awt.Button;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
 
public class TextEventTest extends Frame implements TextListener, KeyListener {
     Button btnOk;
     TextArea ta;
     TextField tf;
 
     public TextEventTest() {
          btnOk = new Button("OK");
          ta = new TextArea();
          tf = new TextField();
          add("North", btnOk);
          add("Center", ta);
          add("South", tf);
          tf.addTextListener(this);
          tf.addKeyListener(this);
          addWindowListener(new WindowExit());
     }
 
     public static void main(String[] args) {
          // TODO TextEvent 테스트
          TextEventTest et = new TextEventTest();
          et.setSize(300400);
          et.setVisible(true);
     }
 
     @Override
     public void textValueChanged(TextEvent e) {
          // ta.setText(ta.getText()+"내용이 바뀌었어요 : "+tf.getText()+"\n");
     }
 
     @Override
     public void keyPressed(KeyEvent e) {
          // TODO Auto-generated method stub
          // ta.setText(ta.getText()+"내용이 바뀌었어요 : "+tf.getText()+"\n");
          if (e.getKeyChar() != KeyEvent.VK_BACK_SPACE) {
               ta.setText(ta.getText() + "내용이 바뀌었어요 : " + e.getKeyChar() + "\n");
          }
     }
 
     @Override
     public void keyReleased(KeyEvent e) {
          // TODO Auto-generated method stub
     }
 
     @Override
     public void keyTyped(KeyEvent e) {
          // TODO Auto-generated method stub
     }
}
-----------------------------------  
3-6
/day16/src/awt/menu/MenuTest1.java
 
package awt.menu;
 
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class MenuTest1 extends Frame implements ActionListener{
     MenuBar bar;
     //반드시 Menu만 자식 메뉴를 가질 수 있음
     Menu file, edit, file_new;
     MenuItem file_open, file_save, file_exit;
     MenuItem edit_copy, edit_paste, edit_cut;
     MenuItem file_new_html, file_new_java;
    
     public MenuTest1() {
          bar = new MenuBar();
          file = new Menu("파일");
          edit = new Menu("편집");
          file_new = new Menu("새 파일");
          file_open = new MenuItem("파일 열기");
          file_save = new MenuItem("파일 저장");
          file_exit = new MenuItem("종료");
          edit_copy = new MenuItem("복사하기");
          edit_paste = new MenuItem("붙여넣기");
          edit_cut = new MenuItem("잘라내기");
          file_new_html = new MenuItem("HTML");
          file_new_java = new MenuItem("JAVA");
          file_exit.addActionListener(this);
          file_new.add(file_new_html);
          file_new.add(file_new_java);
          file.add(file_new);
          file.add(file_open);
          file.add(file_save);
          file.addSeparator();
          file.add(file_exit);
          edit.add(edit_copy);
          edit.add(edit_paste);
          edit.add(edit_cut);
          bar.add(file);
          bar.add(edit);
          setMenuBar(bar);
     }
    
     @Override
     public void actionPerformed(ActionEvent e) {
          if (e.getSource() == file_exit) {
               dispose();
          }
     }
    
     public static void main(String[] args) {
          // TODO 메뉴 첫번째 예제
          MenuTest1 et = new MenuTest1();
          et.setSize(300400);
          et.setVisible(true);
     }
}
----------------------------------- 
3-7
/day16/src/awt/menu/MenuTest2.java
 
package awt.menu;
 
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.PrintWriter;
 
public class MenuTest2 extends Frame implements ActionListener{
     MenuBar bar;
     //반드시 Menu만 자식 메뉴를 가질 수 있음
     Menu file;
     MenuItem file_open, file_save, file_exit;
     FileDialog fopen, fsave;
     TextArea area;
     public MenuTest2() {
          bar = new MenuBar();
          file = new Menu("파일");
          file_open = new MenuItem("파일 열기");
          file_save = new MenuItem("파일 저장");
          file_exit = new MenuItem("종료");
          area = new TextArea();
         
          fopen = new FileDialog(this"파일 열기", FileDialog.LOAD);
          fsave = new FileDialog(this"파일 저장", FileDialog.SAVE);
         
         
          file.add(file_open);
          file.add(file_save);
          file.addSeparator();
          file.add(file_exit);
          bar.add(file);
          setMenuBar(bar);
          add("Center", area);
         
          file_exit.addActionListener(this);
          file_open.addActionListener(this);
          file_save.addActionListener(this);         
     }
    
     @Override
     public void actionPerformed(ActionEvent e) {
          if (e.getSource() == file_exit) {
               dispose();
          } else if (e.getSource() == file_open) {
               fopen.setVisible(true);    
               if (fopen.getFile() != null) {
                    try {
                         FileReader reader = new FileReader(fopen.getDirectory()
                                   + "\\"
                                   + fopen.getFile());
                         BufferedReader br = new BufferedReader(reader);
                         String str;
                         while ((str = br.readLine()) != null) {
                              area.append(str + "\n");
                         }
                         br.close();
                         reader.close();
                    } catch (Exception e1) {
                         e1.printStackTrace();
                    }
               }
          } else if (e.getSource() == file_save) {
               fsave.setVisible(true);
               if (fsave.getFile() != null) {
                    try {
                         PrintWriter pw = new PrintWriter(fsave.getDirectory()
                                   + "\\"
                                   + fsave.getFile());
                         pw.print(area.getText());
                         pw.close();
                    } catch (Exception e1) {
                         e1.printStackTrace();
                    }
               }
          }
     }
    
     public static void main(String[] args) {
          // TODO 메뉴 두번째 예제
          MenuTest2 et = new MenuTest2();
          et.setSize(300400);
          et.setVisible(true);
     }
}

----------------------------------- 
3-8
----------------------------------- 
3-9
----------------------------------- 

###################################
4. 과제
-----------------------------------
4-1
----------------------------------- 
4-2
----------------------------------- 
4-3
----------------------------------- 
4-4
----------------------------------- 
4-5
###################################
5. 과제 해결
-----------------------------------
5-1
-----------------------------------
5-2
----------------------------------- 
5-3
-----------------------------------
5-4
###################################
프로젝트

package tictactoe;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

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

public class UI extends JFrame {
JPanel west, east;
JButton reset, end_game;
JLabel lb_win, lb_lose, lb_draw;
JLabel lb_win_num, lb_lose_num, lb_draw_num;
Random random;
final int AI_NUM = 2;
final int USER_NUM = 1;
final int INIT = 0;
int win_cnt = 0, lose_cnt = 0, draw_cnt = 0;
boolean isUserFirst = true;//true면 user 먼저
boolean isEnd = false;
int row_col = 3;
JButton button[][] ;
int[][] tictactoe ;
public UI(int num) {
setTitle("TicTacToe");
if(num > 0)
row_col = num;
button = new JButton[row_col][row_col];
tictactoe = new int[row_col][row_col];
west = new JPanel();
east = new JPanel();
random = new Random();
west.setLayout(new GridLayout(row_col, row_col));
for (int i = 0; i < button.length; i++) {
for (int j = 0; j < button[i].length; j++) {
button[i][j] = new JButton();
button[i][j].setForeground(Color.lightGray);
button[i][j].setBackground(Color.lightGray);
button[i][j].addActionListener(new ButtonListener());
tictactoe[i][j] = INIT;
west.add(button[i][j]);
}
}
// button[i].setIcon(new ImageIcon(ImageIO.read(new File("F:\\study\\java\\X.png"))));
reset = new JButton("다시하기");
end_game = new JButton("종료");
lb_win = new JLabel("Win(승)",JLabel.CENTER);
lb_lose = new JLabel("Lose(패)",JLabel.CENTER);
lb_draw = new JLabel("Draw(비김)",JLabel.CENTER);
lb_win_num = new JLabel();
lb_lose_num = new JLabel();
lb_draw_num = new JLabel();
lb_win_num.setHorizontalAlignment(JLabel.CENTER);
lb_lose_num.setHorizontalAlignment(JLabel.CENTER);
lb_draw_num.setHorizontalAlignment(JLabel.CENTER);

ButtonListener bl = new ButtonListener();
reset.addActionListener(bl);
end_game.addActionListener(bl);

east.setLayout(new GridLayout(4, 2, 2, 2));
east.add(reset);
east.add(end_game);
east.add(lb_win);
east.add(lb_win_num);
east.add(lb_lose);
east.add(lb_lose_num);
east.add(lb_draw);
east.add(lb_draw_num);

setLayout(new GridLayout(1, 2, 5, 5));
add(west);
add(east);
setBounds(200, 100, 700, 400);
setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}

void ai_random() {
for (;;) {
win_check();
if (isEnd)
break;
else {
int i = random.nextInt(row_col);
int k = random.nextInt(row_col);
if (tictactoe[i][k] == INIT) {
button[i][k].setBackground(Color.blue);
tictactoe[i][k] = AI_NUM;
win_check();
break;
}
}
}
}

void ai_up(){

}

void win_check() {
int user_cnt = 0;
int ai_cnt = 0;
int win_temp = win_cnt;
int lose_temp = lose_cnt;
int init_cnt = 0;
//
for (int i = 0; i < tictactoe.length; i++) {
for (int j = 0; j < tictactoe[i].length; j++) {
if (tictactoe[i][j] == USER_NUM) {
user_cnt++;
} else if (tictactoe[i][j] == AI_NUM) {
ai_cnt++;
} else if (tictactoe[i][j] == INIT) {
init_cnt++;
} 
}
if (user_cnt == row_col) {
win_cnt++; 
}
if (ai_cnt == row_col) {
lose_cnt++;
}
ai_cnt = 0;
user_cnt = 0;
}
user_cnt = 0;
ai_cnt = 0;
//
for (int i = 0; i < tictactoe.length; i++) {
for (int j = 0; j < tictactoe[i].length; j++) {
if (tictactoe[j][i] == USER_NUM) {
user_cnt++;
} else if (tictactoe[j][i] == AI_NUM) {
ai_cnt++;
}
}
if (user_cnt == row_col) {
win_cnt++;
}
if (ai_cnt == row_col) {
lose_cnt++;
}
ai_cnt = 0;
user_cnt = 0;
}
user_cnt = 0;
ai_cnt = 0;
//
for (int i = 0; i < tictactoe.length; i++) {
int j = i;
if (tictactoe[j][i] == USER_NUM) {
user_cnt++;
} else if (tictactoe[j][i] == AI_NUM) {
ai_cnt++;
}
}
if (user_cnt == row_col) {
win_cnt++;
}
if (ai_cnt == row_col) {
lose_cnt++;
}
user_cnt = 0;
ai_cnt = 0;
//
for (int i = 0; i < tictactoe.length; i++) {
int j = tictactoe.length - 1 - i;
if (tictactoe[j][i] == USER_NUM) {
user_cnt++;
} else if (tictactoe[j][i] == AI_NUM) {
ai_cnt++;
}
}
if (user_cnt == row_col) {
win_cnt++;
}
if (ai_cnt == row_col) {
lose_cnt++;
}
// result
boolean isWin = (win_temp < win_cnt);
boolean isLost = (lose_temp < lose_cnt);
if (isWin || isLost) { 
isEnd = true;
if (isWin) {
isUserFirst = false;
showMessage("이겼습니다.");
lb_win_num.setText(String.valueOf(win_cnt));
}
if (isLost) {
isUserFirst = true;
showMessage("졌습니다.");
lb_lose_num.setText(String.valueOf(lose_cnt));
}
for (int i = 0; i < tictactoe.length; i++) {
for (int j = 0; j < tictactoe[i].length; j++) {
button[i][j].setEnabled(false);
}
}
} else if (init_cnt == 0) { 
isUserFirst = !isUserFirst;
isEnd = true;
draw_cnt++;
showMessage("비겼습니다.");
lb_draw_num.setText(String.valueOf(draw_cnt));
for (int i = 0; i < tictactoe.length; i++) {
for (int j = 0; j < tictactoe[i].length; j++) {
button[i][j].setEnabled(false);
}
}
} 
}

void end_game(int num) {
if (num == USER_NUM) {

} else if (num == AI_NUM) {

}
}

void showMessage(String mes) {
JOptionPane.showMessageDialog(this, mes);
}

private class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JButton button1 = (JButton) e.getSource();
// 배열과 Button에 값 및 색상변화, 특정 tictactoe 버튼을 눌렀을때
for (int i = 0; i < button.length; i++) {
for (int k = 0; k < button[i].length; k++) {
if (button1 == button[i][k]) {
if (tictactoe[i][k] == INIT) {
button1.setBackground(Color.red);
button1.setForeground(Color.black);
button1.setText("USER");
tictactoe[i][k] = USER_NUM;
ai_random();
}
}
}
}

// reset
if (button1 == reset) {
for (int i = 0; i < button.length; i++) {
for (int k = 0; k < button[i].length; k++) {
button[i][k].setEnabled(true);
button[i][k].setBackground(Color.lightGray);
button[i][k].setForeground(Color.lightGray);
button[i][k].setText("");
tictactoe[i][k] = INIT;
}
}
isEnd = false;
if (!isUserFirst) {
ai_random();
}
} else if (button1 == end_game) {
dispose();
}
}
}

public static void main(String[] args) {
if(args.length > 0)
new UI(Integer.parseInt(args[0]));
else
new UI(3);
/*
* 난이도 조정
*/
}
}


'OpenFrameWork' 카테고리의 다른 글

오픈프레임워크_Day19  (0) 2015.04.20
오픈프레임워크_Day18  (0) 2015.04.20
오픈프레임워크_Day16  (0) 2015.04.20
오픈프레임워크_Day15  (0) 2015.04.20
오픈프레임워크_Day14  (0) 2015.04.20
,