- Home ›
- Swingを使ってみよう ›
- イベントモデル
ChangeEvent
ここではChangeEventについて見ていきます。
1.ChangeEventを発生させるコンポーネント:
JButton JCheckBox JRadioButton JMenuItem JSlider JSpinner JTabbedPane
2.イベントが発生するタイミング:
状態が変更になった場合
3.対応するリスナーインターフェース:
javax.swing.event.ChangeListener public interface MouseListener extends EventListener
4.コンポーネントに対するリスナーの登録メソッド:
addChangeListener public void addChangeListener(ChangeListener l)
ChangeListenerインターフェース
ChangeListenerインターフェースは、設定するコンポーネントなどにもよりますが状態が変更になった場合に発生するイベントを受け取るためのリスナーインタフェースです。JTabbedPaneの場合であればタブが切り替わった時、JSliderであればスライダーの位置が変わった時、などです。実装に必要なメソッドは1つあります。
void stateChanged(ChangeEvent e)
リスナーの対象の状態が変更されたときに呼び出されます。 パラメータ: e - ChangeEvent オブジェクト
このリスナーインターフェースの実装方法は下記のようになります。
public class myListener implements ChangeListener{ public stateChanged(ChangeEvent e){ /* 処理したい内容をここに記述する */ } }
ではここで簡単なサンプルを作成して試してみます。下記では自分自身にChangeListenerをインプリメントしています。
import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; import java.awt.BorderLayout; public class SwingTest extends JFrame implements ChangeListener{ JLabel label = new JLabel("スライダーの値"); public static void main(String[] args){ SwingTest test = new SwingTest("SwingTest"); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); } SwingTest(String title){ setTitle(title); setBounds( 10, 10, 300, 200); JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 50); slider.addChangeListener(this); JPanel p = new JPanel(); p.add(slider); getContentPane().add(p, BorderLayout.CENTER); getContentPane().add(label, BorderLayout.PAGE_END); } public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource(); int fps = (int)source.getValue(); label.setText("値:" + fps); } }
実行結果は下記のようになります。
スライダーを動かすとChangeEventが発生し、ラベルにスライダーの値が表示されます。
ChangeEventクラス
ではChangeEventクラスについても見ていきます。クラス図を見て下さい。
java.lang.Object java.util.EventObject javax.swing.event.ChangeEvent public class ChangeEvent extends EventObject
ChangeEventクラスのメソッドとしては特に用意はされていませんが、親クラスのEventObjectクラスのgetSourceメソッドが使えます。
public Object getSource()
Event が最初に発生したオブジェクトです。 戻り値: Event が最初に発生したオブジェクト
このメソッドを使ってChangeEventが発生した元のオブジェクトを調べることができます。
様々なコンポーネントによって使われ方が異なるので、ChangeEventでは変更があったことを通知するのみで、後はそれぞれのコンポーネントのメソッドを使って変更された状態を調べるような使われ方になるのではと思います。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。