2017-08-13 3 views
-1

Création dynamique d'une série de cercles avec Javafx. Après avoir tapé le nombre de cercles que je suis arrivé ceci: enter image description herePlacement de cercles dans un volet avec javafx

Mais en fait, je veux que mes cercles soient dans cette position: enter image description here

Voici mon code et merci pour tout !! astuces

int k = 5; 
     for (int i = 0; i < nbNoeuds; i++) { 

      Noeudfx circle = new Noeudfx(k * 2, k * 2, 1, String.valueOf(i)); 
      Label id = new Label(String.valueOf(i)); 
      noeuds.getChildren().add(id); 
      id.setLayoutX(k * 2 - 20); 
      id.setLayoutY(k * 2 - 20); 
      id.setBlendMode(BlendMode.DIFFERENCE); 
      k += 10; 
      FillTransition ft1 = new FillTransition(Duration.millis(300), circle, Color.RED, Color.BLACK); 
      ft1.play(); 
      noeuds.getChildren().add(circle); 
      ScaleTransition tr = new ScaleTransition(Duration.millis(100), circle); 
      tr.setByX(10f); 
      tr.setByY(10f); 
      tr.setInterpolator(Interpolator.EASE_OUT); 
      tr.play(); 

     } 

    } 




public class Noeudfx extends Circle { 

Noeud noeud; 
Point point; 
Label distance = new Label("distance : infinite"); 
boolean isSelected = false; 
List<Noeudfx> circles = new ArrayList<>(); 

public Noeudfx(double a, double b, double c, String nom) { 
    super(a, b, c); 
    noeud = new Noeud(nom, this); 
    point = new Point((int) a, (int) b); 

    circles.add(this); 
} 

}

+0

Quelle est la position des cercles supposés être dans? Ceux-ci me semblent plus ou moins aléatoires. –

+0

Oui, je veux les afficher dans une position aléatoire – Mira

+0

Quelqu'un peut-il me dire comment faire cela plz: '( – Mira

Répondre

0

Voici ma solution:

int nbNoeuds = Integer.parseInt(nodeID.getText()); 
     System.out.println("nnnnn" 
       + nbNoeuds); 
     final Timeline animation = new Timeline(
       new KeyFrame(Duration.seconds(.5), (ActionEvent actionEvent) -> { 

        while (noeuds.getChildren().size() <= nbNoeuds) { 
         // noeuds.getChildren().remove(0); 

         int radius =10 ; 
         noeuds.getChildren().add(
           new Circle(
             rnd.nextInt(SCENE_SIZE - radius * 2) + radius, rnd.nextInt(SCENE_SIZE - radius * 2) + radius, 
             radius, 
             Color.GRAY 
           ) 
         ); 

        } 
       }) 
     ); 
     animation.setCycleCount(Animation.INDEFINITE); 
     animation.play(); 
     animation.setOnFinished((ActionEvent actionevent) -> { 
      animation.stop(); 
     }); 

Mise à jour: j'ai essayé d'ajouter l'étiquette à chaque cercle, le problème est que le nombre de cercles dans l'écran est correct i Je ne sais pas pourquoi! see here

Label id = new Label(String.valueOf(i)); 
         id.setTextFill(Color.CADETBLUE); 
         id.setAlignment(Pos.CENTER); 

         Circle circle = new Circle(
           rnd.nextInt(SCENE_SIZE - radius * 2) + radius, rnd.nextInt(SCENE_SIZE - radius * 2) + radius, 
           radius, 
           Color.GRAY 
         ); 
         Double a = circle.getCenterX(); 
         Double b = circle.getCenterY(); 
         id.setLayoutX(a - 20); 
         id.setLayoutY(b - 20); 
         id.setBlendMode(BlendMode.DIFFERENCE); 

         noeuds.getChildren().add(id); 
         noeuds.getChildren().add(circle); 
+0

Comment définir pour chaque cercle une étiquette (id) ?? – Mira