-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathExample112.java
More file actions
49 lines (40 loc) · 1.32 KB
/
Example112.java
File metadata and controls
49 lines (40 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// Example 112 from page 85
//
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
class AnimatedCanvas extends Canvas implements Runnable {
static final long serialVersionUID = 50L;
private int scale = 50, step = 5;
AnimatedCanvas() { Thread u = new Thread(this); u.start(); }
@Override
public void run() { // from Runnable
for (;;) { // forever sleep and repaint
try { Thread.sleep(100); } catch (InterruptedException e) { }
if (scale <= 0 || scale >= 100)
step = -step;
scale += step;
repaint();
}
}
@Override
public void paint(Graphics g) { // from Canvas
Dimension size = getSize();
g.fillRect(scale*(size.width-20)/100, 0, 20, 20);
g.fillRect((100-scale)*(size.width-20)/100, size.height-20, 20, 20);
}
@Override
public Dimension getPreferredSize() { return new Dimension(400, 100); }
@Override
public Dimension getMinimumSize() { return getPreferredSize(); }
}
class Example112 {
public static void main(String[] args) {
Canvas anim1 = new AnimatedCanvas();
Canvas anim2 = new AnimatedCanvas();
Frame f = new Frame("Animation with threads");
f.add(anim1, "North"); f.add(anim2, "South");
f.pack(); f.setVisible(true);
}
}