-> 블로그 이전

[명품 Java] 10장 실습문제 (자바의 이벤트 처리)

2021. 12. 20. 18:45Solution`/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();
    }
}