
| ํ์ค ์ธ๊ณ | ๊ทธ๋ํฝ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ | ์ค๋ช |
|---|---|---|
| 1) ํ๊ฐ | ์ปดํฌ๋ํธ (Canvas, Panel ๋ฑ) | ์ค์ค๋ก ๊ทธ๋ฆด ์ ์๋ ๊ฐ์ฒด |
| 2) ๊ทธ๋ฆฌ๋ ํ์ | ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ง ๋ฉ์๋ (paint()) | ๊ทธ๋ฆฌ๊ธฐ ๋์ |
| 3) ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๋ ๋๊ตฌ (ํ๋ ํธ ๋ฑ) | Graphics ๊ฐ์ฒด (Graphics g) | ๊ทธ๋ฆฌ๊ธฐ ๋๊ตฌ, ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋จ |
| 4) ๊ทธ๋ ค์ง ๋์ (์บ๋ฒ์ค) | ์ปดํฌ๋ํธ ์์ (this) | ๊ทธ๋ฆผ์ด ์ถ๋ ฅ๋ ๋์ |
๋ชจ๋ ์ปดํฌ๋ํธ๋ ์คํ ์ ์ค์ค๋ก๋ฅผ ๊ทธ๋ฆผ
์ด ์์
์ ๋ด๋ถ์ ์ผ๋ก paint(Graphics g)
๋๋ paintComponent(Graphics g)์์ ์ฒ๋ฆฌ๋จ.
์ฐ๋ฆฌ๊ฐ โญpaintComponent()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉโญํ๋ฉด,
๊ธฐ๋ณธ ๊ทธ๋ฆผ์ โ๊ฐ๋ก์ฑ๊ณ โ ์๋กญ๊ฒ ๊ทธ๋ฆด ์ ์์.
์ด๋, Graphics๋ ๋ถ์ด์ ํ๋ ํธ์ด๊ณ , ์ปดํฌ๋ํธ ์์ ์ ๊ทธ๋ ค์ง๋ ๋์.
Swing์์๋
paint()๋ฅผ ์ง์ ์ค๋ฒ๋ผ์ด๋ฉํ๋ ๊ฑด ๊ถ์ฅ๋์ง ์์
โpaintComponent()๋ง ์ค๋ฒ๋ผ์ด๋ฉํ๋ผ๊ณ ๊ณต์ ๋ฌธ์์๋ ๋ช ์์ด์ :
paint()๋ ์ ์ฒด๋ฅผ ๋ค ๊ด๋ฆฌํ๋ ๋ฉ์๋๋ผ ์ํํจ//Swing ์ปดํฌ๋ํธ์ paint() ๋ฉ์๋๋ ๋ค์ ์ธ ๊ฐ์ง๋ฅผ ์์๋๋ก ํธ์ถ protected void paint(Graphics g) { paintComponent(g); // ๐ฅ ๋ณธ๋ฌธ(๋ฐฐ๊ฒฝ, ํ ์คํธ ๋ฑ) paintBorder(g); // ํ ๋๋ฆฌ paintChildren(g); // ์์ ์ปดํฌ๋ํธ๋ค }์ค๋ฒ๋ผ์ด๋ฉ ์
super.paintComponent(g);ํธ์ถ ํ ์ปค์คํ ์ฝ๋ ์์ฑํ๊ธฐ
(๋ถ๋ชจ ๋ฉ์๋ ํธ์ถ)
"์ปดํฌ๋ํธ ๋ค์ ๊ทธ๋ ค์ค~(์์ฒญ)"
๊ทธ๋ํฝ ํ๋ก๊ทธ๋๋ฐ์์ ์ปดํฌ๋ํธ์ ์ฝ๊ฐ์ ๋ณํ๋ผ๋ ์๊ธฐ๋ฉด,
๊ธฐ์กด์ ๊ทธ๋ ค์ง ๊ทธ๋ฆผ์ ๋ฌดํจํ๋๊ณ , ๋ค์ ๊ทธ๋ ค์ ธ์ผ ํจ.
์ด ๊ณผ์ ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฒ๋ฆฌํ๋ ๊ฒ ์๋๋ผ,
JVM๊ณผ OS(Graphics ์์คํ
)๊ฐ ์๋์ผ๋ก ๋ ๋๋ง์ ์ํ
์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ์ฌ์ด์ฆํ๊ฑฐ๋ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ ๋:
repaint();๋ฅผ ๊ฐ๋ฐ์๊ฐ ํธ์ถํ๋ฉด
์์คํ
์ ๋ด๋ถ์ ์ผ๋ก ์๋ ๊ณผ์ ์ ์๋ ์ํ
repaint()
โ
update(Graphics g)
โ (๋ฐฐ๊ฒฝ clearRect() ๋ฑ์ผ๋ก ์ง์)
paint(Graphics g)
โ
[์ฌ์ฉ์๊ฐ ์ง์ ๊ทธ๋ฆผ]
repaint()
โ
update(Graphics g)
โ (๋ฐฐ๊ฒฝ ์ ์ง์ โ ์ค๋ฒ๋ผ์ด๋ฉ์ผ๋ก ๋ฐ๋ก paint ํธ์ถ)
paint(Graphics g)
โ
paintComponent(Graphics g)
paintComponent(g)โ ๐ฅ ์ฌ์ฉ์ ์ปค์คํ ๊ทธ๋ฆผ ์ฌ๊ธฐ์ ์์ฑpaintBorder(g)paintChildren(g)
โ
[์ฌ์ฉ์๊ฐ ์ง์ ๊ทธ๋ฆผ]
โ ๏ธ paint()๋ ์ ๋๋ก ๊ฐ๋ฐ์๊ฐ ์ง์ ํธ์ถํ๋ฉด ์ ๋จ!
โ ์์คํ
์ด ํธ์ถํด์ค์ผ ์ ํด์ง ํ๋ฆ๋๋ก ๋์ํจ
Toolkit : ์ด๋ฏธ์ง ๋ฑ์ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ ๋, ์์คํ ํ๊ฒฝ์ ๋ง๊ฒ ๊ฐ์ ธ์ค๋ ๋๊ตฌ ํด๋์ค
Toolkit kit = Toolkit.getDefaultToolkit();
Image img = kit.getImage("์ด๋ฏธ์ง ๊ฒฝ๋ก");
๊ฐค๋ฌ๋ฆฌ ์์ ์์๋...์ด๋ฏธ์ง ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ๋ฐฐ์ด์ ๋ฃ์ด๋ฒ๋ฆผ
Toolkit kit = Toolkit.getDefaultToolkit();
Image[] imgArray = new Image[9];
imgArray[i] = kit.getImage("์ด๋ฏธ์ง ๊ฒฝ๋ก");
//์ด ์ค๊ฐ๋ณ์ ์๋ตํ ๊ฑฐ์
Image img = kit.getImage("๊ฒฝ๋ก"); //์ด๋ฏธ์ง ๊ฐ์ฒด ๋ง๋ค๊ณ
imgArray[i] = img; //์ด๋ฏธ์ง ๊ฐ์ฒด๋ฅผ ๋ฐฐ์ด์ ๋ฃ๊ณ
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFrame ์ฐฝ์ ๋ซ์ ๋ ํ๋ก๊ทธ๋จ(ํ๋ก์ธ์ค)๋ ํจ๊ป ์ข ๋ฃ๋๋๋ก ์ค์ ํ๋ ์ฝ๋

์ด์ /๋ค์ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฌ์ง์ด ๋์ด๊ฐ๊ณ
Label์๋ ํ์ผ๋ช
์ด ๋์ค๊ฒ ๊ตฌํํด๋ด!
package gui.graphic;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Gallery extends JFrame implements ActionListener {
JPanel p_north;
JButton bt_prev, bt_next;
FilenameLabel la_title;
Toolkit kit; //โ
์์คํ
์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ๋ฐ์ ๋์ ์ป์ด๋ค ์ฃผ๋ ๊ฐ์ฒด
MyCanvas myCanvas;
//์ด๋ฏธ์ง ๊ฐ์ฒด๋ฅผ ๋ชจ์๋์ ๋ฐฐ์ด ์ค๋น (โ ํฌ๊ธฐ ๋ช
์ ํ์!)
Image[] imgArray = new Image[9];
String[] path = new String[] {
"animal1.jpg",
"animal2.jpg",
"animal3.jpg",
"animal4.jpg",
"animal5.jpg",
"animal6.jpg",
"animal7.jpg",
"animal8.jpg",
"animal9.jpg"
};
int index = 0;
public Gallery() {
p_north = new JPanel();
bt_prev = new JButton("์ด์ ");
la_title = new FilenameLabel(path[index]);
bt_next = new JButton("๋ค์");
kit = Toolkit.getDefaultToolkit(); //โ
ํด ํท์ ์ธ์คํด์ค ์ป๊ธฐ
myCanvas = new MyCanvas();
p_north.add(bt_prev);
p_north.add(la_title);
p_north.add(bt_next);
p_north.setPreferredSize(new Dimension(600, 50));
add(p_north, BorderLayout.NORTH);
add(myCanvas);
//์ด๊ธฐ ์ด๋ฏธ์ง ์ค๋น ๋ฐ ์ ์ฉ
createImg();
myCanvas.setImg(imgArray[index]);
bt_prev.addActionListener(this);
bt_next.addActionListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600, 500);
setVisible(true);
}
//โ
์ด๋ฏธ์ง ๋ฐฐ์ด์ ์ด๋ฏธ์ง ๊ฐ์ฒด 9๊ฐ๋ฅผ ์ค๋น
public void createImg() {
for (int i = 0; i < path.length; i++) {
imgArray[i] = kit.getImage("C:/.../res/geographic/" + path[i]);
}
}
public void showImg(int n) {
index += n;
if (index >= imgArray.length) {
index = 0;
} else if (index < 0) {
index = imgArray.length - 1;
}
myCanvas.setImg(imgArray[index]);
myCanvas.repaint(); // "ํจ๋์ ๋ค์ ๊ทธ๋ ค์ค~"
la_title.setText(path[index]);
}
//๋ฆฌ์ค๋ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
if (obj == bt_prev) {
showImg(-1);
} else if (obj == bt_next) {
showImg(1);
}
}
public static void main(String[] args) {
new Gallery();
}
}
์ด์ ์ ํจ์ฑ ์ฒดํฌ์์๋
length( )๋ฅผ ์ผ๋ ๊ฒ ๊ฐ์๋ฐโฆ
์ค๋ ๋ฐฐ์ด์ ๊ธธ์ด์๋ ์ ๊ทธ๋ฅlength์ง?
lengthโ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋ํ๋ด๋ ๋ณ์(ํ๋)length()โ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๋ฉ์๋(ํจ์)
package gui.graphic;
import javax.swing.*;
import java.awt.*;
public class MyCanvas extends JPanel {
Image image; //ํ์ํ๋ฉด ๋ณด์ ํ๊ธฐ
public MyCanvas() {
setBackground(Color.PINK);
setPreferredSize(new Dimension(600, 450));
}
//โ
์ด๋ฏธ์ง๋ฅผ ๋๊ฒจ๋ฐ์ ๋ฉ์๋๋ฅผ ์ ์ธํ์ (setter ์ฃผ์
)
public void setImg(Image image) {
this.image = image;
}
public void paint(Graphics g) {
g.drawImage(image, 0, 0, 600, 450, this); //Jpanel ์์ ์ ๐์ด๋ฏธ์ง์ต์ ๋ฒ๋ก ์ง์
}
}
Java์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ฉํ ๋๋ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์งํ๋๊ธฐ ๋๋ฌธ์,
์ด๋ฏธ์ง๊ฐ ์์ง ๋ค ๋ก๋๋์ง ์์ ์ํ์์ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ค ํ ์๋ ์์
๐ ImageObserver : ์ด๋ฏธ์ง๊ฐ ๋น๋๊ธฐ ๋ก๋ฉ๋๋ ์ํฉ์์๋,
์์ ํ ๋ก๋๋์์ ๋ ์๋์ผ๋ก ๋ค์ ํ๋ฉด์ ํ์๋ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฐ์์ ์ญํ
๊ฐ๋ฐ์๋ ์ด ์ต์ ๋ฒ ์ญํ ์ ์ํํ ๊ฐ์ฒด๋ฅผ ์ง์ ํด์ผ ํ๋๋ฐ,
JPanel์ ImageObserver ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๊ธฐ ๋๋ฌธ์
์๊ธฐ ์์ (this)์ ์ต์ ๋ฒ๋ก ์ง์ ํ ์ ์๋ค.
<์ฐธ๊ณ >
JPanel, JButton, JLabel, JFrame ๋ฑ ๋๋ถ๋ถ์ GUI ์ปดํฌ๋ํธ๋ Component ์์ ๊ตฌ์กฐ์ ์๊ธฐ ๋๋ฌธ์ ์ ๋ถ ImageObserver ์ญํ ์ ์ํํ ์ ์๋ค.
package gui.graphic;
import javax.swing.JLabel;
public class FilenameLabel extends JLabel {
public FilenameLabel(String filename) {
super(filename); //JLabel์ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์์ฑ์ ํธ์ถ
//โ ์ ๋ชฉ ์ถ๋ ฅ ๊ฐ๋ฅ
}
}