대학교 수업/Java 프로그래밍

[Java] 명품 자바 프로그래밍 12장 실습문제

Jongung 2022. 11. 22. 13:30

1-1 번

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

public class Chapter12 extends JFrame {
    Chapter12(){
        setTitle("이미지 그리기 연습");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(new MyPanel());

        setSize(300,300);
        setVisible(true);
    }

    class MyPanel extends JPanel {
        ImageIcon icon = new ImageIcon("src/back.jpg");
       	Image img = icon.getImage();

        public MyPanel() {
            setLayout(new FlowLayout());
            add(new JButton("Hide/Show"));
        }

        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
        }
    }

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

 

1-2 번

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

public class Chapter12 extends JFrame {
    Chapter12(){
        setTitle("이미지 그리기 연습");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(new MyPanel());

        setSize(300,300);
        setVisible(true);
    }

    class MyPanel extends JPanel {
        ImageIcon icon = new ImageIcon("src/back.jpg");
        Image img = icon.getImage();
        JButton button = new JButton("Hide/Show");
        boolean isHide = true;

        public MyPanel() {
            setLayout(new FlowLayout());
            add(button);
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if(isHide){
                        isHide = false;
                    }else{
                        isHide = true;
                    }
                    MyPanel.this.repaint();
                }
            });
        }

        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            if(!isHide){
                g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
            }
        }
    }

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

 

2번

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

public class Chapter12 extends JFrame {
    Chapter12(){
        setTitle("이미지 위에 원 드래깅 연습");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(new MyPanel());

        setSize(300,300);
        setVisible(true);
    }

    class MyPanel extends JPanel {
        ImageIcon icon = new ImageIcon("src/back.jpg");
        Image img = icon.getImage();
        Point point;
        public MyPanel() {
            setLayout(new FlowLayout());
            addMouseMotionListener(new MouseAdapter() {
                @Override
                public void mouseDragged(MouseEvent e) {
                    super.mouseDragged(e);
                    point = e.getPoint();
                    repaint();
                }

            });
        }

        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
            if (point != null) {
                g.setColor(Color.GREEN);
                g.fillOval((int) point.getX(), (int)point.getY(), 20, 20);
            }
        }
    }

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

 

3번

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

public class Chapter12 extends JFrame {
    public Chapter12(){
        setTitle("이미지 레이블 드래깅 연습");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(null);

        ImageIcon icon = new ImageIcon("src/apple.jpg");
        JLabel imageLabel = new JLabel(icon);

        imageLabel.setSize(icon.getIconHeight(),icon.getIconWidth());
        imageLabel.setLocation(100,100);

        MyMouseListener  ml = new MyMouseListener();
        imageLabel.addMouseListener(ml);
        imageLabel.addMouseMotionListener(ml);

        c.add(imageLabel);
        setSize(300,300);
        setVisible(true);
    }

    class MyMouseListener extends MouseAdapter {
        Point startP;

        public void mousePressed(MouseEvent e) {
            startP = e.getPoint();
        }

        public void mouseReleased(MouseEvent e) {
            Point endP = e.getPoint();
            Component la = (JComponent)(e.getSource());
            Point p = la.getLocation();
            la.setLocation(p.x + endP.x - startP.x, p.y + endP.y - startP.y);
            la.getParent().repaint();
        }

        public void mouseDragged(MouseEvent e) {
            Point endP = e.getPoint();
            Component la = (JComponent)(e.getSource());
            Point p = la.getLocation();
            la.setLocation(p.x + endP.x - startP.x, p.y + endP.y - startP.y);
            la.getParent().repaint();
        }
    }

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

 

4번

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

public class Chapter12 extends JFrame {
    int imgWidth;
    int imgHeight;
    Point startPoint = new Point(0,0);
    Point endPoint = new Point(0,0);
    public Chapter12(){
        setTitle("이미지 레이블 드래깅 연습");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(new MyPanel());

        setSize(300,300);
        setVisible(true);
    }

    class MyPanel extends JPanel{
        Image img;
        ImageIcon icon;

        MyPanel(){
            icon = new ImageIcon("src/apple.jpg");
            img = icon.getImage();
            imgWidth = img.getWidth(this);
            imgHeight = img.getHeight(this);
            addMouseListener(new MyMouseListener());
            addMouseMotionListener(new MyMouseListener());
        }
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            g.drawImage(img, (int)startPoint.getX(), (int)startPoint.getY(), icon.getIconWidth(), icon.getIconHeight(), this);
            endPoint.setLocation(startPoint.getX() + imgWidth, startPoint.getY() + imgHeight);
        }
    }


    class MyMouseListener extends MouseAdapter {
        Point startP = new Point(50 ,50 );
        public void mousePressed(MouseEvent e) {
            startP = e.getPoint();
        }

        public void mouseReleased(MouseEvent e) {
            Point endP = e.getPoint();
            Component la = (JComponent)(e.getSource());
            Point p = la.getLocation();
            la.setLocation(p.x + endP.x - startP.x, p.y + endP.y - startP.y);
            la.getParent().repaint();
        }

        public void mouseDragged(MouseEvent e) {
            Point endP = e.getPoint();
            Component la = (JComponent)(e.getSource());
            Point p = la.getLocation();
            la.setLocation(p.x + endP.x - startP.x, p.y + endP.y - startP.y);
            la.getParent().repaint();
        }
    }

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

 

5번

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

public class Chapter12 extends JFrame {
    Chapter12(){
        setTitle("그래픽 이미지 확대 축소 연습");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(new MyPanel());
        setSize(300,300);
        setVisible(true);

        getContentPane().setFocusable(true);
        getContentPane().requestFocus();
    }

    class MyPanel extends JPanel {
        ImageIcon icon = new ImageIcon("src/apple.jpg");
        Image img = icon.getImage();
        int width, height;

        public MyPanel() {
            width = img.getWidth(this);
            height = img.getHeight(this);

            addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent e) {
                    if(e.getKeyChar() == '+') {
                        width = (int)(width * 1.1);
                        height = (int)(height * 1.1);
                        repaint();
                    }
                    else if(e.getKeyChar() == '-') {
                        width = (int)(width*0.9);
                        height = (int)(height*0.9);
                        repaint();
                    }
                }
            });
        }
        public void paintComponent(Graphics g) {
            g.drawImage(img, 10, 10, width, height, this);
        }
    }

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

 

6-1번

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

public class Chapter12 extends JFrame {
    public Chapter12(){
        setTitle("격자 그리기");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(new MyPanel());
        setVisible(true);
        setSize(300, 300);
    }
    class MyPanel extends JPanel {
        public void paintComponent(Graphics g) {
            for (int i = 1; i < 10; i++) {
                g.setColor(Color.BLACK);
                g.drawLine(0, this.getHeight() / 10 * i, this.getWidth(), this.getHeight() / 10 * i);
            }
            for (int i = 1; i < 10; i++) {
                g.setColor(Color.BLACK);
                g.drawLine( this.getWidth() / 10 * i, 0,  this.getWidth() / 10 * i, this.getHeight());
            }
        }
    }

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

 

6-2번

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

public class Chapter12 extends JFrame {
    public Chapter12(){
        setTitle("격자 그리기");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(new MyPanel());
        setVisible(true);
        setSize(300, 300);
    }
    class MyPanel extends JPanel {
        public void paintComponent(Graphics g){
            int width, height;
            int count = 10;
            for(int i = 0; i < 10; i++) {
                width = this.getWidth();
                height = this.getHeight();
                int ci = count * i;
                g.setColor(Color.BLACK);
                g.drawLine(ci, height / 2, width / 2, ci);
                g.drawLine(width / 2, ci, width - ci, height / 2);
                g.drawLine(width - ci, height / 2, width / 2, height - ci);
                g.drawLine(width / 2, height - ci, ci, height / 2);
            }
        }
    }

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

 

7번

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

public class Chapter12 extends JFrame {
    public Chapter12(){
        super("마우스로 페다각형 그리기");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(new MyPanel());
        
        setSize(300,300);
        setVisible(true);
    }

    class MyPanel extends JPanel {
        Vector<Integer> x = new Vector<Integer>();
        Vector<Integer> y = new Vector<Integer>();

        public MyPanel() {
            addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
                    x.add(e.getX());
                    y.add(e.getY());
                    repaint();
                }
            });
        }

        public void paintComponent(Graphics g) {
            int xArr [] = new int [x.size()];
            int yArr [] = new int [y.size()];

            for(int i=0; i<x.size(); i++) {
                xArr[i] = x.get(i);
                yArr[i] = y.get(i);
            }
            g.setColor(Color.MAGENTA);
            g.drawPolygon(xArr, yArr, xArr.length);
        }
    }

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

 

8번

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

public class Chapter12 extends JFrame{
    class Circle{
        Point center, start;
        int radius;
        Circle(Point point){
            center = point;
        }
        void centerPosition(){
            int x, y;
            x = (start.x - center.x) * (start.x - center.x);
            y = (start.y - center.y) * (start.y - center.y);
            radius = (int)Math.sqrt(x + y);
        }
    }
    Circle nCircle;
    Chapter12(){
        setTitle("마우스로 원 그리기");
        setDefaultCloseOperation(3);
        Container c = getContentPane();
        c.add(new MyPanel());
        setSize(1000, 500);
        setVisible(true);
    }

    class MyPanel extends JPanel{
        Vector<Circle> vector = new Vector<Circle>(); //Vector를 통해 그려졌던 모든 Circle 기억
        public MyPanel(){
            addMouseListener(new MyMouseListener());
            addMouseMotionListener(new MyMouseListener());
        }
        public void paintComponent(Graphics g){
            for(int i = 0; i < vector.size(); i++){
                Circle drawCircle = vector.elementAt(i);
                g.setColor(Color.MAGENTA);
                g.drawOval(drawCircle.start.x - drawCircle.radius / 2,
                        drawCircle.start.y - drawCircle.radius/2,
                        drawCircle.radius, drawCircle.radius);
            }
        }
        class MyMouseListener extends MouseAdapter {
            public void mousePressed(MouseEvent e) {
                nCircle = new Circle(e.getPoint());
            }
            public void mouseDragged(MouseEvent e) {
                nCircle.start = e.getPoint();
                nCircle.centerPosition();
                vector.add(nCircle);
                repaint();
            }
        }
    }
    public static void main(String[] args){
        new Chapter12();
    }
}

 

9번

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

public class Chapter12 extends JFrame {
    public Chapter12(){
        setTitle("Blue Label 만들기");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(new FlowLayout());

        BlueLabel blueLabel1 = new BlueLabel("hello");
        blueLabel1.setBackground(Color.RED);
        blueLabel1.setForeground(Color.YELLOW);
        c.add(blueLabel1);

        BlueLabel2 blueLabel2 = new BlueLabel2("Big Hello");
        blueLabel2.setOpaque(true);
        blueLabel2.setFont(new Font("TimesRoman", Font.ITALIC, 50));
        blueLabel2.setBackground(Color.RED);
        blueLabel2.setForeground(Color.MAGENTA);
        c.add(blueLabel2);

        setSize(300,200);
        setVisible(true);
    }

    class BlueLabel extends JLabel {
        public BlueLabel(String text) {
            super(text);
        }

        public void paintComponent(Graphics g) {
            g.setColor(Color.BLUE);
            g.fillRect(0,0,this.getWidth(), this.getHeight());
            super.paintComponent(g);
        }
    }

    class BlueLabel2 extends JLabel {
        public BlueLabel2(String text) {
            super(text);
        }

        public void setBackground(Color c) {
            super.setBackground(Color.BLUE);
            return;
        }
    }

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

 

10번

import javafx.concurrent.Task;

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

public class Chapter12 extends JFrame{
    public Chapter12(){
        setTitle("그래픽 이미지 연습");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(new MyPanel());
        setSize(400, 400);
        setVisible(true);
    }
    class MyPanel extends JPanel{
        private ImageIcon icon = new ImageIcon("src/back.jpg");
        private Image image = icon.getImage();
        public void paintComponent(Graphics g){
            int widthDivide = this.getWidth() / 2;
            int heightDivide = this.getHeight() / 2;

            g.setClip(0, 0, widthDivide - 5, heightDivide - 5);
            g.drawImage(image, 0, 0, getWidth(), getHeight(), this);

            g.setClip(getWidth() / 2 + 5, 0, widthDivide - 5, heightDivide - 5);
            g.drawImage(image, 0, 0, getWidth(), getHeight(), this);

            g.setClip(0, getHeight() / 2 + 5, widthDivide - 5, heightDivide - 5);
            g.drawImage(image, 0, 0, getWidth(), getHeight(), this);

            g.setClip(getWidth() / 2 + 5, getHeight() / 2 + 5, widthDivide - 5, heightDivide - 5);
            g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
        }
    }
    public static void main(String[] args){
        new Chapter12();
    }
}

 

11번

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

public class Chapter12 extends JFrame {
    int [] data = {25,25,25,25};
    int [] arcAngle = new int [4];
    Color [] color = {Color.RED, Color.BLUE, Color.MAGENTA, Color.ORANGE};
    String [] itemName = {"apple", "cherry", "strawberry", "prune"};
    JTextField [] tf = new JTextField [4];
    ChartPanel chartPanel = new ChartPanel();

    Chapter12() {
        setTitle("파이 차트 그리기");
        setDefaultCloseOperation(3);
        Container c = getContentPane();
        c.add(new InputPanel(), BorderLayout.NORTH);
        c.add(chartPanel, BorderLayout.CENTER);
        setSize(500,350);
        setVisible(true);
        drawChart();
    }

    void drawChart() {
        int sum=0;
        for(int i=0; i<data.length; i++) {
            data[i] = Integer.parseInt(tf[i].getText());
            sum+=data[i];
        }

        if(sum == 0) return;

        for(int i=0; i<data.length; i++)
            arcAngle[i]=(int)Math.round((double)data[i]/(double)sum*360);

        chartPanel.repaint();
    }

    class InputPanel extends JPanel {
        InputPanel() {
            setBackground(Color.LIGHT_GRAY);
            for(int i=0; i<tf.length; i++) {
                tf[i] = new JTextField("25", 5);
                tf[i].addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        drawChart();
                    }
                });
                add(new JLabel(itemName[i]));
                add(tf[i]);
            }
        }
    }

    class ChartPanel extends JPanel {
        public void paintComponent(Graphics g) {
            int startAngle = 0;
            for(int i=0; i<data.length; i++) {
                g.setColor(color[i]);
                g.drawString(itemName[i]+" "+Math.round(arcAngle[i]*100./360.)+"%", 50+i*100, 20);
            }
            for(int i=0; i<data.length; i++) {
                g.setColor(color[i]);
                g.fillArc(150,50,200,200,startAngle, arcAngle[i]);
                startAngle = startAngle + arcAngle[i];
            }
        }
    }

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