• 강제로 컴포넌트를 다시 그리도록 하는 메소드
• 컴포넌트의 페인팅 과정을 진행
• 자바 플랫폼에게 다시 그리도록 지시
component.repaint();
• 프로그램 내에서 모양 또는 위치를 변경한 경우
• repaint( ) 호출 시 paintComponent( )가 호출된다.
• 해당 컴포넌트에 repaint( ) 메소드를 호출하면 새로운 위치에 다시 그려진다.
• But, 이전에 그려진 모양은 남아있다.
• 이를 해결하기 위해서는 부모 컴포넌트의 repaint( ) 메소드를 호출하는 것이 좋다.
component.getParent().repaint();
• 컨테이너 배치관리자에게 자식 컴포넌트를 다시 배치하도록 지시하는 메소드
• 컨테이너에 변경이 생기는 경우 사용
-> 프로그램 내에서 컴포넌트 삽입 또는 삭제의 경우
container.revalidate(); // 컴포넌트 재배치를 지시
container.repaint(); // 컨터이너 다시 그리기
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RepaintMethodEx extends JFrame {
private ExPanel p = new ExPanel();
public RepaintMethodEx() {
super("repaint() 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(p);
setSize(500, 500);
setVisible(true);
}
class ExPanel extends JPanel {
// Point 클래스는 java.awt.*에 존재
private Vector<Point> startVector = new Vector<Point>();
private Vector<Point> endVector = new Vector<Point>();
public ExPanel() {
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e) {
Point startPoint = e.getPoint();
startVector.add(startPoint);
}
public void mouseReleased(MouseEvent e) {
Point endPoint = e.getPoint();
endVector.add(endPoint);
repaint();
}
});
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
for(int i=0; i<startVector.size(); i++) {
Point s = startVector.elementAt(i);
Point e = endVector.elementAt(i);
g.drawLine((int)s.getX(), (int)s.getY(), (int)e.getX(), (int)e.getY());
}
}
}
public static void main(String[] args) {
new RepaintMethodEx();
}
}
• 실행 결과