Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 49e49a6

Browse files
committed
Added Play Pause Button, Stored Edge values
1 parent 7015bf3 commit 49e49a6

File tree

6 files changed

+113
-15
lines changed

6 files changed

+113
-15
lines changed

‎nbproject/private/private.xml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
55
<group>
66
<file>file:/F:/Java%20Workspace/FXSimulator/src/fxsimulator/CanvasController.java</file>
7+
<file>file:/F:/Java%20Workspace/FXSimulator/src/fxsimulator/Node.java</file>
78
</group>
89
</open-files>
910
</project-private>

‎src/fxsimulator/Canvas.fxml‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,22 @@
161161
</JFXButton>
162162
</children>
163163
</JFXNodesList>
164+
<JFXButton fx:id="playPauseButton" contentDisplay="GRAPHIC_ONLY" layoutX="111.0" layoutY="1.0" onAction="#PlayPauseHandle" prefHeight="35.0" prefWidth="44.0" style="-fx-background-radius: 100;">
165+
<graphic>
166+
<ImageView fx:id="playPauseImage" fitHeight="28.0" fitWidth="41.0" pickOnBounds="true" preserveRatio="true">
167+
<image>
168+
<Image url="@../res/pause_black_48x48.png" />
169+
</image>
170+
</ImageView>
171+
</graphic>
172+
<tooltip>
173+
<Tooltip text="Pause" textAlignment="CENTER">
174+
<font>
175+
<Font size="12.5" />
176+
</font>
177+
</Tooltip>
178+
</tooltip>
179+
</JFXButton>
164180
</children>
165181
</AnchorPane>
166182
</children>

‎src/fxsimulator/CanvasController.java‎

Lines changed: 88 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import javafx.animation.Interpolator;
2121
import javafx.animation.ScaleTransition;
2222
import javafx.animation.SequentialTransition;
23+
import javafx.animation.StrokeTransition;
2324
import javafx.beans.value.ChangeListener;
2425
import javafx.beans.value.ObservableValue;
2526
import javafx.event.ActionEvent;
@@ -35,18 +36,22 @@
3536
import javafx.scene.control.TextInputDialog;
3637
import javafx.scene.control.ToggleGroup;
3738
import javafx.scene.effect.BlendMode;
39+
import javafx.scene.image.Image;
40+
import javafx.scene.image.ImageView;
3841
import javafx.scene.input.MouseButton;
3942
import javafx.scene.input.MouseEvent;
4043
import javafx.scene.layout.Pane;
4144
import javafx.scene.paint.Color;
45+
import javafx.scene.paint.Paint;
4246
import javafx.scene.shape.Circle;
4347
import javafx.scene.shape.Line;
48+
import javafx.scene.shape.Shape;
4449
import javafx.util.Duration;
4550

4651
public class CanvasController implements Initializable, ChangeListener {
4752

4853
@FXML
49-
private JFXButton canvasBackButton, clearButton, resetButton, gear;
54+
private JFXButton canvasBackButton, clearButton, resetButton, gear, playPauseButton;
5055
@FXML
5156
private JFXToggleButton addNodeButton, addEdgeButton, bfsButton, dfsButton, dijkstraButton, articulationPointButton;
5257
@FXML
@@ -67,17 +72,22 @@ public class CanvasController implements Initializable, ChangeListener {
6772
private JFXNodesList nodeList;
6873
@FXML
6974
private JFXSlider slider;
75+
@FXML
76+
private ImageView playPauseImage;
7077

7178
int nNode = 0, time = 500;
7279
NodeFX selectedNode = null, articulationStart = null;
7380
List<NodeFX> circles = new ArrayList<NodeFX>();
81+
List<Edge> mstEdges = new ArrayList<Edge>();
82+
List<Shape> edges = new ArrayList<Shape>();
7483
boolean addNode = true, addEdge = false, calculate = false,
75-
calculated = false;
84+
calculated = false, playing = false, paused = false;
7685
List<Label> distances = new ArrayList<Label>(), visitTime = new ArrayList<Label>(), lowTime = new ArrayList<Label>();
7786
private boolean weighted = Panel1Controller.weighted, unweighted = Panel1Controller.unweighted,
7887
directed = Panel1Controller.directed, undirected = Panel1Controller.undirected,
7988
bfs = true, dfs = true, dijkstra = true, articulationPoint = true;
8089
Algorithm algo = new Algorithm();
90+
SequentialTransition st;
8191

8292
@Override
8393
public void initialize(URL url, ResourceBundle rb) {
@@ -221,11 +231,15 @@ public void handle(MouseEvent mouseEvent) {
221231
}
222232

223233
if (undirected) {
224-
selectedNode.node.adjacents.add(new Edge(circle.node, Integer.valueOf(weight.getText())));
225-
circle.node.adjacents.add(new Edge(selectedNode.node, Integer.valueOf(weight.getText())));
234+
Edge temp = new Edge(selectedNode.node, circle.node, Integer.valueOf(weight.getText()), edgeLine);
235+
mstEdges.add(temp);
236+
selectedNode.node.adjacents.add(new Edge(selectedNode.node, circle.node, Integer.valueOf(weight.getText()), edgeLine));
237+
circle.node.adjacents.add(new Edge(circle.node, selectedNode.node, Integer.valueOf(weight.getText()), edgeLine));
238+
edges.add(edgeLine);
226239
} else if (directed) {
227-
selectedNode.node.adjacents.add(new Edge(circle.node, Integer.valueOf(weight.getText())));
228-
circle.node.revAdjacents.add(new Edge(selectedNode.node, Integer.valueOf(weight.getText())));
240+
selectedNode.node.adjacents.add(new Edge(selectedNode.node, circle.node, Integer.valueOf(weight.getText()), arrow));
241+
circle.node.revAdjacents.add(new Edge(circle.node, selectedNode.node, Integer.valueOf(weight.getText()), arrow));
242+
edges.add(arrow);
229243
}
230244
}
231245
if (addNode || (calculate && !calculated) || addEdge) {
@@ -285,7 +299,29 @@ public void handle(MouseEvent mouseEvent) {
285299
}
286300

287301
};
288-
302+
303+
@FXML
304+
public void PlayPauseHandle(ActionEvent event){
305+
System.out.println("IN PLAYPAUSE");
306+
System.out.println(playing +" " + paused);
307+
if(playing){
308+
Image image = new Image(getClass().getResourceAsStream("/play_arrow_black_48x48.png"));
309+
playPauseImage.setImage(image);
310+
System.out.println("Pausing");
311+
st.pause();
312+
paused = true;
313+
playing = false;
314+
return;
315+
}
316+
if(paused){
317+
Image image = new Image(getClass().getResourceAsStream("/pause_black_48x48.png"));
318+
playPauseImage.setImage(image);
319+
st.play();
320+
playing = true;
321+
paused = false;
322+
return;
323+
}
324+
}
289325
@FXML
290326
public void ResetHandle(ActionEvent event) {
291327
ClearHandle(null);
@@ -312,6 +348,8 @@ public void ResetHandle(ActionEvent event) {
312348
dfsButton.setDisable(true);
313349
dijkstraButton.setDisable(true);
314350
articulationPointButton.setDisable(true);
351+
playing = false;
352+
paused = false;
315353
}
316354

317355
@FXML
@@ -352,6 +390,8 @@ public void ClearHandle(ActionEvent event) {
352390
dfs = false;
353391
articulationPoint = false;
354392
dijkstra = false;
393+
playing = false;
394+
paused = false;
355395
}
356396

357397
@FXML
@@ -492,7 +532,7 @@ public NodeFX(double x, double y, double rad, String name) {
492532
*/
493533
public class Algorithm {
494534

495-
SequentialTransitionst;
535+
496536

497537
//<editor-fold defaultstate="collapsed" desc="Dijkstra">
498538
public void newDijkstra(Node source) {
@@ -569,6 +609,7 @@ class Dijkstra {
569609
});
570610
st.onFinishedProperty();
571611
st.play();
612+
playing = true;
572613
//</editor-fold>
573614
}
574615
}
@@ -583,7 +624,7 @@ class BFS {
583624

584625
BFS(Node source) {
585626

586-
//<editor-fold defaultstate="collapsed" desc="Animation Initialize">
627+
//<editor-fold defaultstate="collapsed" desc="Set labels and distances">
587628
for (NodeFX n : circles) {
588629
distances.add(n.distance);
589630
n.distance.setLayoutX(n.point.x + 20);
@@ -614,13 +655,19 @@ class BFS {
614655
for (Edge e : u.adjacents) {
615656
if (e != null) {
616657
Node v = e.target;
658+
617659
if (!v.visited) {
618660
v.minDistance = u.minDistance + 1;
619661
v.visited = true;
620662
q.push(v);
621663
v.previous = u;
622664

623665
//<editor-fold defaultstate="collapsed" desc="Animation Control">
666+
//<editor-fold defaultstate="collapsed" desc="Change Edge colors">
667+
StrokeTransition ftEdge = new StrokeTransition(Duration.millis(time), e.line);
668+
ftEdge.setToValue(Color.rgb(163, 203, 56,1.0));
669+
st.getChildren().add(ftEdge);
670+
//</editor-fold>
624671
FillTransition ft1 = new FillTransition(Duration.millis(time), v.circle);
625672
ft1.setToValue(Color.FORESTGREEN);
626673
ft1.setOnFinished(ev -> {
@@ -646,12 +693,16 @@ class BFS {
646693
ft1.setToValue(Color.BLACK);
647694
ft1.play();
648695
}
696+
for(Shape n : edges){
697+
n.setStroke(Color.BLACK);
698+
}
649699
FillTransition ft1 = new FillTransition(Duration.millis(time), source.circle);
650700
ft1.setToValue(Color.RED);
651701
ft1.play();
652702
});
653703
st.onFinishedProperty();
654704
st.play();
705+
playing = true;
655706
//</editor-fold>
656707
}
657708
}
@@ -691,12 +742,16 @@ class DFS {
691742
ft1.setToValue(Color.BLACK);
692743
ft1.play();
693744
}
745+
for(Shape n : edges){
746+
n.setStroke(Color.BLACK);
747+
}
694748
FillTransition ft1 = new FillTransition(Duration.millis(time), source.circle);
695749
ft1.setToValue(Color.RED);
696750
ft1.play();
697751
});
698752
st.onFinishedProperty();
699753
st.play();
754+
playing = true;
700755
//</editor-fold>
701756
}
702757

@@ -716,8 +771,18 @@ public void DFSRecursion(Node source) {
716771
v.visited = true;
717772
v.previous = source;
718773
// v.circle.distance.setText("Dist. : " + v.minDistance);
774+
//<editor-fold defaultstate="collapsed" desc="Change Edge colors">
775+
StrokeTransition ftEdge = new StrokeTransition(Duration.millis(time), e.line);
776+
ftEdge.setToValue(Color.FORESTGREEN);
777+
st.getChildren().add(ftEdge);
778+
//</editor-fold>
719779
DFSRecursion(v);
720780
//<editor-fold defaultstate="collapsed" desc="Animation Control">
781+
//<editor-fold defaultstate="collapsed" desc="Change Edge colors">
782+
StrokeTransition ftEdge1 = new StrokeTransition(Duration.millis(time), e.line);
783+
ftEdge1.setToValue(Color.BLUEVIOLET);
784+
st.getChildren().add(ftEdge1);
785+
//</editor-fold>
721786
FillTransition ft1 = new FillTransition(Duration.millis(time), v.circle);
722787
ft1.setToValue(Color.BLUEVIOLET);
723788
ft1.onFinishedProperty();
@@ -782,6 +847,9 @@ class ArticulationPoint {
782847
ft1.setToValue(Color.BLACK);
783848
ft1.play();
784849
}
850+
for(Shape n : edges){
851+
n.setStroke(Color.BLACK);
852+
}
785853
for (NodeFX n : circles) {
786854
if (n.node.isArticulationPoint) {
787855
FillTransition ft1 = new FillTransition(Duration.millis(time), n);
@@ -792,6 +860,7 @@ class ArticulationPoint {
792860
});
793861
st.onFinishedProperty();
794862
st.play();
863+
playing = true;
795864
//</editor-fold>
796865
}
797866

@@ -823,6 +892,11 @@ void RecAP(Node s) {
823892
if (!v.visited) {
824893
v.previous = s;
825894
childCount++;
895+
//<editor-fold defaultstate="collapsed" desc="Change Edge colors">
896+
StrokeTransition ftEdge = new StrokeTransition(Duration.millis(time), e.line);
897+
ftEdge.setToValue(Color.FORESTGREEN);
898+
st.getChildren().add(ftEdge);
899+
//</editor-fold>
826900
RecAP(v);
827901

828902
s.lowTime = Math.min(s.lowTime, v.lowTime);
@@ -831,6 +905,11 @@ void RecAP(Node s) {
831905
}
832906

833907
//<editor-fold defaultstate="collapsed" desc="Animation Control">
908+
///<editor-fold defaultstate="collapsed" desc="Change Edge colors">
909+
StrokeTransition ftEdge1 = new StrokeTransition(Duration.millis(time), e.line);
910+
ftEdge1.setToValue(Color.BLUEVIOLET);
911+
st.getChildren().add(ftEdge1);
912+
//</editor-fold>
834913
FillTransition ft1 = new FillTransition(Duration.millis(time), v.circle);
835914
ft1.setToValue(Color.BLUEVIOLET);
836915
ft1.setOnFinished(ev -> {

‎src/fxsimulator/Edge.java‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,20 @@
55
*/
66
package fxsimulator;
77

8+
import javafx.scene.shape.Shape;
9+
810
/**
911
*
1012
* @author sowme
1113
*/
1214
public class Edge {
13-
public final Node target;
15+
public final Node source, target;
1416
public final double weight;
15-
16-
public Edge(Node argTarget) {
17-
target = argTarget; weight = 0;
17+
publicShapeline;
18+
public Edge(Node argSource, NodeargTarget) {
19+
source = argSource; target = argTarget; weight = 0;
1820
}
19-
public Edge(Node argTarget, double argWeight) {
20-
target = argTarget; weight = argWeight;
21+
public Edge(Node argSource, NodeargTarget, double argWeight, Shapeargline) {
22+
source = argSource; target = argTarget; weight = argWeight; line = argline;
2123
}
2224
}

‎src/res/pause_black_48x48.png‎

101 Bytes
Loading[フレーム]

‎src/res/play_arrow_black_48x48.png‎

208 Bytes
Loading[フレーム]

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /