2013-01-02 3 views
0

슬라이더에 간단한 변경 내용 복원 도구가 있습니다. 누구든지 내가 새로운 위치를 클릭 할 때 3 번 해고 된 이유를 설명 할 수 있습니까? 이전 값을 어딘가에 저장하여 실제로 변경되었는지 확인하기 전에 코드를 작성하기 전에 알아낼 수있는 다른 방법이 있는지 찾아야합니다. 첫 번째 티거는 그 모습을 그대로 보여 주며, 다음 단계는 새 값이 마지막으로 새 값을 반복하는 것을 보여줍니다.Java ChangeListener가 여러 번 실행됩니다.

 slider_1 = new JSlider(); 
    slider_1.addChangeListener(new ChangeListener() { 
     public void stateChanged(ChangeEvent arg0) { 
      if (fullyInitialized == 1) { 
       if (comboBox_1.getSelectedIndex() < 1) { 
        SendData2Device(1);  
       }  
      } 
     } 
    }); 
    slider_1.setOrientation(SwingConstants.VERTICAL); 
+1

가능한 중복 : // http://www.questions.com/14005488/jslider-knob-not-updating-basic-java). 'ChangeListener' 안에는 값이 변경 될 때이 메서드가 호출되므로'if (! slider.getValueIsAdjusting())'을 확인해야하므로 값이 10 번 변경되면 10 번 호출됩니다 –

답변

4

변경 사항이 가치 조정인지 확인해야합니다. 전체 튜토리얼

링크 : getValueIsAdjusting()가 false를 반환 할 때

public void stateChanged(ChangeEvent e) { 
    JSlider source = (JSlider)e.getSource(); 
    if (!source.getValueIsAdjusting()) { 
     // Do what needs to occur here. 
    } 
} 

는 기본적으로 사용자가 슬라이더를 이동 중지 : 여기 http://docs.oracle.com/javase/tutorial/uiswing/components/slider.html

그러나이 중요한 비트입니다.

+0

if 내부, 나는 내가해야 할 일을했다. 나는'System.out.println (sliderValue); '을 가지고 있지만, 두 번 인쇄 중이다. 한 번만 인쇄하고 싶습니다! 어떻게해야합니까? – Ciwan

2

ChangeListener에 체인의 일부로 3 개의 이벤트가 있습니다. 즉 mouseDown, mouseUp 및 변경 자체입니다. 변화가 getValueIsAdjusting를 사용하여 완료되면 당신은 이벤트에 역할을 할 수

:

JSlider source = (JSlider)e.getSource(); 
if (!source.getValueIsAdjusting()) { 
    ... 
} 

참조 : How to Write a Change Listener

(HTTP [JSlider에가 (기본 자바) 업데이트되지 노브]을의