mojo's Blog

명품 JAVA Programming 제 11장 실습문제 10번 본문

Java

명품 JAVA Programming 제 11장 실습문제 10번

_mojo_ 2021. 7. 29. 13:15

0에서 9까지의 숫자를 가진 레이블 컴포넌트를 10개 만들어서 이들을 프레임 내의 랜덤한 위치에 배치한다.

 

사용자가 0~9 순서대로 클릭하여 10개를 모두 클릭하면 다시 10개의 레이블을 랜덤한 위치로 배치한다.

 

클릭된 컴포넌트는 화면에서 보이지 않게 하며 반드시 번호 순서로 클릭되게 해야한다.

 

코드

import javax.swing.*; // JFrame
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*; // Container
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Vector;
import java.awt.*;

public class MyFrame extends JFrame{
	
	private static JLabel []jl=new JLabel[10];
	private static int click_Cnt=0;
	
	static void setLabel(Container c) {
		for(int i=0; i<jl.length; i++) {
			jl[i]=new JLabel(Integer.toString(i));
			jl[i].setSize(30,30);
			jl[i].setFont(new Font("Arial",Font.PLAIN,30));
			jl[i].setForeground(Color.PINK);
			
			
			int x=(int)(Math.random()*300+20);
			int y=(int)(Math.random()*300+20);
			jl[i].setLocation(x,y);
			c.add(jl[i]);
		}
	}
	
	static void reSetLabel(Container c) {
		click_Cnt=0;
		
		for(int i=0;i<jl.length;i++) {
			jl[i].setSize(30,30);
			int x=(int)(Math.random()*300+20);
			int y=(int)(Math.random()*300+20);
			jl[i].setLocation(x,y);
		}
	}
	
	MyFrame(){
		setTitle("11장 실습문제");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container c = getContentPane();
		c.setLayout(null);

		setLabel(c);
		
		for(int i=0;i<jl.length;i++) {
			jl[i].addMouseListener(new MouseAdapter() {
				public void mousePressed(MouseEvent e) { // mouse를 누른 경우
					// TODO Auto-generated method stub
					JLabel la=(JLabel)e.getSource();
					if(click_Cnt==Integer.parseInt(la.getText())) {
						la.setSize(0,0);
						click_Cnt++;
						if(click_Cnt==10) {
							reSetLabel(c);
						}	
					}
				}
			});
		}
		
		setSize(400, 400); // 프레임 크기 300x300
		setVisible(true); // 프레임 출력
		
		c.setFocusable(true);
		c.requestFocus();
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new MyFrame();
	}

}
Comments