Python 弾丸ツアー /Java: JavaBeans 準拠 ... step 2: クラスを定義する
Python.use(better); Python 弾丸ツアー /Java: JFC/Swing 編
>>> JavaBeans 準拠
step 2: ボタンを利用する
《Python3.1|Jython2.5|IronPython2.6》
step 2: クラスを定義する
■ クラスを定義する
 ̄Java では、クラスを定義するときに、
public class Tips extends JPanel implements ActionListener {
親クラスを継承する extends と、インターフェースを実現する implements との違いを、区別する必要があります。Jython では、
class Tips(JPanel, ActionListener):
これらの違いを区別する必要がありません。このとき、extends および implements は不要です。
■ イベントリスナーを登録する
 ̄Java では、リスナーを登録するときに、メソッド addActionListener を利用します。Jython でも、
## ---------------------------------------- step 0 from java.awt.event import ActionListener class Tips(JPanel, ActionListener): def __init__(self, *args, **keys): ... button.addActionListener(self) def actionPerformed(self, e): # ActionListener
のように記述できますが、便利な代用表現を利用すると、
## ---------------------------------------- step 1 class Tips(JPanel): def __init__(self, *args, **keys): ... button.actionPerformed = self.actionPerformed def actionPerformed(self, e): # ActionListener
インスタンス属性 actionPerformed を介して、呼び出し可能オブジェクトを管理できます。メソッドも呼び出し可能オブジェクトなので、ここに self.actionPerformed を登録できます。すると、イベントに呼応して、メソッド actionPerformed の本体に記述したコードの断片が実行されます。
■ getter
 ̄インスタンス属性を参照するのに、getter を利用します。たとえば、インスタンス属性 source を参照するときには、get の後に属性の名前を続けた、メソッド getSource が存在するものとします。このとき、get に続く最初の文字は大文字になります。すると、Java では、
public void actionPerformed(ActionEvent e) { JButton comp = (JButton)e.getSource();
のようになりますが、Jython では、
def actionPerformed(self, e): # ActionListener comp = e.getSource()
のようにして、イベントが発生したコンポーネントを参照できます。さらに、Jython では、
def actionPerformed(self, e): # ActionListener comp = e.source
のようにして「インスタンス属性 source の値を参照している」かのような表現が可能になります。
↑TOP
》作業中です《