2017-03-13 15 views
1

スライダを含む処理スケッチがあります。このスライダーを生成するコードは以下の通りです:Control-P5 - スライダ値が正しく表示されない

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.08TickMark0.09TickMarkの両方にあるときに値0.08が表示されていることです。 0.09は正しく表示されない唯一の値である - 下の写真を参照してください。スライダーは実際にある0.09の正しい値を選択している

Image1

Image2

Image3

Image4

をスライダの位置がコンソールに印刷されているが、このディスプレイエラーは紛らわしく、理想的ではありません。どんな助けでも大歓迎です。

UPDATE:スライダーの右上に表示される値は、常にダウンを四捨五入していることを発見したので、私が持っています。スライダ値をコンソールに出力するとき、値は通常意図された値と微妙に異なります。つまり、中央の位置では、コンソールに出力される実際のスライダ値は0.0500003です。各スライダ位置の真の値を見ると、0.09の位置は、意図した値の値である0.0899996の唯一の位置です。したがって、値を表示するには、これを切り捨てて0.08になっているように見えます。ですから、この情報があれば、正しい値の0.09を表示する方法はありますか?

答えて

2

よく目撃された!開発者に問題を投稿する必要があります。 、何を行うことができますすることSliderクラスをサブクラス化し、ラベルを修正するためにJavaのDecimalFormatクラスを使用する一方 されています:

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; 
    } 

} 

preview

+0

私は私がかもしれないと思う - ビットずさんです!このおかげで素晴らしいソリューションです。私は今それを歓声のために行くつもりです! –

+0

Processingはデザイナー/アーティスト/クリエイティブなどで(主に)対象となり、精度はおそらく優先事項ではないことに注意してください。図書館そのものは、そのままでは一人の人にとってはかなりまともな仕事であり、地域社会への大きな貢献です。もちろん改善の余地がありますが、これもまた助けてくれるかもしれません:) –

+0

True - おそらくそれは少し厳しいものでした!それは非常に印象的な図書館ですが、ここでは問題は精度に関するものではなく、グラフィックスについてのものです。計算の目的で出力は正しいです(0.899996)が、グラフィック出力(おそらくあなたが言うように優先順位は間違いありません) 。とにかく - 助けてくれてありがとう、私はdevに知らせる:) –

関連する問題