[명품 Java] 9장 실습문제 (자바 GUI 기초 / AWT와 스윙)
2021. 12. 19. 20:07ㆍSolution`/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();
}
}