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