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

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

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

В коде представленном ниже...при клике на кнопку (в роли кнопки прямоугольник) Должен наполнятся массив одинаковыми элементами в данном случаи квадратами. и каждый из них должен выводится на сцену..но отображается только 1.. но и массив растёт....не пойму как реализовать процесс.. что бы на сцене отображались все элементы массива.
package myproject;
 
import java.util.ArrayList;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Text;
import javafx.stage.Stage;
 
public class MyProject extends Application {
    double orgSceneX, orgSceneY;
    double orgTranslateX, orgTranslateY;
    @Override
    public void start(Stage primaryStage) {
         
        ArrayList<Node> myStage = new ArrayList<>();
        Rectangle uy = new Rectangle(60,20);
       
        Group myNode = new Group ();
        Rectangle grRct = new Rectangle(170,170);
        Text grText = new Text();
        
        grRct.setFill(Color.BLACK);
        grRct.setStrokeWidth(3);
        
        grText.setFill(Color.WHITE);
        grText.setX(20);
        grText.setY(35);
        
        myNode.getChildren().addAll(grRct, grText);
        myNode.setCursor(Cursor.MOVE);
        
        myNode.setOnMousePressed(circleOnMousePressedEventHandler);
        myNode.setOnMouseDragged(circleOnMouseDraggedEventHandler);
 
        myNode.setOnMouseEntered(e->{
            grRct.setStroke(Color.RED);
            grRct.setStrokeWidth(3);
        });
         myNode.setOnMouseExited(e->{
            grRct.setStroke(Color.BLACK);
            grRct.setStrokeWidth(3);
        });
        uy.setX(50);
        uy.setY(50);
       
        Pane root = new Pane();
        
        Scene myscene = new Scene(root, 700, 650);
        uy.setOnMouseClicked(e->{
            
            Group t = new Group(myNode);
           myStage.add(t);
           int iq = myStage.size()-1;
           root.getChildren().addAll(myStage.get(iq));
           grText.setText(Integer.toString(iq));
        });
        myscene.setFill(Color.DARKCYAN);
        
        primaryStage.setOpacity(0.95);
        root.getChildren().addAll(uy);
        primaryStage.setTitle("NodeCreator");
        primaryStage.setScene(myscene);
        primaryStage.show();
    }
 
    public static void main(String[] args) {
        launch(args);
    }
    EventHandler<MouseEvent> circleOnMousePressedEventHandler = 
        new EventHandler<MouseEvent>() {
 
        @Override
        public void handle(MouseEvent t) {
            orgSceneX = t.getSceneX();
            orgSceneY = t.getSceneY();
            orgTranslateX = ((Node)(t.getSource())).getTranslateX();
            orgTranslateY = ((Node)(t.getSource())).getTranslateY();
        }
    };
    EventHandler<MouseEvent> circleOnMouseDraggedEventHandler = 
        new EventHandler<MouseEvent>() {
 
        @Override
        public void handle(MouseEvent t) {
            double offsetX = t.getSceneX() - orgSceneX;
            double offsetY = t.getSceneY() - orgSceneY;
            double newTranslateX = orgTranslateX + offsetX;
            double newTranslateY = orgTranslateY + offsetY;
            ((Node)(t.getSource())).setTranslateX(newTranslateX);
            ((Node)(t.getSource())).setTranslateY(newTranslateY);
        }
    };
}

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

textual
Листинг программы
import java.util.ArrayList;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Text;
import javafx.stage.Stage;
 
public class MyProject extends Application {
    double orgSceneX, orgSceneY;
    double orgTranslateX, orgTranslateY;
    @Override
    public void start(Stage primaryStage) {
         
        ArrayList<GrNod> myStage = new ArrayList<>();
        Rectangle uy = new Rectangle(60,20);
        
        
       
        Pane root = new Pane();
        
        Scene myscene = new Scene(root, 700, 650);
        
        uy.setOnMouseClicked(e->{
            
           GrNod t = new GrNod(uy);
           myStage.add(t);
           int iq = myStage.size()-1;
           root.getChildren().add(t);               
           t.grText.setText(Integer.toString(iq));
        });
        myscene.setFill(Color.DARKCYAN);
        
        primaryStage.setOpacity(0.95);
        root.getChildren().addAll(uy);
        primaryStage.setTitle("NodeCreator");
        primaryStage.setScene(myscene);
        primaryStage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
 
    EventHandler<MouseEvent> circleOnMousePressedEventHandler = 
        new EventHandler<MouseEvent>() {
 
        @Override
        public void handle(MouseEvent t) {
            orgSceneX = t.getSceneX();
            orgSceneY = t.getSceneY();
            orgTranslateX = ((Node)(t.getSource())).getTranslateX();
            orgTranslateY = ((Node)(t.getSource())).getTranslateY();
        }
    };
    EventHandler<MouseEvent> circleOnMouseDraggedEventHandler = 
        new EventHandler<MouseEvent>() {
 
        @Override
        public void handle(MouseEvent t) {
            double offsetX = t.getSceneX() - orgSceneX;
            double offsetY = t.getSceneY() - orgSceneY;
            double newTranslateX = orgTranslateX + offsetX;
            double newTranslateY = orgTranslateY + offsetY;
            ((Node)(t.getSource())).setTranslateX(newTranslateX);
            ((Node)(t.getSource())).setTranslateY(newTranslateY);
        }
    };
    
    class GrNod extends Group{
        Rectangle grRct;
        Text grText;
        public GrNod(Rectangle uy){
         grRct = new Rectangle(170,170);
         grText = new Text();
        
         grRct.setFill(Color.BLACK);
         grRct.setStrokeWidth(3);
        
         grText.setFill(Color.WHITE);
         grText.setX(20);
         grText.setY(35);
        
         this.getChildren().addAll(grRct, grText);
         this.setCursor(Cursor.MOVE);
        
         this.setOnMousePressed(circleOnMousePressedEventHandler);
         this.setOnMouseDragged(circleOnMouseDraggedEventHandler);
 
         this.setOnMouseEntered(e->{
            grRct.setStroke(Color.RED);
            grRct.setStrokeWidth(3);
        });
         this.setOnMouseExited(e->{
            grRct.setStroke(Color.BLACK);
            grRct.setStrokeWidth(3);
        });
        uy.setX(50);
        uy.setY(50);  
    }
        
    }
    
}

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


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

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

11   голосов , оценка 4.364 из 5
Похожие ответы