forked from HarryDulaney/intro-to-java-programming
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathExercise16_03.java
111 lines (93 loc) · 3.91 KB
/
Exercise16_03.java
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package ch_16;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.ListChangeListener;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.StrokeType;
import javafx.stage.Stage;
import java.awt.*;
/**
* **16.3 (Traffic lights) Write a program that simulates a traffic light.
* The program lets the user select one of three lights:
* red, yellow, or green. When a radio button is selected, the
* light is turned on. Only one light can be on at a time (see
* Figure 16.37a). No light is on when the program starts.
*/
public class Exercise16_03 extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
VBox mainBox = new VBox(5);
HBox topBox = new HBox(5);
topBox.setAlignment(Pos.CENTER);
Rectangle rectangle = new Rectangle(100, 250);
rectangle.setStroke(Color.BLACK);
rectangle.setFill(Color.TRANSPARENT);
HBox buttonBox = new HBox(5);
ToggleGroup radioButtons = new ToggleGroup();
RadioButton redButton = new RadioButton("Red");
RadioButton greenButton = new RadioButton("Green");
RadioButton yellowButton = new RadioButton("Yellow");
radioButtons.getToggles().addAll(redButton, greenButton, yellowButton);
buttonBox.getChildren().addAll(redButton, greenButton, yellowButton);
buttonBox.setAlignment(Pos.BOTTOM_CENTER);
rectangle.setTranslateY(50);
rectangle.setTranslateX(30);
buttonBox.setTranslateY(100);
Circle redLight = new Circle(rectangle.getWidth() / 2 - 15);
redLight.setTranslateX(-62);
redLight.setTranslateY(-20);
redLight.setFill(Color.TRANSPARENT);
redLight.setStroke(Color.BLACK);
Circle greenLight = new Circle(rectangle.getWidth() / 2 - 15);
greenLight.setTranslateX(-137);
greenLight.setTranslateY(57);
greenLight.setFill(Color.TRANSPARENT);
greenLight.setStroke(Color.BLACK);
Circle yellowLight = new Circle(rectangle.getWidth() / 2 - 15);
yellowLight.setTranslateX(-212);
yellowLight.setTranslateY(135);
yellowLight.setFill(Color.TRANSPARENT);
yellowLight.setStroke(Color.BLACK);
radioButtons.selectedToggleProperty().addListener((observable, oldValue, newValue) -> {
if (redButton.isSelected()) {
redLight.setFill(Color.RED);
greenLight.setFill(Color.TRANSPARENT);
yellowLight.setFill(Color.TRANSPARENT);
} else if (greenButton.isSelected()) {
greenLight.setFill(Color.GREEN);
redLight.setFill(Color.TRANSPARENT);
yellowLight.setFill(Color.TRANSPARENT);
} else if (yellowButton.isSelected()) {
yellowLight.setFill(Color.YELLOW);
greenLight.setFill(Color.TRANSPARENT);
redLight.setFill(Color.TRANSPARENT);
}
});
topBox.getChildren().add(rectangle);
topBox.getChildren().add(redLight);
topBox.getChildren().add(greenLight);
topBox.getChildren().add(yellowLight);
mainBox.getChildren().add(topBox);
mainBox.getChildren().add(buttonBox);
redButton.setSelected(true);
Scene scene = new Scene(mainBox, 500, 400);
primaryStage.setScene(scene);
primaryStage.setTitle(getClass().getName());
primaryStage.show();
}
}