2013-05-02 85 views
1

我想要有以下滑块,用户只能选择预定义的一组值(64,128,256,... 2048),我也希望能够为此刻度设置标签。类似这样的:非连续滑块


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

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

+0

这似乎像你刚才标记刻度以2 ... – Randy 2013-05-02 20:46:15

+0

权力@Randy你是绝对正确的:) – 2013-05-02 20:47:29

+0

然后做普通摆动控制工作? – Randy 2013-05-02 20:50:37

回答

2

这里是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

+0

哦谢谢!看起来就是我所需要的。但不幸的是,它显示的标签像1,2,3,4而不是2,4,8,16。 – 2013-05-02 21:05:29

+0

你说的意思是,该labelFormatter没有应用。这意味着你使用了很老的版本。使用哪个版本的JFX? – 2013-05-02 21:07:25

+0

我使用8.0b87,我看到1,2,4,8 ... – 2013-05-02 21:08:02