更改线的位置以制作仪表 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);
}
}
我想制作半径规。我试着画一个 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);
}
}