java
JAVA - paint 기초
자바에서 그림을 그리려면 paint() 매소드를 이용합니다. 이미지 그림을 갱신하고 싶을 때는 repaint() 를 이용해서 그림을 다시 그릴 수 있습니다.
paint() 매소드
애플릿에 그림을 그리려 할 때 발생하는 그래픽 출력 이벤트입니다. 형식은 다음과 같습니다.
// ex.1)
import java.awt.Graphics;
import javax.swing.JFrame;
public class Ex01 extends JFrame{
@Override
public void paint(Graphics g) {
super.paint(g);
}
public Ex01() {
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 300);
}
public static void main(String[] args) {
new Ex01();
}
}
다음은 paint() 매소드를 이용해 호를 그려 보겠습니다.
// ex.2)
import java.awt.Graphics;
import javax.swing.JFrame;
public class Ex01 extends JFrame{
@Override
public void paint(Graphics g) {
super.paint(g);
// 채워진 호를 그립니다.
// x/y 좌표 100, 크기가 100 이고,
// 시작점과 끝점이 각 50과 100인 호를 그립니다.
g.fillArc(100, 100, 100, 100, 50, 100);
}
public Ex01() {
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 300);
}
public static void main(String[] args) {
new Ex01();
}
}
repaint() 매소드
강제로 한번더 호출하고자 할때 사용합니다. 다음은 기본적인 문법입니다.
// ex.3)
import java.awt.Graphics;
import javax.swing.JFrame;
public class Ex01 extends JFrame{
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillArc(100, 100, 100, 100, 50, 100);
}
public Ex01() {
// repaint() 를 호출합니다.
repaint();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 300);
}
public static void main(String[] args) {
new Ex01();
}
}
다음은 랜덤함수를 이용해 repaint() 를 호출해 보겠습니다.
// ex.4)
import java.awt.Graphics;
import javax.swing.JFrame;
public class Ex04 extends JFrame{
public Ex04() {
setSize(300, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 매 0.5 초 마다 새로운 폴리곤을 그리기 위해 반복문을 이용
while(true) {
try {
Thread.sleep(500);
} catch(InterruptedException e) {
e.printStackTrace();
}
// 폴리곤을 새로 그려야 하므로 repaint() 를 호출
repaint();
}
}
public void paint(Graphics g) {
super.paint(g);
int x[] = {
(int)(Math.random()*300),
(int)(Math.random()*300),
(int)(Math.random()*300)
};
int y[] = {
(int)(Math.random()*300),
(int)(Math.random()*300),
(int)(Math.random()*300)
};
g.drawPolygon(x, y, 3);
}
public static void main(String[] args) {
new Ex04();
}
}
paint() 매소드
활용 다음은 GroupLayout 을 이용해 로또번호 추첨 그림을 그려 보았습니다.
// ex.5)
import javax.swing.JFrame;
import java.awt.Container;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JPanel;
public class Ex03 extends JFrame{
Container c = getContentPane();
private JLabel clb1, clb2, clb3;
private JLabel lb1, lb2, lb3, lb4, lb5, lb6;
private JTextField bf1, f1, f2, f3, f4, f5, f6;
private JPanel panel, pane2;
private JButton bbtn1;
public Ex03() {
clb1 = new JLabel("행운의 로또 추첨 번호");
clb1.setFont(new Font("굴림", Font.BOLD, 21));
clb2 = new JLabel("꽝입니다. 다시 추첨해 주세요.");
clb3 = new JLabel("분명 행운이 따를꺼에요!");
// 로또 번호 입력 / 패널
panel = new JPanel();
lb1 = new JLabel("1");
panel.add(lb1);
f1 = new JTextField();
panel.add(f1);
f1.setColumns(3);
lb2 = new JLabel("2");
panel.add(lb2);
f2 = new JTextField();
f2.setColumns(3);
panel.add(f2);
lb3 = new JLabel("3");
panel.add(lb3);
f3 = new JTextField();
f3.setColumns(3);
panel.add(f3);
lb4 = new JLabel("4");
panel.add(lb4);
f4 = new JTextField();
f4.setColumns(3);
panel.add(f4);
lb5 = new JLabel("5");
panel.add(lb5);
f5 = new JTextField();
f5.setColumns(3);
panel.add(f5);
lb6 = new JLabel("6");
panel.add(lb6);
f6 = new JTextField();
f6.setColumns(3);
panel.add(f6);
// 하단 패널
pane2 = new JPanel();
pane2.add(new JLabel("추첨"));
bf1 = new JTextField();
pane2.add(bf1);
bf1.setColumns(10);
pane2.add(new JButton("다음 기회에..."));
GroupLayout groupLayout = new GroupLayout(getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
.addGroup(Alignment.LEADING, groupLayout.createSequentialGroup()
.addContainerGap()
.addComponent(clb1))
.addGroup(Alignment.LEADING, groupLayout.createSequentialGroup()
.addGap(30)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(clb2)
.addComponent(clb3)
.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
.addComponent(pane2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(panel, Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 330, GroupLayout.PREFERRED_SIZE)))))
.addContainerGap(42, Short.MAX_VALUE))
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.TRAILING)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addComponent(clb1)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(panel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(clb2)
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(clb3)
.addGap(112)
.addComponent(pane2, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
c.setLayout(groupLayout);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(370, 300);
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.yellow);
g.fillOval(10, 180, 50, 50);
g.setColor(Color.BLACK);
g.setFont(new Font("궁서", Font.BOLD, 18));
g.drawString("23", 25, 210);
g.setColor(Color.yellow);
g.fillOval(70, 180, 50, 50);
g.setColor(Color.BLACK);
g.setFont(new Font("궁서", Font.BOLD, 18));
g.drawString("23", 85, 210);
g.setColor(Color.blue);
g.fillOval(130, 180, 50, 50);
g.setColor(Color.white);
g.setFont(new Font("궁서", Font.BOLD, 18));
g.drawString("23", 145, 210);
g.setColor(Color.red);
g.fillOval(190, 180, 50, 50);
g.setColor(Color.white);
g.setFont(new Font("궁서", Font.BOLD, 18));
g.drawString("23", 205, 210);
g.setColor(Color.red);
g.fillOval(250, 180, 50, 50);
g.setColor(Color.white);
g.setFont(new Font("궁서", Font.BOLD, 18));
g.drawString("23", 265, 210);
g.setColor(Color.blue);
g.fillOval(310, 180, 50, 50);
g.setColor(Color.white);
g.setFont(new Font("궁서", Font.BOLD, 18));
g.drawString("23", 325, 210);
}
public static void main(String[] args) {
new Ex03();
}
}
0 댓글