paintComponent()
- 컴포넌트가 처음으로 그려질 때
- 컴포넌트의 크기나 위치 변경 등 컴포넌트에 변화가 생길 때
- 다른 윈도우에 의해 가려졌다가 드러날 때
- 아이콘화되었다가 본래 크기로 복구할 때
- 응용프로그램이 컴포넌트의 repaint() 메소드를 호출하여 강제로 다시 그릴 때
JFrame에서는 paintComponent()가 먹히지 않는다
setLocation()
setText() 등은 repaint()를 들고있다
이벤트 분배 스레드는 repaint를 한번만 하도록 되어있다
package ch14;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class EventEx05 extends JFrame {
private JLabel la; // new 는 생성자에서 하자
int nowY = 0;
Container c;
public EventEx05() {
la = new JLabel("Hello");
setTitle("MouseEvent 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c = getContentPane();
c.addMouseListener(new MyMouseListener());
c.setLayout(null); // absolute 레이아웃
la.setSize(50, 20); // 라벨의 사이즈
la.setLocation(30, 30); // 라벨의 위치
c.add(la);
setSize(250, 250);
setVisible(true); // paint()
}
class MyMouseListener extends MouseAdapter {
// 마우스를 클릭하고 놓았을 때
@Override
public void mousePressed(MouseEvent e) {
int x = e.getX(); // x 좌표
int y = e.getY(); // y 좌표
nowY = la.getY();
if (la.getY() < y) {
new Thread(new Runnable() {
@Override
public void run() {
while (la.getY() < y) {
// setLocation은 repaint를 들고 있다
la.setLocation(x, nowY + 1); // 라벨 위치 변경
nowY = la.getY();
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}).start();
} else if (la.getY() > y) {
new Thread(new Runnable() {
@Override
public void run() {
while (la.getY() > y) {
la.setLocation(x, nowY - 1); // 라벨 위치 변경
nowY = la.getY();
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}).start();
}
}
}
public static void main(String[] args) {
new EventEx05();
}
}
'Programming Language > Java' 카테고리의 다른 글
자바 그래프 만들기 (xml, json, gson, 공공데이터, SWING) (0) | 2020.04.22 |
---|---|
자바 SWING 리스너 (0) | 2020.04.22 |
자바 SWING, WindowBuilder (0) | 2020.04.20 |
자바 문자 보내기 (0) | 2020.04.17 |
자바 String, StringBuilder, StringBuffer (0) | 2020.04.17 |