イベントを組み込んでみよう
では、今度はJButtonを組み込んでみましょう。プッシュボタンを作るならば、もちろん、アクションイベントの処理もあわせて組み込みたいところですね。
bsh % b1 = new JButton("Click");
bsh % b1.setBounds(100,100,100,30);
bsh % b1.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent ev){
doAction(ev);
}});
bsh % bsh % bsh % f1.add(b1);
bsh % f1.repaint();
JButtonを作成し、addActionListenerでアクションリスナーを組み込んでみました。無名クラスを利用し、actionPerformedには「doAction」というメソッドを呼び出すようにしておきます。こんな具合に、無名クラスを使って組み込みを利用することで、コンポーネントにイベント処理を組み込むことができます。
後は、呼び出されるdoActionメソッドを定義すればいいだけです。とりあえず、簡単なサンプルを用意しておきましょう。
bsh % public void doAction(ActionEvent ev){
l1.setForegroundColor(l1.getForegroundColor().equals(Color.RED) ? Color.BLUE : Color.RED);
}
<New Bsh Workspace>ボタンをクリックすると、JLabelのテキストの色が変わる。 |
これで、ボタンをクリックするとJLabelのテキストの色が変わるようになります。ちゃんとイベント処理が機能していることがわかりますね。
では、ここで問題です。このdoActionの処理を変更したくなったらどうすればいいのでしょうか? ――答えは、実はとんでもなく簡単です。また、doActionメソッドを書けばいいのです。
bsh % public void doAction(ActionEvent ev){
l1.setText("No Event");
}
このように実行すると、今度はクリックするとJLabelのテキストが変わるようになります。同じメソッドを再度実行することで、既にあるメソッドから新たに入力したメソッドに置き換わったのです。こんな具合に、メソッドやフィールドも後から置き換えていくことが可能です。これはかなり強力ですね。
<New Bsh Workspace>ボタンクリックするとテキストが変わる。イベント処理のメソッドが変更されたのがわかる。 |