190430_Day17 숫자야구게임,
<이벤트처리>
- 사건(버튼눌림, 마우스 움직임, 체크하기, 텍스트쓰기 등) 살생시 기능( 실행문장들 기술) 추가
- 이벤트 소스 : bt_new, bt_clear, bt_dap, bt_exit;tf
- 자료형
- 사건 : 버튼눌림과 텍스트필드에 엔터가 입력
- Action이벤트~!
- implements ActionListener
- 연결자 등록
- 버튼명.addActionListener(this);
- 텍스트명.addActionListener(this);
package j0430;
import java.awt.Color;
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.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class BaseBallGame extends JFrame implements ActionListener
{
JTextArea ta;
JButton bt_new, bt_clear, bt_dap, bt_exit;
JLabel la;
JTextField tf;
JScrollPane scroll_ta;
JPanel panel;
int []com, user;
Random r;
public BaseBallGame()
{
setTitle("숫자야구게임");
r = new Random();
com = new int[3];
user = new int[3];
createNum();
ta = new JTextArea();
scroll_ta = new JScrollPane(ta);
bt_new = new JButton("새게임");
bt_clear = new JButton("지우기");
bt_dap = new JButton("정답");
bt_exit = new JButton("종료");
la = new JLabel("입력:");
tf = new JTextField();
scroll_ta.setBounds(10, 10, 350, 300);
bt_new.setBounds(380, 60, 90, 40);
bt_clear.setBounds(380, 120, 90, 40);
bt_dap.setBounds(380, 180, 90, 40);
bt_exit.setBounds(380, 240, 90, 40);
la.setBounds(10, 320, 30, 30);
tf.setBounds(50, 320, 310, 30);
panel = new JPanel();
panel.setLayout(null);
panel.setBackground(Color.blue);
panel.add(scroll_ta);
panel.add(bt_new);
panel.add(bt_clear);
panel.add(bt_dap);
panel.add(bt_exit);
panel.add(la);
panel.add(tf);
add(panel);
setBounds(300, 300, 500, 410);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
eventUp();
}
private void eventUp()
{
bt_new.addActionListener(this);
bt_clear.addActionListener(this);
bt_dap.addActionListener(this);
bt_exit.addActionListener(this);
tf.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e)
{
Object ob = e.getSource();
if( ob == tf)
{
String str = tf.getText();
int su = Integer.parseInt(str);
for (int i = 0; i < com.length; i++)
{
user[i] = str.charAt(i)-48;
}
int strike = 0,ball = 0;
for(int i = 0; i < com.length; i++)
{
for(int j = 0; j < com.length; j++)
{
if( com[i] == user[j] )
{
if( i == j )
{
strike++;
}
else
{
ball++;
}
}
}
}
if(strike == 3)
{
ta.append("축하합니다 정답을 맞추셨습니다.");
}else
{
ta.append(str + "은 " + strike + "스트라이크, " + ball + "볼\n");
}
tf.setText("");
}
else if( ob == bt_new)
{
createNum();
ta.setText("");
}
else if( ob == bt_dap )
{
ta.append("정답은~♥ " + com[0] + " " + com[1] + " " + com[2] + " 이었습니다.\n" );
}
else if( ob == bt_clear)
{
ta.setText("");
tf.setText("");
}
else if( ob == bt_exit)
{
System.exit(0);
}
}
public void createNum()
{
for(int i = 0; i <com.length; i++ )
{
com[i] = r.nextInt(10);
for (int j = i - 1; j >= 0; j--)
{
if( com[i] == com[j] )
{
i--;
break;
}
}
}
}
public static void main(String[] args)
{
new BaseBallGame();
}
}
마우스모션
package j0430;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MouseMotionTest extends JFrame implements MouseMotionListener
{
JLabel green, red;
public MouseMotionTest()
{
setTitle("마우스모션테스트");
green = new JLabel("MOVE");
green.setBackground(Color.GREEN);
green.setOpaque(true);
red = new JLabel("DRAG");
red.setBackground(Color.RED);
red.setOpaque(true);
green.setBounds(30, 30, 80, 30);
red.setBounds(30, 80, 80, 30);
setLayout(null);
add(green);
add(red);
setBounds(300,200,600,600);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
addMouseMotionListener(this);
}
@Override
public void mouseDragged(MouseEvent e)
{
System.out.println("mouseDragged");
int x = e.getX();
int y = e.getY();
red.setLocation(x,y);
}
@Override
public void mouseMoved(MouseEvent e)
{
System.out.println("mouseMoved");
int x = e.getX() + -30;
int y = e.getY() + -30;
green.setLocation( x, y );
}
public static void main(String[] args)
{
new MouseMotionTest();
}
}
숫자야구 개선!
package j0430;
import java.awt.Color;
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.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class BaseBallGame3 extends JFrame implements ActionListener
{
JTextArea ta;
JButton bt_new, bt_clear, bt_dap, bt_exit;
JLabel la;
JTextField tf;
JScrollPane scroll_ta;
JPanel panel;
int []com, user;
Random r;
public BaseBallGame3()
{
setTitle("숫자야구게임");
r = new Random();
com = new int[3];
user = new int[3];
createNum();
ta = new JTextArea();
scroll_ta = new JScrollPane(ta);
bt_new = new JButton("새게임");
bt_clear = new JButton("지우기");
bt_dap = new JButton("정답");
bt_exit = new JButton("종료");
la = new JLabel("입력:");
tf = new JTextField();
scroll_ta.setBounds(10, 10, 350, 300);
bt_new.setBounds(380, 60, 90, 40);
bt_clear.setBounds(380, 120, 90, 40);
bt_dap.setBounds(380, 180, 90, 40);
bt_exit.setBounds(380, 240, 90, 40);
la.setBounds(10, 320, 30, 30);
tf.setBounds(50, 320, 310, 30);
panel = new JPanel();
panel.setLayout(null);
panel.setBackground(Color.blue);
panel.add(scroll_ta);
panel.add(bt_new);
panel.add(bt_clear);
panel.add(bt_dap);
panel.add(bt_exit);
panel.add(la);
panel.add(tf);
add(panel);
setBounds(300, 300, 500, 410);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
eventUp();
}
private void eventUp()
{
bt_new.addActionListener(this);
bt_clear.addActionListener(this);
bt_dap.addActionListener(this);
bt_exit.addActionListener(this);
tf.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e)
{
Object ob = e.getSource();
if( ob == tf)
{
String str = tf.getText();
int su = Integer.parseInt(str);
for (int i = 0; i < com.length; i++)
{
user[i] = str.charAt(i)-48;
}
int strike = 0,ball = 0;
for(int i = 0; i < com.length; i++)
{
for(int j = 0; j < com.length; j++)
{
if( com[i] == user[j] )
{
if( i == j )
{
strike++;
}
else
{
ball++;
}
}
}
}
if(strike == 3)
{
ta.append("축하합니다 정답을 맞추셨습니다.");
}else
{
ta.append(str + "은 " + strike + "스트라이크, " + ball + "볼\n");
}
tf.setText("");
}
else if( ob == bt_new)
{
createNum();
ta.setText("");
}
else if( ob == bt_dap )
{
ta.append("정답은~♥ " + com[0] + " " + com[1] + " " + com[2] + " 이었습니다.\n" );
}
else if( ob == bt_clear)
{
ta.setText("");
tf.setText("");
}
else if( ob == bt_exit)
{
System.exit(0);
}
}
public void createNum()
{
for(int i = 0; i <com.length; i++ )
{
com[i] = r.nextInt(10);
for (int j = i - 1; j >= 0; j--)
{
if( com[i] == com[j] )
{
i--;
break;
}
}
}
}
public static void main(String[] args)
{
new BaseBallGame3();
}
}
package com.encore.j0430;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class BaseBallGame2 extends JFrame implements ActionListener{
JTextArea ta;
JButton bt_new, bt_clear, bt_dap, bt_exit, bt_hint;
JLabel la;
JTextField tf;
JScrollPane scroll_ta;
JPanel panel;
int []com;
int []user;
Random r;
int count;
JFrame f;
boolean start;
public BaseBallGame2() {
setTitle("숫자야구게임");
f = this;
com= new int[3];
user= new int[3];
r = new Random();
createNum();
ta = new JTextArea();
ta.setFont(new Font("굴림체", Font.BOLD , 17));
ta.setLineWrap(true);
ta.setEditable(false);
scroll_ta = new JScrollPane(ta);
bt_new = new JButton("새게임");
bt_clear = new JButton("지우기");
bt_dap = new JButton("정답");
bt_exit = new JButton("종료");
bt_hint = new JButton("힌트");
la = new JLabel("입력:");
tf = new JTextField();
scroll_ta.setBounds(10, 10, 350, 300);
bt_new.setBounds(380,40,90,40);
bt_clear.setBounds(380,100,90,40);
bt_dap.setBounds(380,160,90,40);
bt_hint.setBounds(380,220,90,40);
bt_exit.setBounds(380,280,90,40);
la.setBounds(10, 320, 30,30);
tf.setBounds(50, 320, 310,30);
panel = new JPanel();
panel.setLayout(null);
panel.setBackground(Color.ORANGE);
panel.add(scroll_ta);
panel.add(bt_new);
panel.add(bt_clear);
panel.add(bt_dap);
panel.add(bt_hint);
panel.add(bt_exit);
panel.add(la);
panel.add(tf);
add(panel);
setBounds(300,300, 500,410);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
tf.requestFocus();
endGame();
ruleDescription();
eventUp();
}
private void eventUp() {
bt_new.addActionListener(this);
bt_clear.addActionListener(this);
bt_dap.addActionListener(this);
bt_exit.addActionListener(this);
bt_hint.addActionListener(this);
tf.addActionListener(this);
tf.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if(!start)
showMsg("게임시작을 위해 [새게임]버튼을 클릭!!");
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
Object ob = e.getSource();
if(ob == tf) {
String str = tf.getText();
if(!str.matches("[\\d]{3}")) {
showMsg("세자리숫자만 입력!!");
tf.setText("");
return;
}
for(int i=0; i<com.length; i++) {
user[i]=str.charAt(i)-48;
}
if(duplicateNum()) {
showMsg("중복된 숫자사용금지!!");
tf.setText("");
return;
}
count++;
int strike=0,ball=0;
for(int i=0; i<com.length; i++) {
for(int j=0; j<user.length; j++) {
if(com[i] == user[j]) {
if(i==j) {
strike++;
}else {
ball++;
}
}
}
}
if(strike==3) {
ta.append("♥축하합니다♥ 정답[" + str +"]을 맞추셨습니다^^*\n");
endGame();
}else {
ta.append(count+": "+str+" ▶ " + strike +"Strike "+ ball+"Ball\n");
}
tf.setText("");
}else if(ob == bt_new) {
startGame();
}else if(ob == bt_dap) {
ta.append("▣ 정답은 ["+com[0]+com[1]+com[2]+"]입니다.\n" );
endGame();
}else if(ob == bt_clear) {
ta.setText("");
tf.setText("");
}else if(ob == bt_hint) {
JOptionPane.showMessageDialog(this, "힌트["+ com[r.nextInt(3)] +"]");
bt_hint.setEnabled(false);
}else if(ob == bt_exit) {
System.exit(0);
}
}
public void createNum() {
for(int i=0; i<com.length; i++) {
com[i]= r.nextInt(10);
for(int j=i-1; j>=0; j--) {
if(com[i] == com[j]) {
i--;
break;
}
}
}
}
public boolean duplicateNum() {
if(user[0]== user[1] ||
user[0]== user[2] ||
user[1]== user[2]) {
return true;
}
return false;
}
public void ruleDescription() {
ta.append("\n\n\t<숫자야구게임>");
ta.append("\n1. 게임시작을 위해서 새게임버튼을 클릭");
ta.append("\n2. 입력에 중복되지않는 세자리수를 입력 후 엔터");
ta.append("\n3. 숫자와 자릿수를 맞추면 Strike, 숫자 만 맞추면 Ball이 추가됩니다.");
ta.append("\n4. 정답을 보고 싶으면 정답버튼을 클릭");
ta.append("\n5. 기타 문의사항이 있으면 관리자에게 연락바람(02-754-7302)");
}
public void showMsg(String message) {
JOptionPane.showMessageDialog(this, message);
}
public void startGame() {
start=true;
createNum();
tf.setEnabled(true);
ta.setText("");
count=0;
bt_dap.setEnabled(true);
bt_hint.setEnabled(true);
tf.requestFocus();
}
public void endGame() {
start=false;
tf.setEnabled(false);
bt_dap.setEnabled(false);
bt_hint.setEnabled(false);
}
public static void main(String[] args) {
new BaseBallGame2();
}
}
JTable
package j0430;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class JTableTest extends JFrame{
JTable table;
JScrollPane scroll_table;
public JTableTest() {
setTitle("JTable테스트");
Object[][] rowData = {
{ "홍길동", 13, "학생" },
{ "길라임", 15, "학생" },
{ "김주원", 17, "학생" }
};
String[] columnTitle = {"이름","나이","직업"};
table = new JTable(rowData, columnTitle)
{
@Override
public boolean isCellEditable( int row, int column )
{
return false;
}
};
scroll_table = new JScrollPane(table);
add(scroll_table);
setBounds(400,300, 300,300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JTableTest();
}
}
package j0430;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
class You extends JButton
{
public You(String text)
{
super(text);
}
}
class A
{
void hello()
{
System.out.println("하이");
}
}
public class My extends JFrame
{
JButton bt;
You you;
public My()
{
bt = new JButton("버튼1");
you = new You("버튼2");
setLayout(new FlowLayout());
add(bt);
add(you);
setSize(300,300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args)
{
new My();
A a = new A()
{
@Override
public void hello()
{
System.out.println("신짜오~!");
}
};
a.hello();
}
}
package j0430;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class JTableTest extends JFrame{
JTable table;
JScrollPane scroll_table;
public JTableTest() {
setTitle("JTable테스트");
Object [][] rowData = {
{"홍길동", 13, "학생"},
{"길라임", 15, "학생"},
{"김주원", 17, "학생"}
};
String [] columnTitle = {"이름","나이","직업"};
DefaultTableModel dtm = new DefaultTableModel(rowData,columnTitle);
table = new JTable(dtm) {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
scroll_table = new JScrollPane(table);
add(scroll_table);
setBounds(400,300, 300,300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Object nameValue= table.getValueAt(1, 0);
System.out.println("nameValue="+ nameValue);
table.setValueAt("차라임", 1, 0);
System.out.println(table.getValueAt(0, 0));
System.out.println(table.getValueAt(1, 0));
System.out.println(table.getValueAt(2, 0));
System.out.println("======================");
for(int i=0; i<table.getRowCount(); i++) {
System.out.println(table.getValueAt(i, 0));
}
Object [] newRow = {"김유신",13,"화랑"};
dtm.addRow(newRow);
Vector<Object> v = new Vector<>();
v.add("강감찬");
v.add(28);
v.add("장군");
dtm.addRow(v);
dtm.removeRow(2);
}
public static void main(String[] args) {
new JTableTest();
}
}