微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为 JavaFx 滑块创建非常规刻度

如何解决如何为 JavaFx 滑块创建非常规刻度

我想在我的滑块上设置特定的刻度。 例如:

[---¦---¦-----------¦------O-¦--]

  • [-----] :滑块
  • ¦ : 滴答声
  • O : 光标

目的是创建一个时间轴,我们可以在其中看到亮点。

解决方法

您可以编写自己的小部件,将刻度放在滑块上。唯一棘手的一点是确保将滑块的PickOnBounds() 设置为false。还将刻度放入 VBox 中,然后将 VBox 的 PickOnBounds() 设置为 true 可以更轻松地单击刻度:

public class SliderSample extends Application {

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

    private static Image arrowImage = new Image("https://www.shareicon.net/data/12x12/2015/09/01/94166_arrow_512x512.png");

    @Override
    public void start(Stage primaryStage) {
        Scene scene = new Scene(new SliderWithTicks(),300,300);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    class SliderWithTicks extends Pane {

        private Slider slider = new Slider(0,100,30);

        SliderWithTicks() {
            getChildren().addAll(new Tick(80),new Tick(20),new Tick(30),slider);
            slider.minWidthProperty().bind(widthProperty());
            slider.setPickOnBounds(false);
        }

        class Tick extends VBox {
            Tick(int value) {
                getChildren().add(new ImageView(arrowImage));
                setPickOnBounds(true);
                setOnMouseClicked(evt -> slider.adjustValue(value));
                translateXProperty().bind((slider.widthProperty().subtract(16)).multiply(value / slider.getMax()).add(2));
                translateYProperty().set(12);
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。