Skip to content

Commit f8c1595

Browse files
committed
Chapter 02 section 08 updated.
1 parent 665f73e commit f8c1595

File tree

5 files changed

+31
-40
lines changed

5 files changed

+31
-40
lines changed

02-Java-Swing-Basics/08-MVC-in-Algorithm-Visualization/src/AlgoFrame.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
1-
import java.awt.Graphics2D;
2-
import java.awt.Graphics;
3-
import java.awt.Dimension;
4-
import java.awt.Color;
5-
import java.awt.RenderingHints;
6-
71
import javax.swing.*;
2+
import java.awt.*;
3+
84

95
public class AlgoFrame extends JFrame{
106

117
private int canvasWidth;
128
private int canvasHeight;
13-
private JPanel canvas;
149

1510
public AlgoFrame(String title, int canvasWidth, int canvasHeight){
1611

@@ -30,7 +25,6 @@ public AlgoFrame(String title, int canvasWidth, int canvasHeight){
3025
}
3126

3227
public AlgoFrame(String title){
33-
3428
this(title, 1024, 768);
3529
}
3630

@@ -39,7 +33,7 @@ public AlgoFrame(String title){
3933

4034
// data
4135
private Circle[] circles;
42-
public void setCircles(Circle[] circles){
36+
public void render(Circle[] circles){
4337
this.circles = circles;
4438
repaint();
4539
}
@@ -68,7 +62,7 @@ public void paintComponent(Graphics g) {
6862
AlgoVisHelper.setStrokeWidth(g2d,1);
6963
AlgoVisHelper.setColor(g2d, Color.RED);
7064
for(Circle circle: circles)
71-
AlgoVisHelper.strokeCircle(g2d, circle.x, circle.y, circle.r);
65+
AlgoVisHelper.strokeCircle(g2d, circle.x, circle.y, circle.getR());
7266
}
7367

7468
@Override
@@ -77,5 +71,3 @@ public Dimension getPreferredSize(){
7771
}
7872
}
7973
}
80-
81-

02-Java-Swing-Basics/08-MVC-in-Algorithm-Visualization/src/AlgoVisHelper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,23 @@ public class AlgoVisHelper {
77

88
private AlgoVisHelper(){}
99

10-
static public void strokeCircle(Graphics2D g, int x, int y, int r){
10+
public static void strokeCircle(Graphics2D g, int x, int y, int r){
1111

1212
Ellipse2D circle = new Ellipse2D.Double(x-r, y-r, 2*r, 2*r);
1313
g.draw(circle);
1414
}
1515

16-
static public void fillCircle(Graphics2D g, int x, int y, int r){
16+
public static void fillCircle(Graphics2D g, int x, int y, int r){
1717

1818
Ellipse2D circle = new Ellipse2D.Double(x-r, y-r, 2*r, 2*r);
1919
g.fill(circle);
2020
}
2121

22-
static public void setColor(Graphics2D g, Color color){
22+
public static void setColor(Graphics2D g, Color color){
2323
g.setColor(color);
2424
}
2525

26-
static public void setStrokeWidth(Graphics2D g, int w){
26+
public static void setStrokeWidth(Graphics2D g, int w){
2727
int strokeWidth = w;
2828
g.setStroke(new BasicStroke(strokeWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
2929
}

02-Java-Swing-Basics/08-MVC-in-Algorithm-Visualization/src/AlgoVisualizer.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,37 @@
33

44
public class AlgoVisualizer {
55

6-
private int N;
7-
private Circle[] circles;
8-
static private int R = 50;
9-
private AlgoFrame frame;
6+
private Circle[] circles; // 数据
7+
private AlgoFrame frame; // 视图
108

119
public AlgoVisualizer(int sceneWidth, int sceneHeight, int N){
1210

13-
this.frame = new AlgoFrame("Welcome", sceneWidth, sceneHeight);
14-
15-
this.N = N;
11+
// 初始化数据
1612
circles = new Circle[N];
17-
13+
int R = 50;
1814
for(int i = 0 ; i < N ; i ++ ) {
19-
int x = (int)(Math.random()*(frame.getCanvasWidth()-2*R)) + R;
20-
int y = (int)(Math.random()*(frame.getCanvasHeight()-2*R)) + R;
15+
int x = (int)(Math.random()*(sceneWidth-2*R)) + R;
16+
int y = (int)(Math.random()*(sceneHeight-2*R)) + R;
2117
int vx = (int)(Math.random()*11) - 5;
2218
int vy = (int)(Math.random()*11) - 5;
2319
circles[i] = new Circle(x, y, R, vx, vy);
2420
}
21+
22+
// 初始化视图
23+
EventQueue.invokeLater(() -> {
24+
frame = new AlgoFrame("Welcome", sceneWidth, sceneHeight);
25+
new Thread(() -> {
26+
run();
27+
}).start();
28+
});
2529
}
2630

27-
public void run(){
31+
// 动画逻辑
32+
private void run(){
2833

2934
while(true){
3035
// 绘制数据
31-
frame.setCircles(circles);
36+
frame.render(circles);
3237
AlgoVisHelper.pause(20);
3338

3439
// 更新数据
@@ -43,11 +48,6 @@ public static void main(String[] args) {
4348
int sceneHeight = 800;
4449
int N = 10;
4550

46-
EventQueue.invokeLater(() -> {
47-
AlgoVisualizer vis = new AlgoVisualizer(sceneWidth, sceneHeight, N);
48-
new Thread(() -> {
49-
vis.run();
50-
}).start();
51-
});
51+
AlgoVisualizer vis = new AlgoVisualizer(sceneWidth, sceneHeight, N);
5252
}
5353
}

02-Java-Swing-Basics/08-MVC-in-Algorithm-Visualization/src/Circle.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
21
public class Circle {
32

4-
public int x;
5-
public int y;
6-
public int r;
7-
public int vx;
8-
public int vy;
3+
public int x, y;
4+
private int r;
5+
public int vx, vy;
96

107
public Circle(int x, int y, int r, int vx, int vy){
118
this.x = x;
@@ -15,6 +12,8 @@ public Circle(int x, int y, int r, int vx, int vy){
1512
this.vy = vy;
1613
}
1714

15+
public int getR() { return r; }
16+
1817
public void move(int minx, int miny, int maxx, int maxy){
1918
x += vx;
2019
y += vy;

02-Java-Swing-Basics/Chapter-02.key

31.8 KB
Binary file not shown.

0 commit comments

Comments
 (0)