2013-02-21 3 views
1

... 아니면 내 프로그램은 이상한 행동 ... 나는 내 프로그램에서 많이 사용하고 클래스를 만들려고하고JSlider에 getValueIsAdjusting 이상한 행동

이다. 이 클래스는 한 창에서 맨 위에 Jlabel이 있고 다른 창에 JSlider와 JSpinner가 포함 된 JPanel 컨트롤을 만드는 클래스입니다. JSlider가 바뀔 때 JSpinner가 바뀌고 JSlider가 바뀌기를 바란다. 나는 그들의 가치를 서로 묶고 싶다. 이것은 JSpinner가 JSpinner 선택을 미세 조정하기 위해서입니다. stateChanged 여기 방법에

LabeledSliderSpinner lss = new LabeledSliderSpinner("Homing Line", minx, x, maxx);

:

import ij.*; 
import ij.process.*; 
import ij.gui.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 

public class LabeledSliderSpinner extends JPanel implements ChangeListener { 

JPanel sspanel = new JPanel(); 
JSlider slider; 
SpinnerModel model; 
JSpinner spinner; 

public LabeledSliderSpinner() {} 

public LabeledSliderSpinner(String label, int left, int x, int right) { 

    JLabel sslabel = new JLabel(label); 

    JSlider slider = new JSlider(JSlider.HORIZONTAL, left, right, x); 
    slider.setMajorTickSpacing(25); 
    slider.setMinorTickSpacing(5); 
    slider.setPaintTicks(true); 
    slider.setPaintLabels(true); 
    slider.setPaintTrack(true); 
    slider.setVisible(true); 

    slider.addChangeListener(this); 

    model = new SpinnerNumberModel(x, left, right, 1); 
    JSpinner spinner = new JSpinner(model); 
    spinner.setEditor(new JSpinner.NumberEditor(spinner, "####")); 

    spinner.addChangeListener(this); 

    sspanel.add(slider); 
    sspanel.add(spinner); 

    add(sslabel); 
    add(sspanel); 
    setVisible(true); 
} 

public void stateChanged(ChangeEvent e) { 
    String a = ""; 

    Object o = e.getSource(); 
    Class c = o.getClass(); 
    String controlName = c.getName(); 


    if (controlName == "javax.swing.JSpinner") { 
// not coded yet 
    } 

    else 

    if (controlName == "javax.swing.JSlider") { 
     if (!slider.getValueIsAdjusting()) { 
      int fps = (int)slider.getValue(); 
      spinner.setValue(new Integer(fps)); 
     } 
    } 

} 
} 

그것은 다음과 같이 호출됩니다 여기

는 ("IJ"수입은 정부의 ImageJ에 응용 프로그램입니다) 클래스에 대한 코드입니다 , getValueIsAdjusting 테스트에 도달하면 stateChanged 메소드를 완료하지 않는다고 결정했습니다. 그것은 단지 주요 기능으로 돌아갑니다. 슬라이더 손잡이가 움직입니다. 회 전자 값은 변경되지 않습니다. 심지어 getValueIsAdjusting 테스트 내에 대화 상자를 열었습니다. 그것은 그것을 안으로 결코 만들지 않습니다. 나는 getValueIsAdjusting 테스트에 대한 else 조건으로 대화 상자를 열려고 시도했지만 대화 상자를 열지 않습니다. stateChanged()에서 반환됩니다.

슬라이더 또는 회 전자로 인해 stateChanged가 호출되는지 확인하는 더 좋은 방법을 사용할 수 있습니다.

답변

2

SpinSlider이이 컨텍스트에서 도움이 될 수 있습니다.

image

+0

멋진 작품입니다. 감사. 나는 아직도 내 문제가 무엇인지 궁금해. – PDog

+0

당신은 환영합니다. 나는 잘 모르겠지만 조정할 필요가 있다고 생각합니다. – trashgod