2016-07-06 11 views
-1

Ich habe versucht, ein benutzerdefiniertes Kontextmenü zu implementieren, dass die Menüelemente um den Knoten erscheinen, die Idee war wie folgt, zeichnen Sie einen virtuellen Kreis um den Zielknoten und berechnen Sie den Umfang des Kreises Der erste Menüpunkt befindet sich an der Spitze des Zielknotens und der Rest wird mit gleichem Abstand zwischen den einzelnen Menüpunkten verteilt. Ich habe keine Codezeile geschrieben, weil ich nicht weiß, wie ich mindestens starten soll ,,, PLZ Hilfe?JavaFX Zeige Optionen um einen Knoten

vielleicht wird dieses Bild besser

enter image description here

+1

[Google javafx Radialmenü] (https://www.google.com/?q=javafx+radial+menu&gws_rd=ssl#) – jewelsea

+0

Sie haben also [Polarkoordinaten und möchten in kartesische Koordinaten konvertieren?] (https: //en.wikipedia. org/wiki/Polar_coordinate_system # Converting_between_polar_and_Cartesian_coordinates) – fabian

+0

@fabian ich denke, ich kann jetzt anfangen zu programmieren ,,, http://www.ajdesigner.com/phpcircle/circle_arc_length_theta.php –

Antwort

0

falls erklären jemand interessiert ist, ich es tun manged, aber der Code ist ein bisschen schmutzig:

import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.scene.shape.Circle; 
import lombok.AccessLevel; 
import lombok.NoArgsConstructor; 

/** 
    * @author Asendar 
* 
*/ 
@NoArgsConstructor(access = AccessLevel.PRIVATE) 
public final class RadialMenuFactory { 
    public static final RadialMenuFactory instance = new RadialMenuFactory(); 

    public StackPane construct(int itemsCount, int radius) { 
     StackPane pane = new StackPane(); 

     double pheta = 270; 

     int counter = 0; 

     while (counter != itemsCount) { 
      double x = radius * Math.cos(Math.toRadians(pheta)); 
      double y = radius * Math.sin(Math.toRadians(pheta)); 

      Button btn = new Button("btn"); 

      btn.setTranslateX(x); 
      btn.setTranslateY(y); 

      pane.getChildren().addAll(btn); 

      pheta += 360/itemsCount; 
      pheta %= 360; 

      counter++; 
     } 

     pane.setMinHeight(300); 
     pane.setMinWidth(300); 

     return pane; 
    } 

}