2013-01-02 62 views
0

我在滑塊上有一個簡單的changelistener。任何人都可以解釋爲什麼當我點擊一個新的職位時被解僱了3次。在我編寫代碼以將先前值保存在某個地方以查看它是否真的改變之前,我想知道是否有另一種方法來解決它。第一個tigger顯示它是什麼,下一個顯示新值,最後一個重複新值。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

可能重複:// stackoverflow.com/questions/14005488/jslider-knob-not-updating-basic-java)。在'ChangeListener'裏面,你必須檢查'if(!slider.getValueIsAdjusting())',因爲這個方法被調用,因爲這個值會改變,因此如果值改變了10次,它會被調用10次 –

回答

4

您需要檢查更改是否爲值調整。

鏈接到完整教程: http://docs.oracle.com/javase/tutorial/uiswing/components/slider.html

但這裏有一個重要的一點:

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

基本上當getValueIsAdjusting()返回false,用戶已經停止移動滑塊。

+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

的[JSlider的旋鈕時更新(基本的Java)(HTTP