2013-02-21 100 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