Question 1.
다음과 같이 출력하는 프로그램을 작성하라.
(1) 삼색원
코드
import java.awt.*;
import javax.swing.*;
public class Question1 extends JFrame{
public Question1() {
this.setTitle("");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
this.setContentPane(new MyPanel());
this.setSize(200, 200);
this.setVisible(true);
}
private class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillArc(5, 5, getWidth()-10, getHeight()-10, 90, 120);
g.setColor(Color.BLUE);
g.fillArc(5, 5, getWidth()-10, getHeight()-10, 210, 120);
g.setColor(Color.YELLOW);
g.fillArc(5, 5, getWidth()-10, getHeight()-10, 330, 120);
}
}
public static void main(String[] args) {
new Question1();
}
}
(2) 오륜기
코드
import java.awt.*;
import javax.swing.*;
public class Question1 extends JFrame{
public Question1() {
this.setTitle("");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
this.setContentPane(new MyPanel());
this.setSize(300, 200);
this.setVisible(true);
}
private class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.drawOval(50, 20, 60, 60);
g.setColor(Color.BLACK);
g.drawOval(120, 20, 60, 60);
g.setColor(Color.RED);
g.drawOval(190, 20, 60, 60);
g.setColor(Color.YELLOW);
g.drawOval(85, 45, 60, 60);
g.setColor(Color.GREEN);
g.drawOval(155, 45, 60, 60);
}
}
public static void main(String[] args) {
new Question1();
}
}
(3) 컨텐트팬에 꽉 차는 마름모
코드
import java.awt.*;
import javax.swing.*;
public class Question1 extends JFrame{
public Question1() {
this.setTitle("");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
this.setContentPane(new MyPanel());
this.setSize(200, 200);
this.setVisible(true);
}
private class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
int [] x = { getWidth()/2, 0, getWidth()/2, getWidth() };
int [] y = { 0, getHeight()/2, getHeight(), getHeight()/2 };
g.setColor(Color.BLUE);
g.drawPolygon(x, y, 4);
}
}
public static void main(String[] args) {
new Question1();
}
}
(4) 컨텐트팬을 10×10으로 나누는 격자 그리기
코드
import java.awt.*;
import javax.swing.*;
public class Question1 extends JFrame{
public Question1() {
this.setTitle("");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
this.setContentPane(new MyPanel());
this.setSize(200, 200);
this.setVisible(true);
}
private class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
int x = 0;
int y = 0;
for(int i = 0; i < 9; i++) {
g.drawLine(getWidth()/10 + x, 0, getWidth()/10 + x, getHeight());
g.drawLine(0, getHeight()/10 + y, getWidth(), getHeight()/10 + y);
x += getWidth()/10;
y += getHeight()/10;
}
}
}
public static void main(String[] args) {
new Question1();
}
}
Question 2.
FlowLayout 배치 관리자를 가진 컨테이너의 바탕에 꽉 차게 "back.jpg" 이미지를 출력하고 그 위에 "Hello" 버튼이 보이도록 스윙 프로그램을 작성하라. "back.jpg" 이미지는 독자 임의로 선택하면 된다. 이 문제는 그래픽과 컴포넌트를 동시에 사용할 수 있음을 보여주기 위한 것이다. 때로는 그래픽과 컴포넌트를 동시에 사용하면 효과적이다.
코드
import java.awt.*;
import javax.swing.*;
public class Question2 extends JFrame{
public Question2() {
this.setTitle("이미지 그리기");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
this.setContentPane(new MyPanel());
this.setSize(300, 300);
this.setVisible(true);
}
private class MyPanel extends JPanel {
public MyPanel() {
setLayout(new FlowLayout());
add(new JButton("Hello"));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
ImageIcon icon = new ImageIcon("images/back.jpg");
Image img = icon.getImage();
g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
}
}
public static void main(String[] args) {
new Question2();
}
}
Question 3.
두 개의 이미지 파일 a.jpg와 b.jpg를 준비하고, JPanel을 상속받은 패널에 꽉 차도록 그래픽을 이용하여 두 이미지를 동일한 크기로 출력하는 프로그램을 작성하라.
(1) 옆으로 나란히 출력하기
코드
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question3 extends JFrame {
public Question3() {
this.setTitle("");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
this.setContentPane(new MyPanel());
this.setSize(300, 300);
this.setVisible(true);
}
private class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Image img1 = new ImageIcon("images/bg.jpg").getImage();
Image img2 = new ImageIcon("images/back.jpg").getImage();
g.drawImage(img1, 0, 0, getWidth()/2, getHeight(), this);
g.drawImage(img2, getWidth()/2, 0, getWidth()/2, getHeight(), this);
}
}
public static void main(String[] args) {
new Question3();
}
}
(2) 아래로 나란히 출력하기
코드
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question3 extends JFrame {
public Question3() {
this.setTitle("");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
this.setContentPane(new MyPanel());
this.setSize(300, 300);
this.setVisible(true);
}
private class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Image img1 = new ImageIcon("images/bg.jpg").getImage();
Image img2 = new ImageIcon("images/back.jpg").getImage();
g.drawImage(img1, 0, 0, getWidth(), getHeight()/2, this);
g.drawImage(img2, 0, getHeight()/2, getWidth(), getHeight()/2, this);
}
}
public static void main(String[] args) {
new Question3();
}
}
Question 4.
앞의 2번 문제에서 주어진 "back.jpg"을 배경에 출력하고 그 위에 반지름이 20픽셀인 초록색 원을 만들어 커서처럼 마우스 드래깅으로 움직이는 프로그램을 작성하라. mouseDragged()에서 repaint()를 호출해야 한다.
코드
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question4 extends JFrame {
public Question4() {
this.setTitle("이미지 위에 원 드래깅");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
this.setContentPane(new MyPanel());
this.setSize(400, 400);
this.setVisible(true);
}
private class MyPanel extends JPanel {
private Point p = null;
public MyPanel() {
addMouseMotionListener(new MouseMotionListener() {
public void mouseDragged(MouseEvent e) {
p = e.getPoint();
repaint();
}
public void mouseMoved(MouseEvent e) {}
});
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Image img = new ImageIcon("images/back.jpg").getImage();
g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
g.setColor(Color.GREEN);
if(p == null) return;
g.fillOval(p.x, p.y, 20, 20);
}
}
public static void main(String[] args) {
new Question4();
}
}
Question 5.
마우스로 점을 찍으면 점들을 계속 연결하여 폐다각형을 그리는 프로그램을 작성하라. mousePressed()에서 repaint()를 호출해야 한다.
코드
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question5 extends JFrame {
public Question5() {
this.setTitle("마우스로 폐다각형 그리기");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
this.setContentPane(new MyPanel());
this.setSize(300, 300);
this.setVisible(true);
}
private class MyPanel extends JPanel {
private Vector<Point> v = new Vector<Point>();
public MyPanel() {
this.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
Point p = e.getPoint();
v.add(p);
repaint();
}
});
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.MAGENTA);
for(int i = 0; i < v.size(); i++) {
if(i == 0) {
g.drawLine(v.elementAt(0).x, v.elementAt(0).y, v.lastElement().x, v.lastElement().y);
}
}
for(int i = 0; i < v.size() - 1; i++) {
g.drawLine(v.elementAt(i).x, v.elementAt(i).y, v.elementAt(i+1).x, v.elementAt(i+1).y);
}
}
}
public static void main(String[] args) {
new Question5();
}
}
Question 6.
"apple.jpg" 이미지를 그래픽으로 컨텐트팬의 (10, 10) 위치에 원본 크기로 출력하고, + 키를 입력하면 10% 확대하고, - 키를 입력하면 10% 축소하는 프로그램을 작성하라.
코드
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question6 extends JFrame {
public Question6() {
this.setTitle("그래픽 이미지 10% 확대, 축소 프로그램");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
this.setContentPane(new MyPanel());
this.setSize(300, 300);
this.setVisible(true);
}
private class MyPanel extends JPanel {
private Image img = new ImageIcon("images/apple.jpg").getImage();
private int x = img.getWidth(this), y = img.getHeight(this);
public MyPanel() {
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if(e.getKeyChar() == '+') {
x = x + x/10;
y = y + y/10;
}
else if(e.getKeyChar() == '-') {
x = x - x/10;
y = y - y/10;
}
repaint();
}
});
this.setFocusable(true);
this.requestFocus();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 10, 10, x, y, this);
}
}
public static void main(String[] args) {
new Question6();
}
}
'☕ Java > 명품 자바 에센셜' 카테고리의 다른 글
명품 자바 에센셜 12장 실습 문제 (0) | 2019.05.28 |
---|---|
명품 자바 에센셜 10장 실습 문제 (0) | 2019.05.21 |
명품 자바 에센셜 9장 실습 문제 (0) | 2019.05.14 |
명품 자바 에센셜 8장 실습 문제 (0) | 2019.05.13 |
명품 자바 에센셜 7장 실습 문제 (0) | 2019.05.12 |