2012-08-24 44 views
0

我有一個JSlider,最小值爲0,最大值爲100.它的當前值爲0.在java中,我如何獲得滑塊更改的值?

在運行時,我該如何獲取滑塊移動的每個值?例如,我的當前代碼,如果我改變滑塊非常快從0到16,它示出了像像輸出:

0 
1 
2 
3 
4 
7 
16 

它跳過8至15,因爲我直接移動滑塊7至16非常快。但我不希望發生這種情況。我希望滑塊在其移動中遇到的每一個值都被打印出來。

我也希望程序捕獲滑塊在移動中的最後一個值。

這是我的代碼:

p1.addChangeListener(new ChangeListener() 
{ 
    @Override public void stateChanged(ChangeEvent e) 
    { 
     if (p1.getValueIsAdjusting()) 
     { 
     System.out.println(p1.getValue()); 
     } 
    } 
}); 

誰能解釋這是爲什麼不打印的每個值?

+0

請分享您已編寫的代碼並突出顯示問題所在。然後我們可以提供建議和修復。 –

+0

p1.addChangeListener(new ChangeListener(){ @Override public void stateChanged(ChangeEvent e){ if(p1。getValueIsAdjusting()){System.out.println(p1.getValue()); } } }); –

回答

0

如果我沒有弄錯,getValueIsAdjusting()是你看到的行爲的責任。這是爲了避免用戶拖動滑塊時執行不必要的代碼。

如果您刪除if子句,則應該看到每個值。

+0

我試過了,但仍然輸出省略了值。 –

3

大多數人都有相反的問題,他們只是想要最終的JSlider值而不是中間值。

Swing中沒有保證你的變更監聽器將被調用每個中間值。

保留以前的JSlider值,確定最終值並自行計算中間結果。

+0

計算差異也是我的想法,但它不會完全捕獲快速來回運動。 –

+0

@ aclear16:爲什麼不呢?在你的問題中,你從7到16。中間值是8,9,10,11,12,13,14和15. –

+0

如果我從7到16到12然後到8怎麼辦?如果我足夠快地做到這一點,它不會捕獲所有的中間值。哦,這不是我的問題... –

0

在運行時,我該如何獲得滑塊移動的每個值?

由於JSlider實際上是一維的,我建議:

  1. 獲取初始值
  2. 獲取最終值
  3. 從用於模型之間獲得的每一個值滑塊。

第3點的結果似乎是你的問題的答案。

當然,既然是這樣一個簡單的答案,它則提出了一個$ 64個問題..

什麼應用程序的功能是你要提供給用戶?解釋它,你可能會解釋給最終用戶,以獲得更好的答案。