2016-01-15 1 views
0

Я хочу сделать половину радиальной калибровки. Я попытался наложить дугу на 180 °, и я положил на нее линию, и я попытался переместить эту линию, чтобы использовать ее в качестве индикатора положения. Я попытался переместить линию в другую позицию в Scene Builder, и кажется, что она может работать, но когда я пытался двигаться с кодом, это не так.Изменить положение линии, чтобы сделать датчик javafx

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

С помощью этого кода я хочу, чтобы переместить линию в моей gridpane к колонке номер 5 и номер строки 10, когда мой угол меньше 90 и в при изменении угла номер столбца 6 и строка 10 больше, чем 90 Я не уверен, что это хороший способ сделать это. Поэтому, если у вас есть идея, я возьму ее. Но если это хороший способ сделать это, вы поможете мне сделать это. Thanks

ответ

1

Я бы поместил дугу и линию в панели (для абсолютного позиционирования) и использовал поворот для перемещения линии. IMO Более важно связать поворот с входным значением. В моем примере я использую Slider для этого:

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); 
    } 
} 
+0

Спасибо! Это прекрасно работает, мне нужно найти способ адаптировать эту функцию к моему коду. Я не совсем понимаю все функции, которые вы используете здесь. – David

+0

Я могу применить угол к моей линии, но он не вращается с правой точки (он начинает вращаться, как центр расположен слева от моей дуги, а не от центра моей дуги) – David

+1

@David Just отредактировал код, чтобы показать общую точку «Линия» и «Повернуть». Если у вас есть начальная точка линии, то же самое, что и точка поворота вращения, у вас не должно быть проблем. Вы хотите изменить свой пост, чтобы показать текущий код? – Rupert

Смежные вопросы