a simple Java-FX Application which Simulate the Approximation of Pi https://nextn.xyz
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
3.1 KiB

  1. package montecarlopi;
  2. import java.util.Observable;
  3. import java.util.Observer;
  4. import javafx.scene.control.Button;
  5. import javafx.scene.control.Label;
  6. import javafx.scene.control.ListView;
  7. import javafx.scene.layout.BorderPane;
  8. import javafx.scene.layout.*;
  9. import javafx.scene.text.Text;
  10. public class View implements Observer {
  11. private Controller c;
  12. private BorderPane masterPane;
  13. private Label currPi, in, out, tries, exactPi = null;
  14. private int count = 0;
  15. private ListView<String> list;
  16. public View(Controller c) {
  17. this.c = c;
  18. initPane();
  19. }
  20. public Controller getController() {
  21. return c;
  22. }
  23. public BorderPane getPane() {
  24. return masterPane;
  25. }
  26. private void initPane() {
  27. masterPane = new BorderPane();
  28. currPi = new Label();
  29. in = new Label();
  30. out = new Label();
  31. tries = new Label();
  32. exactPi = new Label();
  33. currPi.setText("Approximation for Pi: 0");
  34. in.setText("Inside: 0");
  35. out.setText("Outside: 0");
  36. tries.setText("Attempt: 0");
  37. exactPi.setText("Exact value: 3.1415926");
  38. GridPane rightSide = new GridPane();
  39. rightSide.add(tries, 0, 0);
  40. rightSide.add(in, 0, 1);
  41. rightSide.add(out, 0, 2);
  42. rightSide.add(exactPi, 0, 3);
  43. rightSide.add(currPi, 0, 4);
  44. GridPane buttons = new GridPane();
  45. Button add1000, reset, auto, stop;
  46. GridPane ThreadList = new GridPane();
  47. Text text = new Text("running Threads");
  48. list = new ListView<>();
  49. list.setPrefSize(100, 100);
  50. VBox box = new VBox();
  51. box.getChildren().add(list);
  52. ThreadList.add(box, 0, 1);
  53. ThreadList.add(text, 0, 0);
  54. add1000 = new Button();
  55. reset = new Button();
  56. auto = new Button();
  57. stop = new Button();
  58. add1000.setText("+ 1000");
  59. stop.setText("stop Threads");
  60. reset.setText("Reset");
  61. auto.setText("generate Auto (Thread)");
  62. buttons.add(add1000, 1, 0);
  63. buttons.add(reset, 3, 0);
  64. buttons.add(auto, 4, 0);
  65. buttons.add(stop, 1, 1);
  66. rightSide.setVgap(5);
  67. rightSide.setHgap(5);
  68. rightSide.add(buttons, 0, 5);
  69. rightSide.add(ThreadList, 0, 6);
  70. masterPane.setRight(rightSide);
  71. masterPane.setCenter(c.getModel().getPane());
  72. add1000.setOnAction(listener -> {
  73. c.addThousand();
  74. });
  75. reset.setOnAction(listener -> {
  76. c.getModel().reset(list);
  77. });
  78. auto.setOnAction(listener -> {
  79. c.getModel().generateAuto(list, count);
  80. count++;
  81. });
  82. stop.setOnAction(listener -> {
  83. c.getModel().stop(list);
  84. count=0;
  85. });
  86. }
  87. ;
  88. @Override
  89. public void update(Observable o, Object arg) {
  90. currPi.setText("Approximation for Pi: " + c.getModel().getPi());
  91. in.setText("Inside: " + c.getModel().getIn());
  92. out.setText("Outside: " + c.getModel().getOut());
  93. tries.setText("Attempt: " + c.getModel().getTries());
  94. }
  95. }