В коде динамически наполняется массив и его элементы выводятся на сцену, но выводится только один элемент - 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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д