ここでは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 件のコメント:
コメントを投稿