Invoking the Jython Interpreter

 Java/Python 導入ガイド #Jythonの栞

はじめに

 本著で紹介する内容を簡単に紹介します。次章から始まる本編の予告を兼ねているので、まず全体の雰囲気を楽しんでください。詳細に捕われず、分からないところは飛ばして先に進んでください。本編を読み返したときに「何が分からなかったかが分かる」瞬間が、いつか訪れるはずです。焦らずに自分のペースで、繰り返し段階的に学習することが大切です。 

 本著を最初から順に読む必要はありません。重複する記述が散在するのは「興味のあるテーマを拾い読みして、残りは後でじっくり学習したい」そんな読者に配慮したものです。アジャイル開発と同様に「短期的な成果が得られる達成感」と「長期的な展望が求められる充実感」とを使い分けながら、学習を進めてください。
 読者の手元には、Jython をダウンロードすると得られる、ドキュメント(Tutorial など)があることを想定しています。原則として、これらと重複する内容は割愛する代わりに、ドキュメントの行間を埋める情報を提供することを目指しています。
 活字になった情報は、その瞬間から進化するのを止めます。そのため、インターネットで最新情報が得られる学習環境には遠く及びません。賞味期限の長い情報を提供するように配慮しましたが、今この瞬間にも、本著の内容は古くなっているでしょう。逆にそれは、Jython が成長を続けている証でもあり、むしろ喜ばしい現象と受け取ってもらえたら幸いです。

 

Invoking the Jython Interpreter

Jython の特徴は、アプリケーションを実行中に、そのプログラムを変更できることです。つまり、アプリケーションを終了せずに、コードを変更できるのです。それを確認するために、前述したコードを次のように変更します。

 

from javax.swing import JFrame
from javax.swing import JLabel

def createAndShowGUI():
    global frame         # (@.@)
    frame = JFrame("HelloWorldSwing",
        defaultCloseOperation=JFrame.EXIT_ON_CLOSE,
        )
    label = JLabel("Hello World")
    frame.contentPane.add(label)
    frame.pack()
    frame.visible = True
    
frame = None

if __name__ == '__main__':
    createAndShowGUI()

大域変数 frame を利用して、作成したウィンドウを参照できるようにします。

 

% jython -i HelloWorldSwing.py

オプション -i を指定すると、対話モードでその動作を確認できます。

 

>>> dir()
['JFrame', 'JLabel', '__doc__', '__file__', '__name__', 'createAndShowGUI', 'frame']

組み込み関数 dir を利用すると、対話モードで参照できる名前の一覧が得られます。この中には、クラス JFrame/JLabel やメソッド createAndShowGUI の他に、大域変数 frame があります。そこで、この frame を介して、作成したウィンドウ JFrame の状態を更新します。

 

更新:ウィンドウ
>>> frame.size = 200,50

プロパティー .size に値を設定すると、ウィンドウの幅/高さが更新されます。

 

>>> frame.title = "(^_^)"   

プロパティー .title に値を設定すると、ウィンドウのタイトル(文字列)が更新されます。

 

更新:パネル
>>> panel = frame.contentPane
>>> panel
javax.swing.JPanel[null.contentPane,0,0,200x28,layout=javax.swing.JRootPane$1,alignmentX=0.0,
alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]

プロパティー .contentPane の値を参照すると、ウィンドウ内に配置したパネル JPanel が得られます。

 

>>> panel.components
array(java.awt.Component, [javax.swing.JLabel[,0,0,200x28,alignmentX=0.0,alignmentY=0.0,border=,
flags=8388608,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,
horizontalAlignment=LEADING,horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,text=Hello World,
verticalAlignment=CENTER,verticalTextPosition=CENTER]])

プロパティー .components の値を参照すると、パネル内に配置したコンポーネント群(配列 array の要素 Component)が得られます。そのひとつがラベル JLabel です。

 

更新:ラベル
>>> label = panel.components[0]    
>>> label
javax.swing.JLabel[,0,0,200x28,alignmentX=0.0,alignmentY=0.0,border=,flags=8388608,
maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignment=LEADING,
horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,text=Hello,verticalAlignment=CENTER,
verticalTextPosition=CENTER]

プロパティー .components の要素を参照すると、パネル内に配置したラベル JLabel が得られます。

 

>>> label.text = "Happy"

プロパティー .text に値を設定すると、ラベルのテキスト(文字列)が更新されます。

 

2021/02/06 13:34

【変更履歴】 

  • 初稿: 2005/04/05
  • 更新: 2009/04/15

【変更履歴】

  • ver.1.0, 2001/03/02, Python 1.6
  • ver.1.1, 2003/05/25, Python 2.1.x