-> 블로그 이전

[명품 Java] 9장 실습문제 (자바 GUI 기초 / AWT와 스윙)

2021. 12. 19. 20:07Solution`/Java

[9장 1번]

"Let's study Java"라는 문자열을 타이틀로 가지고 프레임의 크기가 400x200인 스윙 프로그램을 작성하라.

package Java9_1;
import javax.swing.*;

public class Java9_1 extends JFrame{
    Java9_1(){
        super("Let's study Java");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 200);
        setVisible(true);
    }
    public static void main(String[] args) {
        Java9_1 test = new Java9_1();
    }
}

 

 

[9장 2번]

BorderLayout을 사용하여 컴포넌트 사이의 수평 수직 간격이 각각 5, 7픽셀이 되도록 스윙 프로그램을 작성하라

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

public class Java9_2 extends JFrame{
    Java9_2(){
        super("BorderLayout Practice");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(new BorderLayout(5, 7));
        c.add(new JButton("North"), BorderLayout.NORTH);
        c.add(new JButton("West"), BorderLayout.WEST);
        c.add(new JButton("East"), BorderLayout.EAST);
        c.add(new JButton("South"), BorderLayout.SOUTH);
        c.add(new JButton("Center"), BorderLayout.CENTER);

        setSize(400, 400);
        setVisible(true);
    }
    public static void main(String[] args) {
        Java9_2 test = new Java9_2();
    }
}

 

 

[9장 3번]

GridLayout을 사용하여 한 줄에 10개의 버튼을 동일한 크기로 배치하는 스윙 프로그램을 작성하라.

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

public class Java9_3 extends JFrame{
    Java9_3(){
        super("Ten Color Buttons Frame");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(new GridLayout());
        c.add(new JButton("0"));
        c.add(new JButton("1"));
        c.add(new JButton("2"));
        c.add(new JButton("3"));
        c.add(new JButton("4"));
        c.add(new JButton("5"));
        c.add(new JButton("6"));
        c.add(new JButton("7"));
        c.add(new JButton("8"));
        c.add(new JButton("9"));

        setSize(500, 500);
        setVisible(true);
    }
    public static void main(String[] args) {
        Java9_3 test = new Java9_3();
    }
}

 

 

[9장 4번]

문제 3을 수정하여 다음 결과와 같이 각 버튼의 배경색을 서로 다르게 설정하라

package Java9_4;

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

public class Java9_4 extends JFrame{
    Java9_4(){
        super("Ten Color Buttons Frame");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(new GridLayout(1, 10));

        Color color;
        for(Integer i=0; i<10; i++){
            Component comp = add(new JButton(i.toString()));
            Random ran = new Random();
            int r = ran.nextInt(256);
            int g = ran.nextInt(256);
            int b = ran.nextInt(256);
            color = new Color(r, g, b);
            comp.setBackground(color);
        }

        setSize(800, 400);
        setVisible(true);
    }
    public static void main(String[] args) {
        Java9_4 test = new Java9_4();
    }
}

 

 

[9장 5번]

GridLayout을 이용하여 다음 그림과 같이 Color.WHITE, Color.GRAY, Color.RED 등 16개의 색을 배경색으로 하는 4 X 4 바둑판을 구성하라.

package Java9_5;
import javax.swing.*;
import java.awt.*;
import java.util.Random;

public class Java9_5 extends JFrame{
    Java9_5(){
        super("Ten Color Buttons Frame");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(new GridLayout(4, 4));

        Color color;
        for(int i=0; i<16; i++){
            JLabel jl = (JLabel) add(new JLabel(String.valueOf(i)));
            Random ran = new Random();
            int r = ran.nextInt(256);
            int g = ran.nextInt(256);
            int b = ran.nextInt(256);
            color = new Color(r, g, b);
            jl.setBackground(color);
            jl.setOpaque(true);
        }

        setSize(800, 400);
        setVisible(true);
    }
    public static void main(String[] args) {
        new Java9_5();
    }
}

 

 

[9장 6번]

20개의 10 x 10 크기의 JLabel 컴포넌트가 프레임 내에 (50, 50) 위치에서 (250, 250) 영역에서 랜덤한 위치에 출력되도록 스윙 프로그램을 작성하라. 프레임의 크기를 300 x 300으로 하고, JLabel의 배경색은 모두 파란색으로 하라.

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

public class Java9_6 extends JFrame{
    Java9_6(){
        super("Random Labels");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(null);
        for(int i=0; i<20; i++){
            JLabel jl = new JLabel();
            jl.setBackground(Color.BLUE);
            int x = (int)(Math.random()*200)+50;
            int y = (int)(Math.random()*200)+50;
            jl.setSize(10, 10);
            jl.setLocation(x, y);
            jl.setOpaque(true);
            c.add(jl);
        }

        setSize(300, 300);
        setVisible(true);
    }
    public static void main(String[] args) {
        new Java9_6();
    }
}

 

 

[9장 7번]

다음과 같은 GUI 모양을 가진 스윙 프레임을 작성하라.

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

class NorthPanel extends JPanel{
    public NorthPanel(){
        setBackground(Color.LIGHT_GRAY);
        add(new JLabel(" 수식 입력"));
        add(new JTextField(16));
        setLayout(new FlowLayout(FlowLayout.CENTER));
    }
}

class CenterPanel extends JPanel{
    public CenterPanel(){
        String[] str = {"CE", "계산", "+", "-", "X", "/"};
        setLayout(new GridLayout(4, 4, 2, 2));

        for(int i=0; i<=9; i++){
            add(new JButton(Integer.toString(i)));
        }
        for(int i=0; i<6; i++){
            JButton jb = new JButton(str[i]);
            if(i>=2 && i<6)
                jb.setBackground(Color.GREEN);
            add(jb);
        }
    }
}

class SouthPanel extends JPanel{
    public SouthPanel(){
        setBackground(Color.YELLOW);
        setLayout(new FlowLayout(FlowLayout.LEFT));
        add(new JLabel(" 계산 결과"));
        add(new JTextField(16));
    }
}

public class Java9_7 extends JFrame{
    Java9_7(){
        super("계산기 프레임");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(new BorderLayout());
        c.add(new NorthPanel(), BorderLayout.NORTH);
        c.add(new CenterPanel(), BorderLayout.CENTER);
        c.add(new SouthPanel(), BorderLayout.SOUTH);

        setSize(300, 300);
        setVisible(true);
    }
    public static void main(String[] args) {
        new Java9_7();
    }
}

 

 

[9장 8번]

다음과 같은 GUI 모양을 가진 스윙 프레임을 작성하라. 10개의 '*' 문자는 10개의 JLabel을 이용하여 랜덤한 위치에 출력하라.

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

class North extends JPanel{
    North(){
        setBackground(Color.GRAY);
        JButton jb1 = new JButton("열기");
        JButton jb2 = new JButton("닫기");
        JButton jb3 = new JButton("나가기");
        add(jb1); add(jb2); add(jb3);
    }
}

class Center extends JPanel{
    Center(){
        setBackground(Color.WHITE);
        setLayout(null);
        for(int i=0; i<10; i++){
            int x = (int)(Math.random()*200);
            int y = (int)(Math.random()*200);
            JLabel jb = new JLabel("*");
            jb.setBounds(x, y, 20, 20);
            add(jb);
        }
    }
}

class South extends JPanel{
    South(){
        setBackground(Color.YELLOW);
        JButton jb = new JButton("Word Input");
        JTextField jtf = new JTextField(16);
        add(jb); add(jtf);
    }
}

public class Java9_8 extends JFrame{
    Java9_8(){
        super("여러 개의 패널을 가진 프레임");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(new BorderLayout());
        c.add(new North(), BorderLayout.NORTH);
        c.add(new Center(), BorderLayout.CENTER);
        c.add(new South(), BorderLayout.SOUTH);

        setSize(400,400);
        setVisible(true);
    }
    public static void main(String[] args) {
        new Java9_8();
    }
}