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つあります。

リスナーの対象の状態が変更されたときに呼び出されます。 

パラメータ:
  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

ChangeEventクラス

ではChangeEventクラスについても見ていきます。クラス図を見て下さい。

  • java.lang.Object
  • java.util.EventObject
  • javax.swing.event.ChangeEvent
  • public class ChangeEvent extends EventObject

ChangeEventクラスのメソッドとしては特に用意はされていませんが、親クラスのEventObjectクラスのgetSourceメソッドが使えます。

Event が最初に発生したオブジェクトです。

戻り値:
  Event が最初に発生したオブジェクト

このメソッドを使ってChangeEventが発生した元のオブジェクトを調べることができます。

様々なコンポーネントによって使われ方が異なるので、ChangeEventでは変更があったことを通知するのみで、後はそれぞれのコンポーネントのメソッドを使って変更された状態を調べるような使われ方になるのではと思います。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)