« Shall_we_Agile = Java.use(better, Python) # Swing《3.2》Swing:JButton | トップページ | Shall_we_Agile = Java.use(better, Python) # Swing《3.4》支援ツール:インスペクター 自身を観察する »

2008年3月26日 (水)

Shall_we_Agile = Java.use(better, Python) # Swing《3.3》イベントハンドラーを登録する

------------ 序 ------------

ここで公開している記事は「キーワード検索」を利用するための便宜的なものです。詳細は、正式版(査読中)をダウンロードしてご覧ください

【目次】関連記事
〔Python/Jython/Swing 入門〕Shall_we_Agile = Java.use(better, Python) # Swing

実際のアプリケーション開発を疑似体験できるように、問題解決に至るまでの紆余曲折を示しながら「繰り返し段階的に」技術を習得するための話題を提 供します。OOP〔Object-Oriented Programming〕を体得するには、五感を通してフィードバックが得られる論理的シミュレーションによって、現実世界を疑似体験するのが効果的で す。この連載で、Java の常識が壊れるかもしれませんが、OOP の可能性は広がります

【注意】連載の主旨から「先に示したプログラムが後で覆される」事例が含まれます。次の展開(失敗から何を学ぶか/学ばないか)を予想しながら読み進むのも一興です。

------------ 本文 ------------

《査読中》

気軽に Swing〔3〕JButton: ホーム&アウェー
Java.use(better,Swing=Jython) 〜 萬プログラマーのための Python 導入ガイド

伊藤うさぎ、森こねこ〔著〕 小泉ひよ子とタマゴ倶楽部〔監修〕

イベントハンドラーを登録する

 ボタンを選択したときのイベントに応答するリスナーを設定するには、次のように、

    public void addActionListener(ActionListener l)

メソッド addActionListener を利用します。引数 l には、インターフェース ActionListener を実現した、任意のリスナーオブジェクトを指定できます。リスナーには、次のメソッドを実現しておく必要があります。

Fig03

    void actionPerformed(ActionEvent e)

 メソッド actionPerformed は、イベント ActionEvent が発生したときに呼び出されます。そして、発生したイベント e から、必要な情報を獲得できます。JavaBeans に準拠した Swing には、Jython の便利な機能を適用できます。すると、

    view = new JButton();
    view.addActionListener(
        new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                ...

と同じ効果を得るのは簡単で、次のように、

    view = JButton(
        actionPerformed=now,

キーワード引数 actionPerformed= に、イベントハンドラーを指定するだけです。

Fig04

 インターフェースの規定に従うことを明確にするには、actionPerformed= を固定するだけで、addActionListener/ActionListener などは不要になります。
 ここまでは、同じウィンドウ内に情報を表示してきました。今回は、ユニフォームを表示するために、新たなパネル/ウィンドウが必要になるので、工夫が必要です。

ウィンドウを開いてパネルを表示する

【例題】JButton を選択したときの日時を、新たなウィンドウに表示したい。

Fig05

 ボタンを選択すると、新たなウィンドウが現われて、そこに日時が表示されます。これを実現したのが、次のコードです。

class ClockPanel(JPanel):
    def __init__(self, now):
        self.add(JLabel(
            text=`now`,
            icon=ImageIcon("icons/clock.gif"),
            ))
    def show(self):
        frame = JFrame(
            title="What time is it now?",
            )
        frame.add(self)
        frame.pack()
        frame.show()

def ex_JButton_actionPerformed2():
    def now(e): ClockPanel(Date()).show()
    ... No change ...

〈つづく〉

|

« Shall_we_Agile = Java.use(better, Python) # Swing《3.2》Swing:JButton | トップページ | Shall_we_Agile = Java.use(better, Python) # Swing《3.4》支援ツール:インスペクター 自身を観察する »

.連載: Shall_we_Agile = Java.use(better, Python) # Swing」カテゴリの記事

JML/Java/Eclipse」カテゴリの記事

Jython/Python」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/79839/10819517

この記事へのトラックバック一覧です: Shall_we_Agile = Java.use(better, Python) # Swing《3.3》イベントハンドラーを登録する:

« Shall_we_Agile = Java.use(better, Python) # Swing《3.2》Swing:JButton | トップページ | Shall_we_Agile = Java.use(better, Python) # Swing《3.4》支援ツール:インスペクター 自身を観察する »