본문 바로가기
IT/프로그래밍

명품 JAVA Programming 연습문제 12장

by nutrient 2020. 11. 30.
728x90
728x170

명품 JAVA Programming 연습문제 12장

 

 

 

 

 

 

1.FlowLayout 배치 관리자를 가진 패널의 바탕 전체에 걸쳐 “back.jpg” 이미지를 출력하고 그 위에 “Hello”버튼이 보이도록 스윙 응용프로그램을 작성하라. “back.jpg”이미지는 독자 임의로 선택하면 된다. 이 문제는 그래픽과 컴포넌트를 동시에 사용할 수 있음을 보여주기 위한 것이다. 때로는 그래픽과 컴포넌트를 동시에 사용하면 효과적이다.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



class Frame1 extends JFrame

{

        JButton btn = new JButton("Hello");

        Frame1()

        {

                this.setTitle("Test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                panel p = new panel();

                p.add(btn);

                this.add(p);

                this.setSize(300, 300);

                this.setVisible(true);

        }





}



class panel extends JPanel

{

        ImageIcon image = new ImageIcon("image/1.jpg");

        Image img = image.getImage();

        public void paintComponent(Graphics g)

        {

                super.paintComponent(g);

                g.drawImage(img,0,0,this.getWidth(),this.getHeight(),this);



        }

}







public class m1

{

        public static void main(String[] args)

        {

                new Frame1();

        }



}

 

 

2. 앞의 1번 문제에 주어진 “back.jpg”을 배경에 출력하고 그 위에 반지름이 20픽셀인 원을 하나 만들고 마우스 드래깅에 따라 원을 이동시키는 스윙 응용프로그램을 작성하라. 원의 내부는 초록색으로 채운다. 그림과 같이 마우스를 드래깅하면 마우스 포인트의 위치로 원이 따라다닌다.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



class Frame1 extends JFrame

{

        JButton btn = new JButton("Hello");

        panel p = new panel();

        Frame1()

        {

                this.setTitle("Test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                p.add(btn);

                p.addMouseMotionListener(new MyMouseListener());

                this.add(p);

                this.setSize(300, 300);

                this.setVisible(true);

        }



        class MyMouseListener implements MouseMotionListener

        {



                public void mouseDragged(MouseEvent e)

                {

                        p.x = e.getX();

                        p.y = e.getY();

                        repaint();

                }



                public void mouseMoved(MouseEvent e) {}



        }



}



class panel extends JPanel

{

        ImageIcon image = new ImageIcon("image/1.jpg");

        Image img = image.getImage();

        int x = 0;

        int y = 0;

        public void paintComponent(Graphics g)

        {

                super.paintComponent(g);

                g.drawImage(img,0,0,this.getWidth(),this.getHeight(),this);

                g.setColor(Color.GREEN);

                g.fillOval(x, y, 20, 20);

        }

}



public class m1

{

        public static void main(String[] args)

        {

                new Frame1();

        }



}

 

 

3.“apple.jpg“ 이미지를 JLabel을 이용하여 출력하고 이미지 위에서 마우스를 드래깅하여 이미지를 원하는 위치로 옮기는 스윙 응용프로그램을 작성하라. 이 문제는 컴포넌트를 이용하여 이미즐르 그리고 마우스 드래깅을 연습하기 위한 것이다. 이미지가 임의의 위치에 이동할 수 있기 위해서는 컨텐트팬의 배치 관리자를 null로 설정한다. 레이블의 크기는 이미지를 로딩한 뒤, ImageIcon.getIconHeight() 와 ImageIcon.getIconWhidth()를 이용하여 크기를 알아낼 수 있다.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



class Frame3 extends JFrame

{

        panel p = new panel();

        Frame3()

        {

                this.setTitle("Test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                p.setLayout(null);

                p.addMouseMotionListener(new MyMouseListener());

                this.add(p);

                this.setSize(300, 300);

                this.setVisible(true);

        }



        class panel extends JPanel

        {

                ImageIcon image = new ImageIcon("image/apple.jpg");

                Image img = image.getImage();

                int x = 50;

                int y = 50;

                public void paintComponent(Graphics g)

                {

                        g.drawImage(img,x,y,50,50,this);

                }

        }



        class MyMouseListener implements MouseMotionListener

        {



                public void mouseDragged(MouseEvent e)

                {

                        p.x = e.getX();

                        p.y = e.getY();

                        repaint();

                }



        public void mouseMoved(MouseEvent e) {}



        }

}



public class m3

{

        public static void main(String[] args)

        {

                new Frame3();

        }



}

 

 

4. “apple.jpg” 이미지를 로딩하여 패널 위에 그래픽으로 이미지를 그리고 이미지 위에서 마우스를 드래깅하면 드래깅 포인터를 따라 이미지를 원하는 위치로 옴길 수 있는 스윙응용프로그램을 작성하라.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



class Frame3 extends JFrame

{

        panel p = new panel();

        Frame3()

        {

                this.setTitle("Test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                p.setLayout(null);

                p.addMouseMotionListener(new MyMouseListener());

                this.add(p);

                this.setSize(300, 300);

                this.setVisible(true);

        }



        class panel extends JPanel

        {

                ImageIcon image = new ImageIcon("image/apple.jpg");

                Image img = image.getImage();

                int x = 50;

                int y = 50;

                public void paintComponent(Graphics g)

                {

                        g.drawImage(img,x,y,50,50,this);

                }

        }



        class MyMouseListener implements MouseMotionListener

        {



                public void mouseDragged(MouseEvent e)

                {

                        p.x = e.getX();

                        p.y = e.getY();

                        repaint();

                }



        public void mouseMoved(MouseEvent e) {}



        }

}



public class m3

{

        public static void main(String[] args)

        {

                new Frame3();

        }



}

 

 

5. “apple.jpg” 이미지를 로딩하여 그래픽으로 패널상의 (10,10) 위치에 원본 크기로 이미지를 그리고 + 키를 입력하면 이미지를 10% 확대하고 – 키를 입력하면 10% 축소시키는 스윙 응용프로그램을 작성하라.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



class Frame5 extends JFrame

{

        panel p = new panel();

        Frame5()

        {

                this.setTitle("Test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                p.setLayout(null);

                p.addKeyListener(new MyKeyListener());

                this.add(p);

                this.setSize(300, 300);

                this.setVisible(true);

                p.requestFocus();

        }



        class panel extends JPanel

        {

                ImageIcon image = new ImageIcon("image/apple.jpg");

                Image img = image.getImage();

                int x = 50;

                int y = 50;

                public void paintComponent(Graphics g)

                {

                        super.paintComponent(g);

                        g.drawImage(img,10,10,x,y,this);



                }

        }



        class MyKeyListener implements KeyListener

        {



                public void keyPressed(KeyEvent e)

                {

                        if(e.getKeyChar() == '+')

                        {

                                p.x = (int) (p.x+10);

                                p.y = (int) (p.y+10);

                                repaint();

                        }

                        else if(e.getKeyChar() == '-')

                        {

                                p.x = (int) (p.x-10);

                                p.y = (int) (p.y-10);

                                repaint();

                        }

                }



                public void keyReleased(KeyEvent arg0) {}



                public void keyTyped(KeyEvent arg0) {}



        }

}



public class m5

{

        public static void main(String[] args)

        {

                new Frame5();

        }



}

 

6. 아래 그림과 같은 기하학적인 모양을 그려라. 그림처럼 프레임의 크기를 조절하면 자동으로 크기가 조절된다.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



class Frame6 extends JFrame

{

        panel p = new panel();

        Frame6()

        {

                this.setTitle("Test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                this.add(p);

                this.setSize(300, 300);

                this.setVisible(true);

        }



        class panel extends JPanel

        {

                public void paintComponent(Graphics g)

                {

                        super.paintComponent(g);

                        int w = p.getWidth();

                        int h = p.getHeight();

                        int t_x =w/2;

                        int t_y =0;

                        int l_x =0;

                        int l_y =h/2;

                        int b_x = w/2;

                        int b_y = h;

                        int r_x = w;

                        int r_y = h/2;



                        for(int i = 0; i<10; i++)

                        {

                                int[] x = {t_x,l_x,b_x,r_x};

                                int[] y = {t_y,l_y,b_y,r_y};

                                t_y += 10;

                                b_y -= 10;

                                l_x += 10;

                                r_x -= 10;

                                g.drawPolygon(x, y, 4);

                        }



                }

        }



}



public class m6

{

        public static void main(String[] args)

        {

                new Frame6();

        }



}

 

7. JLabel을 상속받고 배경색이 항상파란색인 BlueLabel 컴포넌트를 구현하라. 즉, 이 레이블 컴포넌트의 색을 변경하기 위해 setBackground()메소드를 이용하여 배경색을 변경하여도 효과가 없게 하라. BlueLabel을 만드는 방법은 두가지가 있다. BlueLabel의 paintComponent() 메소드를 오버라이딩하여 강제로 파란 배경색을 칠하는 방법과 setBackground()메소드를 오버라이딩하여 배경색을 외부에서 설정할 때 무시하고 항상 파란색으로 설정되게 하는 방법이다. 두 방법 중 한가지를 사용하라. 아래의 결과 화면은 10픽셀 크기의 “hello”문자열을 가진 BlueLabel 컴포넌트와 이텔릭체의 큰 픽셀 크기를 가진 “Big Hello” 문자열의 BlueLabel 컴포넌트를 출력한 예이다.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



class Frame7 extends JFrame

{

        JPanel p = new JPanel();

        Frame7()

        {

                this.setTitle("test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                la la = new la("Hello");

                la la1 = new la("Big Hello", 50);

                p.add(la1);

                p.add(la);

                this.add(p);

                this.setSize(400,200);

                this.setVisible(true);

        }



        class la extends JLabel

        {



                la(String a)

                {

                        super(a);

                        this.setOpaque(true);

                        this.setFont(new Font("Arial",Font.PLAIN, 20));

                        this.setForeground(Color.WHITE);

                        this.setBackground(Color.BLUE);

                }

                la(String a, int b)

                {

                        super(a);

                        this.setFont(new Font("Arial",Font.ITALIC, b));

                        this.setOpaque(true);

                        this.setForeground(Color.PINK);

                        this.setBackground(Color.BLUE);

                }

                public void paintComponent(Graphics g)

                {

                        super.paintComponent(g);

                        this.setBackground(Color.BLUE);

                        repaint();

                }

        }

}



public class m7

{



        public static void main(String[] args)

        {

                new Frame7();

        }



}

 

9.파이 차트 만들기이다. 다음 그림과 같이 apple, cherry, strawberry, prune의 4가지 종류의 과일 판매량을 입력하면 전체 판매량에서 백분율(%)을 게산하여 문자열과 파이 차트로 동시에 출력되도록 하라. 텍스트필드 컴포넌트의 창에 수를 입력하고 <Enter>키를 치면 Action 이벤트가 발생한다. JTextField 의 Action 이벤트 리스너에서 백분율을 계산하고 파이 차트를 그린다.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



class Frame9 extends JFrame

{

        JPanel p = new JPanel();

        panel pdraw = new panel();

        JLabel apple = new JLabel("apple");

        JLabel cherry = new JLabel("cherry");

        JLabel strawberry = new JLabel("strawberry");

        JLabel prune = new JLabel("prune");

        JTextField aTF = new JTextField(10);

        JTextField cTF = new JTextField(10);

        JTextField sTF = new JTextField(10);

        JTextField pTF = new JTextField(10);

        JLabel la_a = new JLabel("1");

        JLabel la_c = new JLabel("1");

        JLabel la_s = new JLabel("1");

        JLabel la_p = new JLabel("1");



        Frame9()

        {

                this.setTitle("test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                this.setLayout(new BorderLayout(0,20));

                p.add(apple);

                p.add(aTF);

                p.add(cherry);

                p.add(cTF);

                p.add(strawberry);

                p.add(sTF);

                p.add(prune);

                p.add(pTF);

                aTF.addActionListener(new MyActionListener());

                cTF.addActionListener(new MyActionListener());

                sTF.addActionListener(new MyActionListener());

                pTF.addActionListener(new MyActionListener());

                la_a.setForeground(Color.RED);

                la_c.setForeground(Color.BLUE);

                la_s.setForeground(Color.PINK);

                la_p.setForeground(Color.YELLOW);

                pdraw.add(new JLabel("apple"));

                pdraw.add(la_a);

                pdraw.add(new JLabel("%"+"          "));

                pdraw.add(new JLabel("cherry"));

                pdraw.add(la_c);

                pdraw.add(new JLabel("%"+"          "));

                pdraw.add(new JLabel("strawberry"));

                pdraw.add(la_s);

                pdraw.add(new JLabel("%"+"          "));

                pdraw.add(new JLabel("prune"));

                pdraw.add(la_p);

                pdraw.add(new JLabel("%"+"          "));

                this.add(p, BorderLayout.NORTH);

                this.add(pdraw, BorderLayout.CENTER);

                this.setSize(800,400);

                this.setVisible(true);

        }



        class panel extends JPanel

        {



                public void paintComponent(Graphics g)

                {

                        super.paintComponent(g);

                        int A = Integer.parseInt(la_a.getText());

                        int C = Integer.parseInt(la_c.getText());

                        int S = Integer.parseInt(la_s.getText());

                        int P = Integer.parseInt(la_p.getText());

                        int sum = A+C+S+P;

                        int A_a = (A*360)/sum;

                        int C_c = (C*360)/sum;

                        int S_s = (S*360)/sum;

                        int P_p = (P*360)/sum;

                        g.setColor(Color.RED);

                        g.fillArc(290, 50, 250, 250, 0,  A_a);

                        g.setColor(Color.BLUE);

                        g.fillArc(290, 50, 250, 250, A_a, C_c);

                        g.setColor(Color.PINK);

                        g.fillArc(290, 50, 250, 250, A_a+C_c, S_s);

                        g.setColor(Color.YELLOW);

                        g.fillArc(290, 50, 250, 250, A_a+C_c+S_s,P_p);

                        repaint();

                }

        }



        class MyActionListener implements ActionListener

        {

                public void actionPerformed(ActionEvent e)

                {

                        int apple_var = Integer.parseInt(aTF.getText());

                        int cherry_var = Integer.parseInt(cTF.getText());

                        int strawberry_var = Integer.parseInt(sTF.getText());

                        int prune_var = Integer.parseInt(pTF.getText());

                   int sum = apple_var + cherry_var + strawberry_var + prune_var;



                        la_a.setText(Integer.toString((apple_var*100)/sum));

                        la_c.setText(Integer.toString((cherry_var*100)/sum));

                        la_s.setText(Integer.toString((strawberry_var*100)/sum));

                        la_p.setText(Integer.toString((prune_var*100)/sum));



                }



        }

}



public class m9

{

        public static void main(String[] args)

        {

                new Frame9();

        }



}
 
 
 
 
728x90
그리드형

댓글