지난 시간 복습
버튼을 누르면 text -> 이미지 로 바뀌게 된다.
버튼을 눌러 text - 이미지 - text - 이미지 로 변환
여담 ; flag
옛날 기차역에서 기차가 들어오면 차장이 깃발로 신호를 주었다.
위로 올리면 왼쪽, 내리면 오른쪽 등등
-> flag = 신호를 주는 역할로 많이 쓰게 되었따.
package com.tech.gt001;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class CheckBoxAnimalEx extends JPanel implements ItemListener{
// 구성요소
private JCheckBox[] buttons=new JCheckBox[3];
private String[] animals={"lion","monkey","tiger"};
private JLabel[] labels=new JLabel[3];
private ImageIcon[] icon=new ImageIcon[3];
public CheckBoxAnimalEx() {
super(new GridLayout(0,4));
for (int i = 0; i < animals.length; i++) {
buttons[i]=new JCheckBox(animals[i]);
buttons[i].addItemListener(this);
buttons[i].setBackground(Color.cyan);
labels[i]=new JLabel(animals[i]+".PNG");
icon[i]=new ImageIcon(animals[i]+".PNG");
}
JPanel checkpanel=new JPanel(new GridLayout(0,1));
for (int i = 0; i < animals.length; i++) {
checkpanel.add(buttons[i]);
}
add(checkpanel);
add(labels[0]);
add(labels[1]);
add(labels[2]);
}
@Override
public void itemStateChanged(ItemEvent e) {
System.out.println("check 수신");
Object source=e.getItemSelectable();
System.out.println(source);
for (int i = 0; i < buttons.length; i++) {
if(source==buttons[i]) {
if(e.getStateChange()==ItemEvent.DESELECTED) {
labels[i].setIcon(null);
}else {
labels[i].setIcon(icon[i]);
}
}
}
}
public static void main(String[] args) {
JFrame frame=new JFrame("CheckBox");
CheckBoxAnimalEx panel=new CheckBoxAnimalEx();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,200);
frame.add(panel);
frame.setVisible(true);
}
}
결과
체크박스를 체크하면 그림이 나오고, 해제하면 그림이 안나온다.
동물 대신 과일로 해보세요
package com.tech.gt001;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
public class CheckBoxFruitsEx extends JPanel implements ItemListener {
private JCheckBox[] buttons=new JCheckBox[3];
private String[] fruits= {"apple","grape","orange"};
private JLabel[] labels=new JLabel[3];
private ImageIcon[] icon=new ImageIcon[3];
public CheckBoxFruitsEx() {
super(new GridLayout(0,4));
for (int i = 0; i < fruits.length; i++) {
buttons[i]=new JCheckBox(fruits[i]);
buttons[i].addItemListener(this);
buttons[i].setBackground(Color.YELLOW);
labels[i]=new JLabel(fruits[i]+".gif");
icon[i]=new ImageIcon(fruits[i]+".gif");
}
JPanel checkpanel=new JPanel(new GridLayout(0,1));
for (int i = 0; i < fruits.length; i++) {
checkpanel.add(buttons[i]);
}
add(checkpanel);
add(labels[0]);
add(labels[1]);
add(labels[2]);
}
@Override
public void itemStateChanged(ItemEvent e) {
System.out.println("Checkbox 클릭");
Object source=e.getItemSelectable();
System.out.println(source);
for (int i = 0; i < buttons.length; i++) {
if(source==buttons[i]) {
if(e.getStateChange()==ItemEvent.DESELECTED) {
labels[i].setIcon(null);
}else {
labels[i].setIcon(icon[i]);
}
}
}
}
public static void main(String[] args) {
JFrame frame=new JFrame("Fruits CheckBox");
CheckBoxFruitsEx panel=new CheckBoxFruitsEx();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,200);
frame.add(panel);
frame.setVisible(true);
}
}
결과
일단은 이해보다는 따라 쓰면서 각 줄의 기능정도만 따라가는중..
슬롯머신 만들기
package com.tech.gt001;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.plaf.FontUIResource;
class MyCounter2 extends JFrame implements ActionListener{
private JLabel[] labels;
private JButton buttons;
private int[] numbers;
public MyCounter2() {
// 프레임 초기화 (화면 구성)
setTitle("Slot Machine");
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel=new JPanel();
panel.setLayout(null);
labels=new JLabel[3];
numbers=new int[3];
for (int i = 0; i < labels.length; i++) {
labels[i]=new JLabel(""+numbers[i]);
labels[i].setSize(100,100);
labels[i].setLocation(100+100*i,20);
labels[i].setFont(new FontUIResource("Impact",Font.BOLD,100));
panel.add(labels[i]);
}
buttons=new JButton("머신땡겨");
buttons.setSize(250,50);
buttons.setLocation(100,150);
buttons.addActionListener(this);
panel.add(buttons);
add(panel);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("신호호호호");
for (int i = 0; i < labels.length; i++) {
// 랜덤으로 number 값 받아오기(0~9)
numbers[i]=(int)(Math.random()*10);
labels[i].setText(""+numbers[i]);
}
// 번호 3개가 동일하면 buttons 의 text를 축하축하 로 변경
if(numbers[0]==numbers[1]&&numbers[1]==numbers[2]) {
buttons.setText("축하축하");
} else buttons.setText("머신땡겨");
}
}
public class SlotMachine2 {
public static void main(String[] args) {
new MyCounter2();
}
}
결과
슬롯머신의 숫자를 이미지로 처리하세요
강사님의 코드
package com.tech.gt001;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.plaf.FontUIResource;
class MyCounter4 extends JFrame implements ActionListener{
private JLabel[] labels;
private JButton buttons;
private int[] numbers;
// 이미지 그릇
private ImageIcon[] imgs;
public MyCounter4() {
// 프레임 초기화 (화면 구성)
setTitle("Slot Machine");
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel=new JPanel();
panel.setLayout(null);
labels=new JLabel[3];
numbers=new int[3];
// 이미지 저장 배열 객체 생성
imgs=new ImageIcon[10];
// 배열에 각각 이미지 배치
for (int i = 0; i < imgs.length; i++) {
imgs[i]=new ImageIcon(i+".png");
}
for (int i = 0; i < labels.length; i++) {
labels[i]=new JLabel(""+numbers[i]);
labels[i].setSize(100,100);
labels[i].setLocation(100+100*i,20);
labels[i].setFont(new FontUIResource("Impact",Font.BOLD,100));
labels[i].setIcon(imgs[0]);
panel.add(labels[i]);
}
buttons=new JButton("머신땡겨");
buttons.setSize(250,50);
buttons.setLocation(100,150);
buttons.addActionListener(this);
panel.add(buttons);
add(panel);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("신호호호호");
for (int i = 0; i < labels.length; i++) {
// 랜덤으로 number 값 받아오기(0~9)
numbers[i]=(int)(Math.random()*10);
labels[i].setIcon(imgs[numbers[i]]);
}
// 번호 3개가 동일하면 buttons 의 text를 축하축하 로 변경
if(numbers[0]==numbers[1]&&numbers[1]==numbers[2]) {
buttons.setText("축하축하");
} else buttons.setText("머신땡겨");
}
}
public class SlotMachine4 {
public static void main(String[] args) {
new MyCounter4();
}
}
결과