<명품 JAVA Programming> - Chapter10 실습문제

목차

1. JLabel 컴포넌트는 Mouse 이벤트를 받을 수 있다. JLabel 컴포넌트에 마우스를 올리면 "Love Java"가, 내리면 "사랑해"가 출력되도록 스윙 응용프로그램을 작성하라.

package chapter10;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Q1 extends JFrame{
	private JLabel la = new JLabel("사랑해");
	public Q1() {
		setTitle("마우스 올리기 내리기");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Container c = getContentPane();
		c.setLayout(new FlowLayout());
		c.add(la);
		
		la.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				JLabel label = (JLabel)e.getSource();
				label.setText("Love java");
			}
			public void mouseExited(MouseEvent e) {
				JLabel label = (JLabel)e.getSource();
				label.setText("사랑해");
			}
		});
		setSize(300, 300);
		setVisible(true);
	}

	public static void main(String[] args) {
		new Q1();
	}
}

2. 컨텐트팬의 배경색은 초록색으로 하고 마우스를 드래깅하는 동안만 노란색으로 유지하는 스윙 응용프로그램을 작성하라.

package chapter10;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Q2 extends JFrame{
	public Q2() {
		setTitle("while dragging");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300, 300);
		setVisible(true);
		
		Container c = getContentPane();
		c.setBackground(Color.green);
		
		c.addMouseMotionListener(new MouseAdapter() {
			public void mouseDragged(MouseEvent e) {
				c.setBackground(Color.yellow);
			}
		});
		c.addMouseListener(new MouseAdapter() {
			public void mouseReleased(MouseEvent e) {
				c.setBackground(Color.green);
			}
		});
	}
	public static void main(String[] args) {
		new Q2();
	}
}

3. JLabel을 활용하여 "Love Java"를 출력하고 왼쪽 화살표 키(<Left> 키)를 입력할 때마다 "avaJ evol"와 "Love Java"를 번갈아 출력하는 스윙 프로그램을 작성하라.

package chapter10;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Q3 extends JFrame{
	public Q3() {
		setTitle("Change by left key");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300, 300);
		setVisible(true);
		
		Container c = getContentPane();
		c.setLayout(new FlowLayout());
		
		JLabel la = new JLabel("Love java");
		c.add(la);
		
		la.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_LEFT){
					JLabel label = (JLabel)e.getSource();
					StringBuffer text  = new StringBuffer(label.getText());
					label.setText(text.reverse().toString());
				}
			}
		});
		la.setFocusable(true);
		la.requestFocus();
	}

	public static void main(String[] args) {
		new Q3();
	}
}

 

4. JLabel을 활용하여 "Love Java"를 출력하고 왼쪽 화살표 키(<Left> 키)를 입력할 때마다 "ove JavaL", "ve JavaLo", "e JavaLov"와 같이 한 문자씩 왼쪽으로 회전하는 프로그램을 작성하라.

package chapter10;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Q4 extends JFrame {
	public Q4() {
		setTitle("Rotate by Left Key");	//제목 설정
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	//프레임 종료 시 프로그램 종료
		setSize(300, 300);	//크기 설정
		setVisible(true);	//창 보이기

		Container c = getContentPane();	//컨텐트팬 생성
		c.setLayout(new FlowLayout());	//flow 레이아웃 설정

		JLabel la = new JLabel("Love java");	//label의 텍스트는 Love java
		c.add(la);	//컨텐트팬에 부착
		la.setFocusable(true);
		la.requestFocus();

		la.addKeyListener(new KeyAdapter() {	//익명 리스너
			public void keyPressed(KeyEvent e) {	//키가 눌리면 이벤트 발생
				if (e.getKeyCode() == KeyEvent.VK_LEFT){	//입력된 키가 왼쪽 화살표면
					JLabel label = (JLabel)e.getSource();	//이벤트 발생 시 레퍼런스 리턴
					//수정이 용이한 StringBuffer 객체 생성. label의 텍스트를 받음
					StringBuffer text  = new StringBuffer(label.getText());
					//현재 text의 첫 문자를 text의 끝에 추가
					text = text.append(text.substring(0, 1));
					//첫 문자를 지우고 String객체로 바꾸어 label의 text로 설정
					label.setText(text.deleteCharAt(0).toString());
				}
			}
		});
		//포커스 설정
	}
	public static void main(String[] args) {
		new Q4();
	}
}

 

5. JLabel 컴포넌트로 "Love Java"를 출력하고, 키 리스너를 작성하여 +키를 치면 폰트 크기를 5픽셀씩 키우고, -키를 치면 폰트 크기를 5픽셀씩 줄이는 스윙 응용프로그램을 작성하라. 5픽셀 이하로 작아지지 않도록 하라.

package chapter10;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Q5 extends JFrame{
	public Q5() {
		setTitle("Set Size");	//제목 설정
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	//프레임 종료 시 프로그램 종료
		setSize(300, 300);	//크기 설정
		setVisible(true);	//창 보이기

		Container c = getContentPane();	//컨텐트팬 생성
		c.setLayout(new FlowLayout());	//flow 레이아웃 설정
		
		JLabel la = new JLabel("Love Java");
		la.setFont(new Font("Arial", Font.PLAIN, 10));
		c.add(la);
		
		la.setFocusable(true);
		la.requestFocus();
		
		la.addKeyListener(new KeyAdapter() {	//익명 리스너
			public void keyPressed(KeyEvent e) {	//키가 눌리면 이벤트 발생
				if (e.getKeyChar() == '+'){	
					JLabel label = (JLabel)e.getSource();
					Font f = label.getFont();
					int size = f.getSize();
					label.setFont(new Font("Arial", Font.PLAIN, size+5));
				}
				else if (e.getKeyChar() == '-'){
					JLabel label = (JLabel)e.getSource();
					Font f = label.getFont();
					int size = f.getSize();
					if (size <= 5) return;
					label.setFont(new Font("Arial", Font.PLAIN, size-5));
				}
			}
		});
	}
	public static void main(String[] args) {
		new Q5();
	}
}

 

6. 클릭 연습용 스윙 응용프로그램을 작성하라. "C"를 출력하는 JLabel을 하나 만들고 초기 위치를 (100, 100)으로 하고, "C"를 클릭할 때마다 컨텐트팬 내에 랜덤한 위치로 움직이게 하라.

package chapter10;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Q6 extends JFrame{
	public Q6() {
		setTitle("RandomC");	//제목 설정
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	//프레임 종료 시 프로그램 종료
		setSize(300, 300);	//크기 설정
		setVisible(true);	//창 보이기

		Container c = getContentPane();	//컨텐트팬 생성
		c.setLayout(null);
		
		JLabel la = new JLabel("C");
		la.setSize(10, 10);
		la.setLocation(100, 100);
		c.add(la);
		
		la.setFocusable(true);
		la.requestFocus();
		
		la.addMouseListener(new MouseAdapter() {	//익명 리스너
			public void mouseClicked(MouseEvent e) {	//키가 눌리면 이벤트 발생
				JLabel label = (JLabel)e.getSource();	//이벤트 발생 시 레퍼런스 리턴
				label.setLocation((int)(Math.random()*250), (int)(Math.random()*250));
			}
		});
	}
	public static void main(String[] args) {
		new Q6();
	}
}

 

7. JLabel을 활용하여 "Love Java"를 출력하고, "Love Java" 글자 위에 마우스를 올려 마우스 휠을 위로 굴리면 글자가 작아지고, 아래로 굴리면 글자가 커지도록 프로그램을 작성하라. 폰트 크기는 한 번에 5픽셀씩 작아지거나 커지도록 하고, 5픽셀 이하로 작아지지 않도록 하라.

package chapter10;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Q7 extends JFrame{
	public Q7() {
		setTitle("MouseWheel");	//제목 설정
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	//프레임 종료 시 프로그램 종료
		setSize(300, 300);	//크기 설정
		setVisible(true);	//창 보이기

		Container c = getContentPane();	//컨텐트팬 생성
		c.setLayout(new FlowLayout());	//flow 레이아웃 설정

		JLabel la = new JLabel("Love Java");
		la.setFont(new Font("Arial", Font.PLAIN, 15));
		c.add(la);

		la.setFocusable(true);
		la.requestFocus();

		la.addMouseWheelListener(new MouseWheelListener() {	//익명 리스너
			public void mouseWheelMoved(MouseWheelEvent e) {	//키가 눌리면 이벤트 발생
				int n = e.getWheelRotation();
				if(n < 0) {
					JLabel label = (JLabel)e.getSource();	//이벤트 발생 시 레퍼런스 리턴
					Font f = label.getFont();
					int size = f.getSize();
					label.setFont(new Font("Arial", Font.PLAIN, size+5));
				}
				else {
					JLabel label = (JLabel)e.getSource();	//이벤트 발생 시 레퍼런스 리턴
					Font f = label.getFont();
					int size = f.getSize();
					if (size <= 5) return;
					label.setFont(new Font("Arial", Font.PLAIN, size-5));
				}
			}
		});
	}
	public static void main(String[] args) {
		new Q7();
	}
}