В коде динамически наполняется массив и его элементы выводятся на сцену, но выводится только один элемент - Java

Узнай цену своей работы

Формулировка задачи:

В коде представленном ниже...при клике на кнопку (в роли кнопки прямоугольник) Должен наполнятся массив одинаковыми элементами в данном случаи квадратами. и каждый из них должен выводится на сцену..но отображается только 1.. но и массив растёт....не пойму как реализовать процесс.. что бы на сцене отображались все элементы массива.
Листинг программы
  1. package myproject;
  2. import java.util.ArrayList;
  3. import javafx.application.Application;
  4. import static javafx.application.Application.launch;
  5. import javafx.event.EventHandler;
  6. import javafx.scene.Group;
  7. import javafx.scene.*;
  8. import javafx.scene.input.MouseEvent;
  9. import javafx.scene.layout.Pane;
  10. import javafx.scene.paint.Color;
  11. import javafx.scene.shape.Rectangle;
  12. import javafx.scene.text.Text;
  13. import javafx.stage.Stage;
  14. public class MyProject extends Application {
  15. double orgSceneX, orgSceneY;
  16. double orgTranslateX, orgTranslateY;
  17. @Override
  18. public void start(Stage primaryStage) {
  19. ArrayList<Node> myStage = new ArrayList<>();
  20. Rectangle uy = new Rectangle(60,20);
  21. Group myNode = new Group ();
  22. Rectangle grRct = new Rectangle(170,170);
  23. Text grText = new Text();
  24. grRct.setFill(Color.BLACK);
  25. grRct.setStrokeWidth(3);
  26. grText.setFill(Color.WHITE);
  27. grText.setX(20);
  28. grText.setY(35);
  29. myNode.getChildren().addAll(grRct, grText);
  30. myNode.setCursor(Cursor.MOVE);
  31. myNode.setOnMousePressed(circleOnMousePressedEventHandler);
  32. myNode.setOnMouseDragged(circleOnMouseDraggedEventHandler);
  33. myNode.setOnMouseEntered(e->{
  34. grRct.setStroke(Color.RED);
  35. grRct.setStrokeWidth(3);
  36. });
  37. myNode.setOnMouseExited(e->{
  38. grRct.setStroke(Color.BLACK);
  39. grRct.setStrokeWidth(3);
  40. });
  41. uy.setX(50);
  42. uy.setY(50);
  43. Pane root = new Pane();
  44. Scene myscene = new Scene(root, 700, 650);
  45. uy.setOnMouseClicked(e->{
  46. Group t = new Group(myNode);
  47. myStage.add(t);
  48. int iq = myStage.size()-1;
  49. root.getChildren().addAll(myStage.get(iq));
  50. grText.setText(Integer.toString(iq));
  51. });
  52. myscene.setFill(Color.DARKCYAN);
  53. primaryStage.setOpacity(0.95);
  54. root.getChildren().addAll(uy);
  55. primaryStage.setTitle("NodeCreator");
  56. primaryStage.setScene(myscene);
  57. primaryStage.show();
  58. }
  59. public static void main(String[] args) {
  60. launch(args);
  61. }
  62. EventHandler<MouseEvent> circleOnMousePressedEventHandler =
  63. new EventHandler<MouseEvent>() {
  64. @Override
  65. public void handle(MouseEvent t) {
  66. orgSceneX = t.getSceneX();
  67. orgSceneY = t.getSceneY();
  68. orgTranslateX = ((Node)(t.getSource())).getTranslateX();
  69. orgTranslateY = ((Node)(t.getSource())).getTranslateY();
  70. }
  71. };
  72. EventHandler<MouseEvent> circleOnMouseDraggedEventHandler =
  73. new EventHandler<MouseEvent>() {
  74. @Override
  75. public void handle(MouseEvent t) {
  76. double offsetX = t.getSceneX() - orgSceneX;
  77. double offsetY = t.getSceneY() - orgSceneY;
  78. double newTranslateX = orgTranslateX + offsetX;
  79. double newTranslateY = orgTranslateY + offsetY;
  80. ((Node)(t.getSource())).setTranslateX(newTranslateX);
  81. ((Node)(t.getSource())).setTranslateY(newTranslateY);
  82. }
  83. };
  84. }

Решение задачи: «В коде динамически наполняется массив и его элементы выводятся на сцену, но выводится только один элемент»

textual
Листинг программы
  1. import java.util.ArrayList;
  2. import javafx.application.Application;
  3. import static javafx.application.Application.launch;
  4. import javafx.event.EventHandler;
  5. import javafx.scene.Group;
  6. import javafx.scene.*;
  7. import javafx.scene.input.MouseEvent;
  8. import javafx.scene.layout.Pane;
  9. import javafx.scene.paint.Color;
  10. import javafx.scene.shape.Rectangle;
  11. import javafx.scene.text.Text;
  12. import javafx.stage.Stage;
  13.  
  14. public class MyProject extends Application {
  15.     double orgSceneX, orgSceneY;
  16.     double orgTranslateX, orgTranslateY;
  17.     @Override
  18.     public void start(Stage primaryStage) {
  19.          
  20.         ArrayList<GrNod> myStage = new ArrayList<>();
  21.         Rectangle uy = new Rectangle(60,20);
  22.        
  23.        
  24.        
  25.         Pane root = new Pane();
  26.        
  27.         Scene myscene = new Scene(root, 700, 650);
  28.        
  29.         uy.setOnMouseClicked(e->{
  30.            
  31.            GrNod t = new GrNod(uy);
  32.            myStage.add(t);
  33.            int iq = myStage.size()-1;
  34.            root.getChildren().add(t);              
  35.            t.grText.setText(Integer.toString(iq));
  36.         });
  37.         myscene.setFill(Color.DARKCYAN);
  38.        
  39.         primaryStage.setOpacity(0.95);
  40.         root.getChildren().addAll(uy);
  41.         primaryStage.setTitle("NodeCreator");
  42.         primaryStage.setScene(myscene);
  43.         primaryStage.show();
  44.     }
  45.    
  46.     public static void main(String[] args) {
  47.         launch(args);
  48.     }
  49.  
  50.     EventHandler<MouseEvent> circleOnMousePressedEventHandler =
  51.         new EventHandler<MouseEvent>() {
  52.  
  53.         @Override
  54.         public void handle(MouseEvent t) {
  55.             orgSceneX = t.getSceneX();
  56.             orgSceneY = t.getSceneY();
  57.             orgTranslateX = ((Node)(t.getSource())).getTranslateX();
  58.             orgTranslateY = ((Node)(t.getSource())).getTranslateY();
  59.         }
  60.     };
  61.     EventHandler<MouseEvent> circleOnMouseDraggedEventHandler =
  62.         new EventHandler<MouseEvent>() {
  63.  
  64.         @Override
  65.         public void handle(MouseEvent t) {
  66.             double offsetX = t.getSceneX() - orgSceneX;
  67.             double offsetY = t.getSceneY() - orgSceneY;
  68.             double newTranslateX = orgTranslateX + offsetX;
  69.             double newTranslateY = orgTranslateY + offsetY;
  70.             ((Node)(t.getSource())).setTranslateX(newTranslateX);
  71.             ((Node)(t.getSource())).setTranslateY(newTranslateY);
  72.         }
  73.     };
  74.    
  75.     class GrNod extends Group{
  76.         Rectangle grRct;
  77.         Text grText;
  78.         public GrNod(Rectangle uy){
  79.          grRct = new Rectangle(170,170);
  80.          grText = new Text();
  81.        
  82.          grRct.setFill(Color.BLACK);
  83.          grRct.setStrokeWidth(3);
  84.        
  85.          grText.setFill(Color.WHITE);
  86.          grText.setX(20);
  87.          grText.setY(35);
  88.        
  89.          this.getChildren().addAll(grRct, grText);
  90.          this.setCursor(Cursor.MOVE);
  91.        
  92.          this.setOnMousePressed(circleOnMousePressedEventHandler);
  93.          this.setOnMouseDragged(circleOnMouseDraggedEventHandler);
  94.  
  95.          this.setOnMouseEntered(e->{
  96.             grRct.setStroke(Color.RED);
  97.             grRct.setStrokeWidth(3);
  98.         });
  99.          this.setOnMouseExited(e->{
  100.             grRct.setStroke(Color.BLACK);
  101.             grRct.setStrokeWidth(3);
  102.         });
  103.         uy.setX(50);
  104.         uy.setY(50);  
  105.     }
  106.        
  107.     }
  108.    
  109. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.364 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы