Java Eclipseでイベント処理をする方法。

Eclipseで VisualEditor を使うと、イベント処理に関するコードを自動的に生成してくれます。もちろんイベントハンドラ内のコードは、プログラマーが書かなくてはなりませんが、それでもかなり入力の手間が省けます。

ただし自動的に生成されるコードは、無名内部クラスを使っていてネスト(何段階にも組み合わさっている)しているので意味をつかむのは難しいです。その場合はイベントハンドラ内のコードを書くことだけに集中してください。


Eclipse の起動直後や作業中に、ダイアログボックスが表示される場合があります。その時はあわてずに閉じてください。
java-910.gif

またダイアログボックスを閉じないと VisualEditor が上手く表示できないことがあります。一度ソースコードを閉じてから再度開くと表示されるようになります。


【1】Eclipse を起動します。


【2】パッケージ・エクスプローラーで PrefFrame.java をダブルクリックして、Javaエディタを表示します。


【3】Java Beans で jList を右クリックします。

java-914.gif


【4】メニューから Events → valueChanged を選択します。

java-915.gif


【5】getJList()メソッドには、オブジェクトにイベントリスナーを登録する addListSelectionListener()メソッドを呼び出すコードが追加されました。イベントリスナーには無名内部クラスを使っています。

java-924.gif

*無名内部クラス = 匿名インナークラス


【6】無名内部クラスの valueChanged() メソッドの中に以下のコードを入力します。コピーして貼り付けてもかまいません。(イベントハンドラ)

この部分に入力
java-917.gif

ほとんど sample218 のままですが、部品の名前が変わっているので、一部修正しています。

・lt → jList
・lb1 → jLabel


try {
  String str = (String)jList.getSelectedValue();
  if(str != null){
    StringTokenizer st = new StringTokenizer(str, ",");
    int arraySize = st.countTokens();
    tkn = new String[arraySize];
    int i = 0;

    while(st.hasMoreTokens()) {
      tkn[i] = st.nextToken();
      i++;
    }

    jLabel.setText("PREF_CD:" + tkn[0] + " PREF_NAME:" + tkn[1]);
    jLabel.setForeground(Color.BLUE);
  }
} catch (Exception e1) {
  e1.printStackTrace();
}



【7】入力しましたが、画面左側にエラーアイコンが表示され、 StringTokenizer の下に赤い波線が表示されています。これは必要なクラスがインポートされていないことが原因です。

java-918.gif


【8】エラーアイコンをクリックします。

java-919.gif


【9】「StringTokenizer をインポートします」をダブルクリックして選択します。

java-920.gif


【10】エラーが修正されました。

java-921.gif


【11】保存してアプリケーションを実行してみましょう。リストを切り替えると、ラベルにデータが表示されます。

java-922.gif


【12】動作を確認したらアプリケーションを閉じます。

java-923.gif


【解説】

(1)通常イベント処理を行うコードを書くには、実装するインターフェイス、イベントリスナーを登録するメソッドの呼び出し、対応するイベントハンドラの記述などいろいろ考えなくてはなりません。

sample218 の場合
class PrefFrame extends JFrame implements ActionListener, ListSelectionListener {省略}

lt.addListSelectionListener(this);

public void actionPerformed (ActionEvent e) {省略}


(2)Eclipseで VisualEditor を使うとイベント処理に関することは、ほとんど自動的に生成してくれますので、イベントハンドラ内を書くだけで済みます。

自動的に生成されたコードは難しくみえますが、以下のように分けて考えると理解しやすいかもしれません。

//イベントリスナーを登録するメソッドの呼び出し
jList.addListSelectionListener(
  //無名内部クラスを定義すると同時にインスタンスを生成
  new javax.swing.event.ListSelectionListener() {
    //イベントハンドラとなるメソッド
    public void valueChanged(javax.swing.event.ListSelectionEvent e) {
      //ここに処理を書く
    }
}
);


*無名内部クラスがイベントごとに定義されるため、イベントハンドラをまとめて書きたいときには不便かもしれません。割り切って使いましょう。


スポンサードリンク

スポンサードリンク






Java初心者入門講座TOPへ