2016-07-06 44 views
-1

我试图实现一个自定义的上下文菜单,该菜单项将出现在节点周围,思路如下,在目标节点周围绘制一个虚拟圆,并计算圆的周长,第一个菜单项将在目标节点的顶部,其余的将在每个菜单项之间以相等的距离分配,,,,我没有写任何代码行,因为我不知道如何启动至少,,, PLZ的帮助?JavaFX显示节点周围的选项

也许这个形象将更好地解释

enter image description here

+1

[谷歌JavaFX的径向菜单] (https://www.google.com/?q=javafx+radial+menu&gws_rd=ssl#) – jewelsea

+0

所以你有[极坐标,想转换为笛卡尔坐标?](https://en.wikipedia。 org/wiki/Polar_coordinate_system#Converting_between_polar_and_Cartesian_coordinates) – fabian

+0

@fabian我想我现在就可以开始编码,,, http://www.ajdesigner.com/phpcircle/circle_arc_length_theta.php –

回答

0

万一有人有兴趣,我manged做到这一点,但代码是有点儿脏:

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; 
    } 

}