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))
すると、クラス属性は変数を介して参照できるので、要求仕様の変更に伴う影響を受けない安定したコードを記述できます。
》作業中です《