2013年1月17日木曜日

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つあります。
stateChanged
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メソッドが使えます。
getSource
public Object getSource()
Event が最初に発生したオブジェクトです。
 
戻り値:
  Event が最初に発生したオブジェクト
このメソッドを使ってChangeEventが発生した元のオブジェクトを調べることができます。
様々なコンポーネントによって使われ方が異なるので、ChangeEventでは変更があったことを通知するのみで、後はそれぞれのコンポーネントのメソッドを使って変更された状態を調べるような使われ方になるのではと思います。
 
 

0 件のコメント:

コメントを投稿