更改线的位置以制作仪表 javafx

Change postion of a line to make a gauge javafx

我想制作半径规。我试着画一个 180° 的弧,然后在上面画一条线,然后我试着移动这条线以将其用作位置指示器。 我尝试将线条移动到 Scene Builder 中的不同位置,看起来它可以工作,但是当我尝试使用代码移动时它没有。

    private Scanner sc;

 public void deplacement_aiguille(){
     sc = new Scanner(System.in);
     double angle = sc.nextDouble();
     String valangle = Double.toString(angle);
     valeur_gisement.setText(valangle);
     float xfin = (float) ((Math.cos(angle))*200);
     float yfin = (float) ((Math.sin(angle)*200));

     if(angle<90){
         gisement.relocate(5,10);
         gisement.setEndX(xfin);
         gisement.setEndY(-yfin);
     }

     if (angle>90){
         gisement.relocate(6,10);
         gisement.setEndX(xfin);
         gisement.setEndY(yfin);
     }

     if(angle==90){
         gisement.setEndX(0);
         gisement.setEndY(200);
     }

     if(angle==180){
         gisement.setEndX(200);
         gisement.setEndY(0);
     }
     if(angle==0){
         gisement.relocate(5,10);
         gisement.setEndX(-200);
         gisement.setEndY(0);
     }
 }

使用此代码,当我的角度小于 90 时,我想将网格窗格中的线移动到第 5 列和第 10 行,当角度大于 90 时,移动到第 6 列和第 10 行 我不确定这是否是做这件事的好方法。所以如果你有更好的主意,我会采纳。但如果这是这样做的好方法,你会帮助我让它发挥作用吗? 谢谢

我将圆弧和线放在窗格中(用于绝对定位)并使用旋转变换来移动线。 IMO 更重要的是将旋转绑定到输入值。在我的示例中,我为此使用了一个滑块:

public class Gauge extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Arc arc = new Arc();
        arc.setCenterX(100);
        arc.setCenterY(0);
        arc.setRadiusX(100);
        arc.setRadiusY(100);
        arc.setStartAngle(0);
        arc.setLength(180);
        arc.relocate(0, 0);

        double lineCenterX = 100d;
        double lineCenterY = 100d;
        Line line = new Line(lineCenterX, lineCenterY, 0, 100);
        line.setStroke(Color.YELLOW);
        Rotate rotate = new Rotate();
        rotate.setPivotX(lineCenterX);
        rotate.setPivotY(lineCenterY);
        line.getTransforms().add(rotate);

        Pane pane = new Pane();
        pane.getChildren().addAll(arc, line);

        Slider slider = new Slider();
        rotate.angleProperty().bind(slider.valueProperty().multiply(1.8));

        VBox vbox = new VBox(10);
        vbox.getChildren().addAll(pane, slider);

        Scene scene = new Scene(vbox);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}