【问题标题】:Non continuous slider非连续滑块
【发布时间】:2013-04-27 04:09:15
【问题描述】:

我希望有以下滑块,用户只能选择预定义的一组值(64、128、256、... 2048),并且我还希望能够为此刻度设置标签。像这样的:


[--*---------*------------------O--------------]
   64       128                256

这种非连续滑块有没有内置的解决方案或组件?

【问题讨论】:

  • 这似乎只是用 2 的幂来标记刻度...
  • @Randy 你是绝对正确的:)
  • 那么正常的 Swing 控制是否有效?
  • @Randy 是否可以将 swing 组件集成到 javafx2 应用程序中?

标签: java javafx-2 javafx-8


【解决方案1】:

这里适用于 JavaFX-8(由于问题,它不适用于 JFX-2,请看下面的评论):

@Override
public void start(Stage stage) throws Exception {
    Slider s = new Slider();
    s.setLabelFormatter(new StringConverter<Double>() {
        @Override
        public String toString(Double t) {
            return String.valueOf(Math.round(Math.pow(2, t)));
        }

        @Override
        public Double fromString(String string) {
            return Double.parseDouble(string);
        }
    });

    s.setMin(0);
    s.setMax(10);
    s.setMajorTickUnit(1);
    s.setMinorTickCount(0);
    s.setSnapToTicks(true);
    s.setShowTickLabels(true);
    s.setShowTickMarks(true);

    stage.setScene(new Scene(s));
    stage.show();
}

但根据问题:https://javafx-jira.kenai.com/browse/RT-18448 该解决方案在 8.0 版本构建之前无法应用。

问题在于,似乎没有办法使用左侧属性的操作来解决问题。因为所有左侧属性都可以通过线性值变化来操纵滑块。通过LabelFormatter实现对数值变化,这是一个技巧。

还有一个自定义功能:https://javafx-jira.kenai.com/browse/RT-27863

【讨论】:

  • 哦,谢谢!看起来正是我需要的。但不幸的是,它显示的标签是 1、2、3、4 而不是 2、4、8、16。
  • 你说的意思是 labelFormatter 没有被应用。这意味着,您使用非常旧的构建。使用的是哪个版本的 JFX?
  • 嗯,它已在 2012 年 12 月修复:javafx-jira.kenai.com/browse/RT-18448,因此仅在 8.0 版本中修复。
  • 天哪。 com.sun.javafx.runtime.VersionInfo.getRuntimeVersion() 说 2.2.21-b11。我现在要更新 jfx :)
  • "Fix Version/s : Lombard",这意味着 2.2.*+ 版本中不提供修复。而且,正如我在回答中添加的那样,似乎没有办法在不应用标签格式化程序的情况下制作对数滑块
猜你喜欢
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 2013-11-02
相关资源
最近更新 更多