์์ ๋ ์ง/์ ๋ฆฌ๋ ์ง
2022.05.17/2022.05.22
ํ์ต์ฃผ์
- 11 ๊ทธ๋ํฝ ํ๋ก๊ทธ๋๋ฐ
ํ์ต๋ด์ฉ
11 ๊ทธ๋ํฝ ํ๋ก๊ทธ๋๋ฐ
๊ทธ๋ํฝ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ์ด
โ ํ๋ ์ ์์ฑํ๊ธฐ
public class BasicPaint{
public static void main(String[] args){
JFrame f = new JFrame("๊ทธ๋ํฝ ๊ธฐ์ด ํ๋ก๊ทธ๋จ"); // JFrame ๊ฐ์ฒด ์์ฑ (์์ฑ์ ์์ ๋ถ๊ฐ)
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300, 200);
f.setVisible(true);
}
}
โก ์์ฑ๋ ํ๋ ์์ ํจ๋ ์ถ๊ฐํ์ฌ ๊ทธ๋ฆฌ๊ธฐ (→ JPanel์ด ๊ฐ์ข ๊ทธ๋ฆฌ๊ธฐ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ)
public class BasicPaint{
public static void main(String[] args){
JFrame f = new JFrame("๊ทธ๋ํฝ ๊ธฐ์ด ํ๋ก๊ทธ๋จ");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new MyPanel());
f.setSize(300, 200);
f.setVisible(true);
}
}
class MyPanel extends JPanel{
public MyPanel(){
...
}
}
โข paintComponent()๋ฅผ ์ค๋ณต ์ ์. ์ฆ, ์ค๋ฒ๋ผ์ด๋ฉ ํ๊ธฐ
- paintComponent()๋ ํจ๋์ด ํ๋ฉด์ ๊ทธ๋ ค์ง ๋ ์๋ ํธ์ถ
class MyPanel extends JPanel{
public void paintComponent(Graphics g){ // ๋ฉ์๋ ์ค๋ณต ์ ์ // ๊ฐ์ฒด g
super.paintComponent(g);
// ์ฌ๊ธฐ์ ๊ทธ๋ฆฌ๋ ์ฝ๋ ์์ฑ
// ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆฌ๊ฑฐ๋ ์ฌ๊ฐํ ๊ทธ๋ฆฌ๊ฑฐ๋...
// ์ด๋, ๊ทธ๋ฆฌ๊ธฐ์ ํ์ํ ๋๊ตฌ์ ์ค์ ๊ฐ ๋ฑ Graphics์์ ์ ๊ณตํ๋ค.
}
// super.~: ๋ถ๋ชจ๊ฐ ๋จผ์ ๊ทธ๋ฆฌ๊ณ ์์์ด ๊ทธ๋ฆผ -> ์ ์ข ์ด์ ๊ทธ๋ฆฐ๋ค๊ณ ์๊ฐ. ๋ถ๋ชจ๊ฐ ์๋ค๋ฉด ์ด๋ฉด์ง์ ๊ณ์ ๊ทธ๋ฆฌ๋ ๊ฒ๊ณผ ๊ฐ์
๊ทธ๋ํฝ ์ขํ๊ณ
๊ทธ๋ฆผ ๊ทธ๋ฆฌ๋ ๋ฉ์๋
- ๊ทธ๋ฆฌ๊ธฐ ๋ฉ์๋๋ Graphics์์ ์ ๊ณต
- ex) ์ฌ๊ฐํ ๊ทธ๋ฆฌ๋ ๋๊ตฌ: drawRect(), ์ ๊ทธ๋ฆฌ๋ ๋๊ตฌ: drawOval()
- ex) g.drawRect(50, 30, 20, 10) : x:50, y:30, w:20, h:10
- ์์ ๊ฒฝ์ฐ, ์ฌ๊ฐํ์ ๋ด์ ํ๋ค๊ณ ์๊ฐ → ์ฌ๊ฐํ์ ์ฒซ ์์์ (๋ค๋ฅธ ๋ํ๋ ๋ง์ฐฌ๊ฐ์ง..)
์ด๋ฒคํธ์ ๊ทธ๋ํฝ์ ๊ฒฐํฉ
public class BasicPaint{
public static void main(String[] args){
JFrame f = new JFrame("๊ทธ๋ํฝ ๊ธฐ์ด ํ๋ก๊ทธ๋จ");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new MyPanel());
f.setSize(300, 200);
f.setVisible(true);
}
}
class MyPanel extends JPanel{
private int squareX = 50;
private int squareY = 50;
private int squareW = 20;
private int squareH = 20;
}
public MyPanel(){ // ์์ฑ์
setBorder(BorderFactory.createLineBorder(Color.black)); // BorderFactory: ์ ์์ฑ / creatLineBorder:์ค์ ์ ๊ฒฝ๊ณ์
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
moveSquare(e.getX(), e.getY());} // ๋ง๋ ๋ฉ์๋
});
addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
moveSquare(e.getX(), e.getY());} // ๋ง๋ ๋ฉ์๋
});
}
private void moveSquare(int x, int y){
sqareX = x;
sqareY = y;
repaint();} // repaint: ๋ง์ฐ์ค ๋๋ฆฐ ๋ถ๋ถ ๋ค์ ๊ทธ๋ฆฌ๊ธฐ
}
protected void paintComponent(Graphics g){ // ๋ถ๋ชจ์๊ฒ ๋ฐ์
super.paintComponent(g);
g.drawString("๋ง์ฐ์ค๋ฅผ ํด๋ฆญํ๋ฉด ์ฌ๊ฐํ์ด ๊ทธ๋ ค์ง๋๋ค!", 10, 20) // drawString: ๊ธ์ ๊ทธ๋ฆผ(๋ฌธ์์ด ์) / 10, 20 : x, y
g.setColor(Color.RED);
g.fillRect(squareX, squareY, squareW, squareH);
g.setColor(Color.BLACK);
g.drawRect(squareX, squareY, squareW, squareH);
}
๊ธฐ์ด ๋ํ ๊ทธ๋ฆฌ๊ธฐ
๊ธฐ์ด ๋ํ | ๊ด๋ จ๋ ๋ฉ์๋ |
์ง์ | drawLine(), drawPolyline() |
์ฌ๊ฐํ | drawRect(), fillRect(), clearRect() |
3์ฐจ์ ์ฌ๊ฐํ | draw3DRect(), fill3DRect() |
๋ฅ๊ทผ ์ฌ๊ฐํ | drawRoundRect(), fillRoundRect() |
ํ์ | drawOval(), fillOval() |
ํธ | drawArc(), fillArc() |
๋ค๊ฐํ | drawPolygon(), fillPolygon() |
์ง์ /์ฌ๊ฐํ ๊ทธ๋ฆฌ๊ธฐ
๋ฉ์๋ | ์ค๋ช |
drawLine(int x1, int y1, int x2, int y2) | ์ขํ(x1, y1)์์ ์ขํ(x2, y2)๊น์ง ์ง์ ์ ๊ทธ๋ฆฐ๋ค. |
drawPolyline(int[] xpoints, int[] ypoints, int numpoints) | ๋ฐฐ์ด xpoints[]์ ๋ฐฐ์ด ypoints[]์ ๊ฐ์ง๊ณ ์ฌ๋ฌ ๊ฐ์ ์ง์ ์ ๊ทธ๋ฆฐ๋ค. polygon๊ณผ ๋ค๋ฅธ ์ ์ ์ฒซ๋ฒ์งธ ์ ๊ณผ ๋ง์ง๋ง ์ ์ด ์ฐ๊ฒฐ๋์ง ์๋๋ค. |
๋ฉ์๋ | ์ค๋ช |
drawRect(int x, int y, int width, int height) | ์ผ์ชฝ ์๋จ ์ขํ (x, y) |
fillRect(int x, int y, int width, int height) | ์ฑ์์ง ์ฌ๊ฐํ |
draw3DRect(int x, int y, int width, int height, boolen raised) | 3D ์ฌ๊ฐํ |
fill3DRect(int x, int y, int width, int height, boolean raised) | ์ฑ์์ง 3D ์ฌ๊ฐํ |
drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) | ๋ชจ์๋ฆฌ ๋ฅ๊ทผ ์ฌ๊ฐํ |
fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) | ์ฑ์์ง ๋ชจ์๋ฆฌ ๋ฅ๊ทผ ์ฌ๊ฐํ |
ํ์/ํธ ๊ทธ๋ฆฌ๊ธฐ
๋ฉ์๋ | ์ค๋ช |
drawOval(int x, int y, int width, int height) | ์ข์ธก ์๋จ์ ์ขํ๊ฐ x, y ์ด๋ฉฐ ํญ width, ๋์ด height์ ์ฌ๊ฐํ ์์ ๋ด์ ํ๋ ํ์์ ๊ทธ๋ฆฐ๋ค. |
fillOval(int x, int y, int width, int height) | ์ฑ์์ง ํ์์ ๊ทธ๋ฆฐ๋ค. |
๋ฉ์๋ | ์ค๋ช |
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) | ์ข์ธก ์๋จ์ ์ขํ๊ฐ x, y ์ด๋ฉฐ ํญ width, ๋์ด height์ ์ฌ๊ฐํ ์์ ๋ด์ ํ๋ ํ์์ startAngle์ ์์ ๊ฐ๋๋ก ํ์ฌ arcAngle์ ๊ฐ๋๋งํผ์ ํธ๋ฅผ ๊ทธ๋ฆฐ๋ค. |
fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) | ์ข์ธก ์๋จ์ ์ขํ๊ฐ x, y ์ด๋ฉฐ ํญ width, ๋์ด height์ ์ฌ๊ฐํ ์์ ๋ด์ ํ๋ ํ์์ startAngle์ ์์ ๊ฐ๋๋ก ํ์ฌ arcAngle์ ๊ฐ๋๋งํผ์ ์ฑ์์ง ํธ๋ฅผ ๊ทธ๋ฆฐ๋ค. |
์์
- java.awt ํจํค์ง์ ์ผ๋ถ์ธ Color ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค.
- ๋น์ 3์์์ธ Red ์ฑ๋ถ, Green ์ฑ๋ถ, Blue ์ฑ๋ถ์ด ์ผ๋ง๋ ํจ์ ๋์ด ์๋์ง๋ฅผ 0์์ 255๊น์ง์ ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ํ๋ธ๋ค.
ํด๋์ค ๋ณ์ ์ด๋ฆ | ์์ | RGB ๊ฐ |
Color.black | black | (0, 0, 0) |
Color.blue | blue | (0, 0, 255) |
Color.cyan | cyan | (0, 255, 255) |
Color.gray | gray | (128, 128, 128) |
Color.darkGray | dark gray | (64, 64, 64) |
Color.lightGray | light gray | (192, 192, 192) |
Color.green | green | (0, 255, 0) |
Color.magenta | magenta | (255, 0, 255) |
Color.orange | orange | (255, 200, 0) |
Color.pink | pink | (255, 175, 175) |
Color.red | red | (255, 0, 0) |
Color.white | white | (255, 255, 255) |
Color.yellow | yellow | 255, 255, 0) |
์์ ์ค์
- ๋ง์ ํ ์์ ์ป๋ ๋ฐฉ๋ฒ
- Color c = Color.magenta; / Color c = new Color (255, 0 255); // ๋ง์ ํ ์ ๊ฐ์ง ๊ฐ์ฒด ์์ฑ
- Color์๋ ์ํ(alpha)๊ฐ, ์ฆ ํฌ๋ช
๋๋ฅผ ํฌํจํ๋ค.
- ex) Color c = new Color (255, 0, 0, 128); // c๋ ํฌ๋ช ๋ 50%์ ๋นจ๊ฐ์(128: 256์ ์ ๋ฐ)
์ปดํฌ๋ํธ ์์ ๊ด๋ จ ๋ฉ์๋
๋ฉ์๋ | ์ค๋ช |
setBackground(Color c) | ์ปดํฌ๋ํธ ๊ฐ์ฒด์์ ๋ฐฐ๊ฒฝ์์ ์ค์ ํ๋ค. |
setColor(Color c) | ์ ๊ฒฝ์์ ์ค์ ํ๋ค. |
Color getColor() // Color๊ฐ์ฒด | ํ์ฌ์ ์ ๊ฒฝ์์ ๋ฐํํ๋ค. |
ํฐํธ
- ๋ฌธ์์ด ์ถ๋ ฅ ๋ฐฉ๋ฒ: (x, y) ์์น์ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ ค๋ฉด g.drawString("Hello World!", x, y);
- ํฐํธ๋ฅผ ์ง์ ํ๊ธฐ ์ํด์๋ Font ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค.
- Font ๊ฐ์ฒด → ํฐํธ ์ด๋ฆ(Courier, Helvetica ๋ฑ), ์คํ์ผ(plain, bold, italic ๋ฑ), ํฌ๊ธฐ(12ํฌ์ธํธ ๋ฑ)์ 3๊ฐ์ง ์์ฑ ์ง์
- Font font = new Font("Courier", Font.PLAIN, 10); // ๊ธ๊ผด, ์คํ์ผ, ํฌ๊ธฐ
ํฐํธ์ ์ข ๋ฅ
๋ ผ๋ฆฌ์ ์ธ ํฐํธ | ์ค๋ช |
"Serif" | ์์นจ(serif)๋ฅผ ๊ฐ๋ ๊ฐ๋ณํญ ๊ธ๊ผด, ๋ํ์ ์ผ๋ก TimesRoman์ด ์๋ค. |
"SansSerif" | ์์นจ(serif)๋ฅผ ๊ฐ์ง์๋ ๊ฐ๋ณํญ ๊ธ๊ผด, ๋ํ์ ์ผ๋ก Helvetica๊ฐ ์๋ค. |
"Monospaced" | ๊ณ ์ ํญ์ ๊ฐ์ง๋ ๊ธ๊ผด, ๋ํ์ ์ผ๋ก Courier๊ฐ ์๋ค. |
"Dialog" | ๋ํ์์์์ ํ ์คํธ ์ถ๋ ฅ์ ์ํ์ฌ ์ฌ์ฉ๋๋ ๊ธ๊ผด |
"DialogInput" | ๋ํ์์์์ ํ ์คํธ ์ ๋ ฅ์ ์ํ์ฌ ์ฌ์ฉ๋๋ ๊ธ๊ผด |
ํฐํธ์ ์ง์
public void paint(Graphics g){
Font f = new Font("Serif", Font.BOLD | Font.ITALIC, 12);
g.setFont(f);
...
}
JLabel myLabel = new JLabel("ํฐํธ ์์");
Font f = new Font("Dialog", Font.ITALIC, 10);
myLabel.setFont(f); // ์ ์ฉํ ๋ setter ์ฌ์ฉ
์ด๋ฏธ์ง ์ถ๋ ฅ
BufferdImage img = null; // BufferedImage: ์ด๋ฏธ์ง ์์ ํ ๋ ์ฉ์ดํ ๊ธฐ๋ฅ ์ ๊ณต
try{
img = ImageIO.read(new File("grape.jpg")); // new File(): ํ์ผ ๊ฐ์ฒด๋ก ๋ง๋ค๊ธฐ
} // ImageIO: ์ด๋ฏธ์ง ์
์ถ๋ ฅ(Image Input Ouput)
catch(IOException e){
...
} // try, catch: ์์ธ์ฒ๋ฆฌ
์ด๋ฏธ์ง ๊ทธ๋ฆฌ๊ธฐ
img = ImageIO.read(new File("grape.jpg"));
"grape.jpg" ์์ ๊ฒฝ๋ก ์์ฑ
โ ๊ฒฝ๋กx → ์ต์์ ๋๋ ํ ๋ฆฌ์ ์๋ ๊ฒฝ์ฐ
โก ํ์ผ ๊ฒฝ๋ก → ๋๋ ํ ๋ฆฌ ์์ ํ์ผ์ ๋ง๋ค์ด ๋ฃ์์ ๊ฒฝ์ฐ ex) "image.grape.jpg" (image๋ผ๋ ํ์ผ)
โข ์ ์ฒด ๊ฒฝ๋ก → ๋๋ ํ ๋ฆฌ ์ธ ๋ค๋ฅธ ํ์ผ์ ์์ ๊ฒฝ์ฐ ์ ์ฒด ๊ฒฝ๋ก ์์ฑ ex) "C\~~"
์์ ์ฒ๋ฆฌ
Java 2D
- ๊ด๋ฒ์ํ ๊ทธ๋ํฝ ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆด ์ ์๋ค.
- ๋ํ์ ๋ด๋ถ๋ฅผ ๊ทธ๋ผ๋์ธํธ(gradient)๋ ๋ฌด๋ฌ๋ก ์ฑ์ธ ์ ์๋ค.
- ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆด ์ ์๊ณ ํํฐ๋ง ์ฐ์ฐ์ ์ ์ฉํ ์ ์๋ค.
- ๊ทธ๋ํฝ ๊ฐ์ฒด๋ค์ ์ถฉ๋์ ๊ฐ์งํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค.
Java 2D๋ฅผ ์ด์ฉํ ๊ทธ๋ฆฌ๊ธฐ
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
// Graphics ๊ฐ์ฒด๋ฅผ Graphics2D ๊ฐ์ฒด๋ก ํ๋ณํ
g2.drawLine(100, 100, 300, 300);
g2.drawRect(10, 10, 100, 100);
...
}
์ฌ๊ฐํ ๊ทธ๋ฆฌ๊ธฐ
- Java 2D์์ ๋ํ ๊ทธ๋ฆฌ๊ธฐ๋ Shape ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ฅธ๋ค.
- ๋ฐ๋ผ์, Shape ํ์
์ ์ฐธ์กฐ๋ณ์๋ฅผ ์ด์ฉํด์ ๋ํ์ ์์ฑํ๋ค.
- Shape r1 = new Rectangle2D.Float(7, 8, 100, 200); // up-casting
- g2.draw(r1); // Graphics2D ๊ฐ์ฒด๋ฅผ ์ด์ฉํด์ ์ฌ๊ฐํ ๊ทธ๋ฆฌ๊ธฐ
MoreShape
animation
ํ์ต๋ด์ฉ ์ดํด๋
85% ์ ๋
ํ์ตํ๋ ๋์๋ณด๊ธฐ
๋ค์ํ ๊ทธ๋ํฝ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ธ ์ ์์ด์ ์ข์๋ค. ํ๋ฒ์ ๋ง์ ๋ด์ฉ์ ๋ฐฐ์ ํท๊ฐ๋ฆฌ๊ธฐ๋ ํ๋ค. ์ฌ๋ฌ๋ฒ ๋ณต์ต ํด์ผ๊ฒ ๋ค. ๋ฌด์์ ์ธ์ด๊ธฐ๋ณด๋ค๋ ์ด๋ป๊ฒ ์์ฉํ ์ ์์์ง์ ์ด์ ์ ๋๊ณ ๊ณต๋ถํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ ๋ค. API ๋ฌธ์๋ ์ฐพ์๋ณด๋ฉฐ ๊ณต๋ถํด์ผ๊ฒ ๋ค.
๋ค์ ํ์ต๊ณํ
์์ธ์ฒ๋ฆฌ ๋ฐฉ๋ฒ๊ณผ ์ค๋ ๋
'Study > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐํ๋ก๊ทธ๋๋ฐ 10์ฃผ์ฐจ ์ ๋ฆฌ (0) | 2022.05.15 |
---|---|
์๋ฐํ๋ก๊ทธ๋๋ฐ 9์ฃผ์ฐจ ์ ๋ฆฌ (0) | 2022.05.08 |
์๋ฐํ๋ก๊ทธ๋๋ฐ 7์ฃผ์ฐจ ์ ๋ฆฌ (0) | 2022.04.25 |
์๋ฐํ๋ก๊ทธ๋๋ฐ 6์ฃผ์ฐจ ์ ๋ฆฌ (0) | 2022.04.16 |
์๋ฐํ๋ก๊ทธ๋๋ฐ 5์ฃผ์ฐจ ์ ๋ฆฌ (0) | 2022.04.09 |