В коде динамически наполняется массив и его элементы выводятся на сцену, но выводится только один элемент - 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);
}
}
}