1

別のクラス内にスライダーがあり、スライダーの値が変化するたびに、その値を変数の値に割り当てたいと考えています。私はこのコードを持っています

public double setSliderValue() {
    double myVariable;
    sliders.mySlider.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent event) {
             myVariable = Sliders.variableSlider.getValue();
            System.out.println(myVariable); //returns 0 each time
        }
    });
    return myVariable;
}

何を見逃したのですか / 現在スライダーにある値が myVariable に割り当てられるようにするには、何を追加する必要がありますか?? ありがとう

4

1 に答える 1

0

これは最善の方法ではないかもしれませんが、JSlider を含むクラスに外部クラスへの参照を与えることができます。

import java.lang.Object;
import java.lang.String;
import java.lang.System;
import javax.swing.*;
import javax.swing.event.*;

例として、JSlider を含むクラス:

class Window extends JFrame {
    private JSlider slider;
    // a reference to the other class needs to be final
    private final Test testClass;
    public Window(Test incomingReference) {
        // set the reference
        this.testClass = incomingReference;
        // JSlider stuff
        slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 1);
        slider.addChangeListener(new ChangeListener() {
            @Override public void stateChanged(ChangeEvent e) {
                JSlider src = (JSlider) e.getSource();
                if (src.getValueIsAdjusting()) return;
                testClass.setSomeVariable(src.getValue());
                System.out.println(testClass.getSomeVariable());
            }
        });
        // window stuff
        JFrame window = new JFrame("JSlider Test");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(800, 600);
        window.add(slider);
        window.setVisible(true);
    }
}

「外部クラス」:

public class Test extends Object {
    public int someVariable = 0;
    public void setSomeVariable(int value) { someVariable = value; }
    public int getSomeVariable() { return someVariable; }
    public static void main(String ... args) {
        // give the window a reference to this object
        Test foo = new Test();
        Window window = new Window(foo);
    }
}

スニペットにはないChangeListener:の行にも注意してください。if (!src.getValueIsAdjusting()) return;これにより、ChangeListenerスライダーが動いているときに が値を設定できなくなります。

于 2013-02-11T17:43:44.993 に答える