首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控件-p5-滑块值显示不正确

控件-p5-滑块值显示不正确
EN

Stack Overflow用户
提问于 2017-03-13 15:38:31
回答 1查看 1.3K关注 0票数 1

我有一个处理草图,其中包括一个滑块。生成此滑块的代码如下:

代码语言:javascript
复制
ControlP5 gui;
gui = new ControlP5(this);
gui.addSlider("Tolerance").setPosition(40, height-60).setSize(400, 20).setRange(0.00, 0.10).setValue(0.05).setNumberOfTickMarks(11).setSliderMode(Slider.FLEXIBLE);
gui.getController("Tolerance").getValueLabel().align(ControlP5.RIGHT, ControlP5.TOP_OUTSIDE).setPaddingX(0).setFont(font);
gui.getController("Tolerance").setCaptionLabel("Comparison Tolerance");
gui.getController("Tolerance").getCaptionLabel().align(ControlP5.LEFT, ControlP5.TOP_OUTSIDE).setPaddingX(0).setFont(font);

我遇到的问题是,当滑块同时位于0.08 TickMark0.09 TickMark时,就会显示值0.090.09是唯一不正确显示的值-请参见下面的图片:

当滑块的位置被打印到控制台时,滑块实际上是在上面的第三个图像中选择0.09的正确值,但是这个显示错误是混乱和不理想的。任何帮助都将不胜感激。

更新:我发现显示在滑块右上角的值总是四舍五入的向下。当将滑块值输出到控制台时,这些值通常与预期值非常不同--即在中心位置,打印到控制台的实际滑块值为0.0500003。从每个滑块位置的真实值来看,0.09位置是唯一一个在预期值- 0.0899996下具有值的位置。因此,它似乎被舍入到0.08以显示值。因此,问题仍然存在--考虑到这些信息,是否有方法显示0.09的正确值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-13 21:08:41

很好的斑点!也许您应该为开发人员发布一个问题。同时,您可以做的是子类Slider类,并使用Java的DecimalFormat类修复标签:

代码语言:javascript
复制
import java.text.DecimalFormat;
import controlP5.*;

ControlP5 gui;

void setup(){
  size(640,480);
  gui = new ControlP5(this);
  CustomSlider slider = new CustomSlider(gui,"Tolerance");

  slider.setPosition(40, height-60).setSize(400, 20).setRange(0.00, 0.10).setValue(0.05);
  slider.setFont(createFont("Verdana",12));
  slider.setNumberOfTickMarks(11).setSliderMode(Slider.FLEXIBLE);
  slider.getValueLabel().align(ControlP5.RIGHT, ControlP5.TOP_OUTSIDE).setPaddingX(0);
  slider.setCaptionLabel("Comparison Tolerance");
  slider.getCaptionLabel().align(ControlP5.LEFT, ControlP5.TOP_OUTSIDE).setPaddingX(0);
}
void draw(){
  background(0);
}

//subclass slider
public class CustomSlider extends Slider{

  //decimal format reference
  DecimalFormat df;

  //constructor
  public CustomSlider( ControlP5 cp5 , String name ) {
    super(cp5,name);
    //setup decimal format proof of concept - hardcoded fractional digits for now (this can be nicer)
    df = new DecimalFormat();
    df.setMaximumFractionDigits(2);
  }

  @Override public Slider setValue( float theValue ) {
    super.setValue(theValue);
    //this can be improved, follow the CP5 component lifecycle to determine when an instance initialised in the constructor is ready
    if(df != null){
      _myValueLabel.set( df.format(getValue( )));
    }else{
      _myValueLabel.set( getValue( ) +"" );
    }
    return this;
  }

} 

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42767655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档