...也许我的编程是古怪的行为......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。
这很好!谢谢。我仍然想知道我的错在哪里。 – PDog 2013-02-22 16:53:03
不客气。我不确定,但我认为你也需要调整变化。 – trashgod 2013-02-22 17:04:33