7-5: Swingコンポーネントのイベント


・ Swingコンポーネントは、それぞれのタイプに応じて決められた イベントのオブジェクトをリスナに対して送り出します。 それらのイベントのクラスのうち、 いくつかは java.awt.eventパッケージに定義されていますが、 それ以外にも新しいイベントのクラスが追加され、 javax.swing.eventパッケージに定義されています。 また Swingコンポーネントは JavaBeansの規格に沿って設計されています。 その内部では java.bean.PropertyChangeEventが利用され、 Swingコンポーネントの状態の変化は、常に PropertyChangeEventで 通知を受けることが可能です。 外部に対する主な通知に PropertyChangeEventを用いるものもあります。
また、Swingコンポーネントによってはイベントのタイプを決定するのが コンポーネントの本体のクラスではなく、DefaultButtonModelのような コンポーネントの振る舞いを記述したクラスの仕事になっている場合もあります。 このようなクラスのオブジェクトは「交換可能」なので、 コンポーネント本体の利用するイベントクラスは常に固定されているとは限りません。 以下に示すのは最も普通に用いられる場合のものと考えてください。 また、イベント処理を直接行わないコンポーネントは省略します。

Swingコンポーネントが利用するイベントのクラス名
コンポーネント名イベントのクラス名
JButtonjava.awt.event.ActionEvent
JMenuItemjava.awt.event.ActionEvent
JCheckBoxjava.awt.event.ItemEvent
JRadioButtonjava.awt.event.ItemEvent
JComboBoxjava.awt.event.ItemEvent
JListjavax.swing.event.ListSelectionEvent
JTextFieldjava.awt.ActionEvent
javax.swing.event.DocumentEvent
JPasswordFieldjava.awt.ActionEvent
javax.swing.event.DocumentEvent
JTextAreajavax.swing.event.DocumentEvent
JSliderjavax.swing.event.ChangeEvent
JScrollBarjava.awt.event.AdjustmentEvent
JEditorPanejavax.swing.event.HyperlinkEvent
JInternalFramejavax.swing.event.InternalFrameEvent
JMenujavax.swing.event.MenuEvent
JPopupMenujavax.swing.event.PopupMenuEvent
JWindowjava.awt.event.WindowEvent
JFramejava.awt.event.WindowEvent
JColorChooser javax.swing.event.ChangeEvent
(部品のColorSelectionModelに対して)

・ 上記のイベントに対応して ActionEventなら ActionListenerのように リスナのインターフェイスが存在します。 イベントを処理するアダプタのクラスは、それらのリスナに定められた メソッドを実装する必要があります。それもまとめておきましょう。

Swingコンポーネントが利用するリスナとそのメソッド
リスナ名実装すべきメソッド
java.awt.event.ActionListenractionPerformed()
java.awt.event.ItemListeneritemStateChanged()
java.awt.event.AdjustmentListeneradjustmentValueChanged()
javax.swing.event.ListSelectionListenervalueChanged()
javax.swing.event.DocumentListenerchangedUpdate()
insertUpdate()
removeUpdate()
javax.swing.event.ChangeListenerstateChanged
javax.swing.event.HyperlinkListenerhyperlinkUpdate()
javax.swing.event.MenuListenermenuCanceled()
menuDeselected()
menuSelected()
javax.swing.event.PopupMenuListenerpopupMenuCanceled()
popupMenuWillBecomeInvisible()
popupMenuWillBecomeVisible()
java.awt.event.WindowListenerwindowOpened()
windowClosing()
windowClosed()
windowIconified()
windowDeiconified()
windowActivated()
windowDeactivated()
javax.swing.event.InternalFrameListenerinternalFrameOpened()
internalFrameClosing()
internalFrameClosed()
internalFrameIconified()
internalFrameDeiconified()
internalFrameActivated()
internalFrameDeactivated()
java.beans.PropertyChangeListenerpropertyChange()

・ 上記のクラスをどのようにして利用するかは、下記のサンプルのソースを 参考にして下さい。 また、既存のイベントのクラス以外に、 アプリケーションのために新しいコンポーネントを開発するような場合には、 それらに合わせて新しいイベントのクラスやリスナを定義することも珍しく ありません。