Java tutorial
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Slider; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.scene.shape.StrokeLineCap; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { Group root = new Group(); Scene scene = new Scene(root, 500, 260); Rectangle roundRect = new Rectangle(50, 50, 400, 130); roundRect.setArcWidth(30); roundRect.setArcHeight(60); roundRect.setFill(null); roundRect.setStroke(Color.DARKORANGE); roundRect.setStrokeWidth(2); roundRect.setStrokeLineCap(StrokeLineCap.BUTT); root.getChildren().add(roundRect); Slider slider = new Slider(30, 150, 30); slider.setLayoutX(250 - slider.getWidth() / 2); slider.setLayoutY(115 - slider.getHeight() / 2); slider.widthProperty().addListener((ov, curVal, newVal) -> { slider.setLayoutX(250 - slider.getWidth() / 2); }); slider.heightProperty() .addListener((ov, curVal, newVal) -> slider.setLayoutY(115 - slider.getHeight() / 2)); roundRect.arcWidthProperty().bind(slider.valueProperty()); root.getChildren().add(slider); Slider slider2 = new Slider(10, 120, 50); slider2.setLayoutX(50); slider2.setLayoutY(230); slider2.widthProperty().addListener((ov, curVal, newVal) -> { slider2.setLayoutX(250 - slider2.getWidth() / 2); }); roundRect.yProperty().bind(slider2.valueProperty()); root.getChildren().add(slider2); slider2.valueProperty().addListener((ov, curVal, newVal) -> slider .setLayoutY(slider.getLayoutY() + newVal.doubleValue() - curVal.doubleValue())); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }