Skip to content

Commit 7076167

Browse files
committed
commit Exercise_30_05
1 parent 96bd3b9 commit 7076167

File tree

2 files changed

+122
-0
lines changed

2 files changed

+122
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package exercise_30_05;
2+
3+
import javafx.application.Application;
4+
import javafx.geometry.Pos;
5+
import javafx.scene.Scene;
6+
import javafx.scene.control.Button;
7+
import javafx.scene.input.MouseButton;
8+
import javafx.scene.layout.BorderPane;
9+
import javafx.scene.layout.HBox;
10+
import javafx.stage.Stage;
11+
12+
public class Exercise_30_05 extends Application {
13+
private final static double WIDTH = 300;
14+
private final static double HEIGHT = 300;
15+
private final static double RADIUS = 100;
16+
17+
@Override
18+
public void start(Stage primaryStage) {
19+
FanPane fanPane = new FanPane(WIDTH, HEIGHT, RADIUS);
20+
21+
HBox hBox = new HBox(5);
22+
hBox.setAlignment(Pos.CENTER);
23+
Button pause = new Button("Pause");
24+
Button resume = new Button("Resume");
25+
Button reverse = new Button("Reverse");
26+
hBox.getChildren().addAll(pause, resume, reverse);
27+
28+
BorderPane pane = new BorderPane(fanPane);
29+
pane.setBottom(hBox);
30+
31+
Scene scene = new Scene(pane, WIDTH, HEIGHT);
32+
primaryStage.setTitle("Exercise_30_05");
33+
primaryStage.setScene(scene);
34+
primaryStage.show();
35+
36+
pause.setOnAction(e -> fanPane.suspend());
37+
resume.setOnAction(e -> fanPane.resume());
38+
reverse.setOnAction(e -> fanPane.reverse());
39+
40+
pane.setOnMouseClicked(e -> {
41+
if(e.getButton().equals(MouseButton.PRIMARY)) {
42+
fanPane.increaseSpeed();
43+
}
44+
else if(e.getButton().equals(MouseButton.SECONDARY)) {
45+
fanPane.decreaseSpeed();
46+
}
47+
});
48+
}
49+
50+
public static void main(String[] args) {
51+
launch(args);
52+
}
53+
54+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package exercise_30_05;
2+
3+
import javafx.application.Platform;
4+
import javafx.scene.layout.Pane;
5+
import javafx.scene.paint.Color;
6+
import javafx.scene.shape.Arc;
7+
import javafx.scene.shape.ArcType;
8+
import javafx.scene.shape.Circle;
9+
10+
public class FanPane extends Pane {
11+
private double rotationAngle = 1;
12+
private Arc[] arcs = new Arc[4];
13+
private Circle c;
14+
private int sleepTime = 10;
15+
private Thread thread = new Thread(() -> {
16+
try {
17+
while(true) {
18+
Platform.runLater(() -> spin());
19+
Thread.sleep(sleepTime);
20+
}
21+
}
22+
catch (InterruptedException ex) {
23+
}
24+
});
25+
26+
public FanPane(double paneWidth, double paneHeight, double radius) {
27+
c = new Circle(paneWidth * 0.5, paneHeight * 0.5, radius);
28+
c.setStroke(Color.BLACK);
29+
c.setFill(Color.TRANSPARENT);
30+
double angle = 40;
31+
for(int i = 0; i < arcs.length; i++) {
32+
arcs[i] = new Arc(c.getCenterX(), c.getCenterY(), c.getRadius() * 0.9, c.getRadius() * 0.9, 15 + i * 90, angle);
33+
arcs[i].setType(ArcType.ROUND);
34+
arcs[i].setFill(Color.RED);
35+
}
36+
getChildren().add(c);
37+
getChildren().addAll(arcs);
38+
thread.start();
39+
}
40+
41+
public void spin() {
42+
for(int i = 0; i < arcs.length; i++) {
43+
arcs[i].setStartAngle(arcs[i].getStartAngle() + rotationAngle);
44+
}
45+
}
46+
47+
public void resume() {
48+
thread.resume();
49+
}
50+
51+
public void suspend() {
52+
thread.suspend();
53+
}
54+
55+
public void reverse() {
56+
rotationAngle *= -1;
57+
}
58+
59+
public void increaseSpeed() {
60+
if(sleepTime > 1) {
61+
sleepTime--;
62+
}
63+
}
64+
65+
public void decreaseSpeed() {
66+
sleepTime++;
67+
}
68+
}

0 commit comments

Comments
 (0)