Python 弾丸ツアー/Java: JavaBeans 準拠 ... step 3: 可変長の引数

OOPデザインパターンリファクタリング

Python.use(better); Python 弾丸ツアー /Java: JFC/Swing 編
>>> JavaBeans 準拠
step 3: 可変長の引数
《Python3.1|Jython2.5|IronPython2.6》

《著》小粒ちゃん@湘南組《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/23 ● 第4版♪2010/03/08

step 3: ラベルを利用する

■ 可変長の引数

 ̄任意の個数の引数(位置引数、キーワード引数)の取扱いには注意が必要です。

    def __init__(self, master, *args, **keys):
        textPane = self._textPane(
            minimumSize = (150,100),
            )

    def _textPane(self, **keys):
        comp = JLabel(**keys)
        self.label = comp
        return comp

 ̄メソッド _textPane の仮引数 **keys が、キーワード引数 minimumSize= に呼応して、クラス呼び出し JLabel() にそのまま渡されます。ここで注目して欲しいのは、具体的なキーワード引数には依存しないことです。そのため、後の仕様変更にも柔軟に対処できます。

    def __init__(self, master, *args, **keys):
        controlPane = self._controlPane(
            minimumSize = (70,100),
            actionPerformed = self.actionPerformed,
            )

    def _controlPane(self, **keys):
        comp = JButton(
            text = "Now",
            **keys
            )
        return comp

 ̄メソッド _controlPane の仮引数 **keys が、2つのキーワード引数 minimumSize= および actionPerformed= に呼応して、クラス呼び出し JButton() にそのまま渡されます。

    def __init__(self, master, *args, **keys):
        self.splitPane = self._splitPane(
            leftComponent = textPane,
            rightComponent = controlPane,
            )
        master.contentPane = self.splitPane

   def _splitPane(self, **keys):
        pane = JSplitPane(
            orientation = JSplitPane.HORIZONTAL_SPLIT,
            dividerLocation = 180,
            **keys
            )
        return pane

 ̄メソッド _splitPane の仮引数 **keys が、2つのキーワード引数 leftComponent= および rightComponent= に呼応して、クラス呼び出し JSplitPane() にそのまま渡されます。

インスタンス属性

インスタンス属性は、異なるメソッド間で情報を共有したいときに便利です。

    def _textPane(self, **keys):
        comp = JLabel(**keys)
        self.label = comp
        return comp

    def actionPerformed(self, e):       # ActionListener
        self.label.text = "%s"%ctime()

インスタンス属性 self.label は、2つのメソッド _textPane および actionPerformed で情報を共有するために必要です。□

《TIPS》ラベル:JLabel

 ̄ラベルに表示するテキスト(文字列)とともに、画像を指定したいときには、次のようにします。

>>> keys = dict(title="^_^", visible=True)
>>> c = JLabel(text="Canada", icon=ImageIcon("_images/CAN.gif"))
>>> JFrame(contentPane=c, **keys).size = 100,80

また、テキストの色を指定したいときには、

>>> c.foreground = Color.red

とすると、テキストの色が赤に変わります。□


TOP
》作業中です《