Java の素描 #014: コンポーネントを再配置する:レイアウトの変更

記事一覧 Java.use(better, Swing=Jython) #FIFA World Cup への道《Jython2.5》

Java の素描 Jython 弾丸ツアー:時短プログラミング生活のすすめ 〜

《著》森こねこ、伊藤うさぎ、小粒ちゃん@湘南組《監修》タマゴ倶楽部

第1版♪2003/05/23 ● 第2版♪2006/04/03 ● 第3版♪2010/06/11

Step14: コンポーネントを再配置する:レイアウトの変更

レイアウトを利用すると、コンポーネントを再配置するのが容易になります。

## ---------------------------------------- wcFrame.py
from java.awt import BorderLayout
from java.awt import Font
from javax.swing import JTextArea
...
class TopPanel(JPanel):
    def __init__(self, master, *args, **keys):
        ...
        self.text = {}
        ...

    def _canvasPane(self, group, **keys):
        def labelPane(group):
            ...
            view = JLabel(
                ...
                preferredSize = (80,0),
                )
            comp = view
            return comp

        def textPane(group):
            self.text[group] = \
            view = JTextArea(
                lineWrap = True,
                wrapStyleWord = True,
                )
            view.font = view.font.deriveFont(Font.ITALIC)
            comp = JScrollPane(
                viewportView = view,
                preferredSize = (100,0),
                )
            return comp
        
        ## ----------------------------------------
        comp = JPanel(
            layout = BorderLayout(),
            )
        for layout, e in [
            ("WEST"  , labelPane(group)),
            ("CENTER", textPane(group)),
            ]:
            comp.add(e, getattr(BorderLayout, layout))
        return comp 
    ...


このように、レイアウトを指定すると、右の枠内に複数のコンポーネントを配置できます。


■ 組み込み関数 getattr
組み込み関数 getattr は、属性を参照するときに、柔軟な手段を提供します。これを利用すると、次のようなハードコーディングに頼らずに、

        comp.add(labelPane(group), BorderLayout.WEST)
        comp.add(textPane(group), BorderLayout.CENTER)

次のように柔軟なコードを記述できます。

        for layout, e in [
            ("WEST"  , labelPane(group)),
            ("CENTER", textPane(group)),
            ]:
            comp.add(e, getattr(BorderLayout, layout))

すると、クラス属性は変数を介して参照できるので、要求仕様の変更に伴う影響を受けない安定したコードを記述できます。

》作業中です《


関連記事

  • @ def
  • BorderLayout
  • Font
  • JTextArea
  • INDEX《Swing》JFrame

TOP

Last updated♪2010/07/13