これは最善の方法ではないかもしれませんが、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
スライダーが動いているときに が値を設定できなくなります。