Java/swing/サンプル/JSliderサンプル プログラムから操作する時にイベントを発生させない
プログラムからスライダを操作した時にイベントを発生させない(キャッチしない)サンプル
一時的にイベントを発生させない方法が分からなかったので、
イベントが発生する直前にリスナーを削除、
処理が終わったらリスナーを戻すようにしました。
@Override
public void actionPerformed(ActionEvent e) {
// ChangeListenerを削除してから値を設定し、再度ChangeListenerを設定すると、
// ChangeListenerでイベントをキャッチできなくなります。
slider.removeChangeListener(this);
slider.setValue(0);
slider.addChangeListener(this);
}
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
// JSliderサンプル6
// プログラムからスライダを操作した時にイベントを発生させない(キャッチしない)サンプル
// 一時的にイベントを発生させない方法が分からなかったので、イベントが発生する直前にリスナーを削除して
// 処理が終わったらリスナーを戻すようにしました。
// mp3プレイヤーサンプルのシークバーに使いました。
public class JSliderSample6 extends JFrame implements ActionListener, ChangeListener {
public static void main(String[] args) {
new JSliderSample6();
}
public JSliderSample6() {
setTitle("JSliderサンプル プログラムからスライダを操作する時に、イベントを発生させない");
setBounds(200, 100, 410, 110);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new FlowLayout());
init();
setVisible(true);
}
JSlider slider = new JSlider();
JTextField textField = new JTextField(10);
JButton button1 = new JButton("ボタン1");
JButton button2 = new JButton("ボタン2");
private void init() {
add(new JLabel("プログラムからスライダを操作する時に、イベントを発生させない"));
slider.addChangeListener(this);
textField.setText("" + slider.getValue());
add(slider);
add(textField);
add(button1);
add(button2);
button1.addActionListener(this);
button2.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button2) {
// ボタン2の場合
// ChangeListenerを削除してから値を設定し、再度ChangeListenerを設定すると、
// ChangeListenerでイベントをキャッチできなくなります。
slider.removeChangeListener(this);
slider.setValue(0);
slider.addChangeListener(this);
} else {
// ボタン2の場合
slider.setValue(0);
}
}
@Override
public void stateChanged(ChangeEvent e) {
textField.setText("" + slider.getValue());
}
}
最終更新:2012年12月16日 00:01