2017-03-13 9 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); 

슬라이더 일 때 I 가지는 문제는 0.08 값이 표시되어있다 모두 0.08TickMarkTickMark0.09.

Image1

Image2

Image3

Image4

슬라이더가 실질적으로 0.09의 정확한 값을 선택한다 : 볼 아래 이미지 - 0.09 잘못 표시 값만 인 위의 세 번째 이미지, 슬라이더의 위치가 콘솔에 인쇄 될 때이 디스플레이 오류는 혼란스럽고 이상적이지 않습니다. 어떤 도움이라도 대단히 감사 할 것입니다.

UPDATE : 슬라이더의 오른쪽 상단에 표시되는 값은 항상 아래로둥근 것을 발견 한 이후이 있습니다. 슬라이더 값을 콘솔에 출력 할 때 값은 일반적으로 의도 한 값과 미세하게 다릅니다. 즉, 중앙 위치에서 콘솔에 인쇄되는 실제 슬라이더 값은 0.0500003입니다. 각 슬라이더 위치의 실제 값을보고 0.09 위치는 의도 한 값 - 0.0899996 아래의 값을 가진 유일한 위치입니다. 따라서이 값을 반올림하여 0.08으로 표시합니다. 따라서 질문은 여전히 ​​존재합니다.이 정보를 가지고 0.09의 올바른 값을 표시 할 수있는 방법이 있습니까?

답변

2

잘 보입니다. 아마도 개발자에게 문제를 게시해야합니다.

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

나는 것 같아 - 조금 실수 보인다 한편 은, 당신이 할 수있는 일은 레이블을 해결하기 위해 Slider 클래스를 서브 클래스와 자바의 DecimalFormat 클래스를 사용합니다! 이것에 감사드립니다 - 좋은 해결책. 나는 지금 그걸로 환호 할거야! –

+0

프로세싱은 주로 디자이너/아티스트/광고 소재/등을 대상으로하며 정확도는 우선 순위가 아닐 수 있습니다. 도서관 그 자체는 한사람을위한 꽤 훌륭한 사업이며 공동체에 대한 큰 공헌입니다. 물론 개선의 여지가 있지만, 우리가 도울 수있는 곳은 다음과 같습니다. –

+0

True - 아마도 그것은 가혹한 것입니다! 매우 인상적인 라이브러리이지만 여기서 문제는 정밀도와 그래픽에 대한 것보다 적습니다. 계산을 위해 출력이 정확하지만 (0.899996) 그래픽 출력 (논란의 여지는 있지만 말할 것도 없습니다)은 문제가있었습니다 . 어쨌든 - 덕분에 대단히 도움과 나는 dev에 알려주 :) –