2013-02-21 97 views
1

...也許我的編程是古怪的行爲......JSlider的getValueIsAdjusting古怪行爲

我試圖創建一個我在我的程序中使用了大量的類。它是一個創建JPanel控件的類,該控件在一個窗格的頂部包含Jlabel,在另一個窗格中包含JSlider和JSpinner。我希望JSpinner在JSlider更改時進行更改,反之亦然。我希望他們的價值相互聯繫。這是爲了讓JSpinner精確調整JSpinner的選擇。

這裏是類( 「IJ」 進口是政府的ImageJ的應用程序)代碼:

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)); 
     } 
    } 

} 
} 

它被稱爲是這樣的:

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

在stateChanged方法,我確定當它到達getValueIsAdjusting測試時,它甚至不完成stateChanged方法。它只是回到主要功能。滑塊旋鈕移動。微調器值不會改變。我甚至在getValueIsAdjusting測試中打開了一個對話框。它從來沒有進入它。我試圖打開一個對話框作爲其他條件getValueIsAdjusting測試,它永遠不會打開任何對話框。它只是從stateChanged()返回。

我可以使用更好的方法來確定是否因滑塊或微調器而調用stateChanged。

回答

2

SpinSlider在這方面可能會有所幫助。

image

+0

這很好!謝謝。我仍然想知道我的錯在哪裏。 – PDog 2013-02-22 16:53:03

+0

不客氣。我不確定,但我認爲你也需要調整變化。 – trashgod 2013-02-22 17:04:33