[명품 Java] 10장 실습문제 (자바의 이벤트 처리)
2021. 12. 20. 18:45ㆍSolution`/Java
[10장 1번]
JLabel 컴포넌트는 Mouse 이벤트를 받을 수 있다. JLabel 컴포넌트에 마우스를 올리면 "Love Java"가, 내리면 "사랑해"가 출력되도록 스윙 응용프로그램을 작성하라
package Java10_1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Java10_1 extends JFrame{
private JLabel la = new JLabel("사랑해");
Java10_1(){
super("마우스 올리기 내리기");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(la);
la.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
JLabel b = (JLabel)e.getSource();
b.setText("Love Java");
}
@Override
public void mouseExited(MouseEvent e) {
JLabel b = (JLabel)e.getSource();
b.setText("사랑해");
}
});
setSize(400, 400);
setVisible(true);
c.setFocusable(true);
c.requestFocus();
}
public static void main(String[] args) {
new Java10_1();
}
}
[10장 2번]
컨텐트팬의 배경색은 초록색으로 하고 마우스를 드래깅하는 동안만 노란색으로 유지하는 스윙 응용프로그램을 작성하라
package Java10_2;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
public class Java10_2 extends JFrame{
Java10_2(){
super("드래깅동안 YELLOW");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setBackground(Color.GREEN);
c.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
Container c = (Container)e.getSource();
c.setBackground(Color.YELLOW);
}
});
c.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
Container c = (Container)e.getSource();
c.setBackground(Color.GREEN);
}
});
setSize(400, 400);
setVisible(true);
c.setFocusable(true);
c.requestFocus();
}
public static void main(String[] args) {
new Java10_2();
}
}
[10장 3번]
JLabel을 활용하여 "Love Java"를 출력하고 왼쪽 화살표 키(<Left> 키)를 입력할 때마다 "avaJ evoL"와 "Love Java"를 번갈아 출력하는 스윙 프로그램을 작성하라
package Java10_3;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class Java10_3 extends JFrame {
private JLabel la = new JLabel("Love Java");
Java10_3(){
super("Left 키로 문자열 교체");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(la);
c.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
switch(keyCode){
case KeyEvent.VK_LEFT:
if(la.getText().equals("Love Java"))
la.setText("avaJ evoL");
else
la.setText("Love Java");
break;
default:
break;
}
}
});
setSize(400, 400);
setLocationRelativeTo(null);
setVisible(true);
c.setFocusable(true);
c.requestFocus();
}
public static void main(String[] args) {
new Java10_3();
}
}
[10장 4번]
JLabel을 활용하여 "Love Java"를 출력하고 왼쪽 화살표 키(<Left> 키)를 입력할 때마다 "ove JavaL", "ve JavaLo", "e JavaLov"와 같이 한 문자씩 왼쪽으로 회전하는 프로그램을 작성하라
package Java10_4;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class Java10_4 extends JFrame {
private JLabel la = new JLabel("Love Java");
private String str = "Love Java";
Java10_4(){
super("Left 키로 문자열 이동");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(la);
c.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_LEFT){
str = str.substring(1) + str.substring(0, 1);
la.setText(str);
}
}
});
setSize(400, 400);
setLocationRelativeTo(null);
setVisible(true);
c.setFocusable(true);
c.requestFocus();
}
public static void main(String[] args) {
new Java10_4();
}
}
[10장 5번]
JLabel 컴포넌트로 "Love Java"를 출력하고, 키 리스너를 작성하여 +키를 치면 폰트 크기를 5픽셀씩 키우고, -키를 치면 폰트 크기를 5픽셀씩 줄이는 스윙 응용프로그램을 작성하라. 5픽셀 이하로 작아지지 않도록 하라
package Java10_5;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class Java10_5 extends JFrame{
private JLabel la = new JLabel("Love Java");
Java10_5(){
super("+,-키로 폰트 크기 조절");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
la.setFont(new Font("Arial", Font.PLAIN, 10));
c.add(la);
c.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
Font f = la.getFont();
int size = f.getSize();
switch(e.getKeyCode()) {
case 61://+
la.setFont(new Font("Arial", Font.PLAIN, size + 5));
break;
case 45:
if (size > 5) {
la.setFont(new Font("Arial", Font.PLAIN, size - 5));
}
break;
}
}
});
setSize(400, 400);
setLocationRelativeTo(null);
setVisible(true);
c.setFocusable(true);
c.requestFocus();
}
public static void main(String[] args) {
new Java10_5();
}
}
[10장 6번]
클릭 연습용 스윙 응용프로그램을 작성하라. "C"를 출력하는 JLabel을 하나 만들고 초기 위치를 (100, 100)으로 하고, "C"를 클릭할 때마다 컨텐트팬 내에 랜덤한 위치로 움직이게 하라
package Java10_6;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Java10_6 extends JFrame {
private JLabel la = new JLabel("C");
Java10_6(){
super("클릭 연습 용 응용프로그램");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(null);
la.setBounds(100, 100, 50, 50);
c.add(la);
c.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int x = (int)(Math.random()*390);
int y = (int)(Math.random()*390);
la.setLocation(x, y);
}
});
setSize(400, 400);
setLocationRelativeTo(null);
setVisible(true);
c.setFocusable(true);
c.requestFocus();
}
public static void main(String[] args) {
new Java10_6();
}
}
[10장 7번]
JLabel을 활용하여 "Love Java"를 출력하고, "Love Java" 글자 위에 마우스를 올려 마우스 휠을 위로 굴리면 글자가 작아지고, 아래로 굴리면 글자가 커지도록 프로그램을 작성하라. 폰트 크기는 한 번에 5픽셀씩 작아지거나 커지도록 하고, 5픽셀 이하로 작아지지 않도록 하라.
package Java10_7;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseWheelEvent;
public class Java10_7 extends JFrame {
private JLabel la = new JLabel("Love Java");
Java10_7(){
super("마우스 휠을 굴려 폰트 크기 조절");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
la.setFont(new Font("Arial", Font.PLAIN, 10));
c.add(la);
la.addMouseWheelListener(new MouseAdapter() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
int n = e.getWheelRotation(); // 음수면 휠 위로, 양수면 휠 아래로
Font f = la.getFont();
int size = f.getSize();
if(n>0)
la.setFont(new Font("Arial", Font.PLAIN, size + 5));
else{
if (size > 5) {
la.setFont(new Font("Arial", Font.PLAIN, size - 5));
}
}
}
});
setSize(400, 400);
setLocationRelativeTo(null);
setVisible(true);
c.setFocusable(true);
c.requestFocus();
}
public static void main(String[] args) {
new Java10_7();
}
}