Java.use(better,Python)《2》ウィンドウを配置する

記事一覧《こちらに移動中です》2006年9月 5日 (火)

Java.use(better, Python) # Jython はじめました

《2》ウィンドウを配置する《Jython2.5.0》

《著》伊藤うさぎ・小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23

■ 概要

プログラマーにとっての「地デジ」対応は進んでいますか? ここでは、アナログ世代(Java/C#)からディジタル世代(Ruby/Python)への脱皮を目指して、「真のアジャイル対応」への準備を怠りない、プログラマーのみなさんを支援する話題を提供します。Java/C# が抱える深刻な問題は「対岸の火事」とばかりも言っていられません。Java/C# の常識は、オブジェクト指向の非常識。さあ、ご一緒に「真のオブジェクト指向」の世界へと続く扉を開いてみませんか。

ウィンドウを配置する

次のコードの断片を実行すると、

>>> f = JFrame('Happy')

次のようなエラーメッセージが表示されます。

Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'JFrame' is not defined

ここで、NameError とあるのは、JFrame を認識できないからです。Java で記述されたコードを利用するには、必要なリソースを取り込む必要があります。そこで、JFrame を含むパッケージを参照するのに必要なコードを追加します。

>>> from javax.swing import *
>>> f = JFrame('Happy')
>>> f.setVisible(True)

from/import 文によって、パッケージ javax.swing に含まれるクラス群を、Jython で記述された他のクラスと同様に扱えるようになります。
ここで注目して欲しいのは、演算子 new が不要になることです。Jython では「クラスもオブジェクト」として扱えるので、Javaコンストラクター呼び出しのように「冗長な」構文は不要です。すると、関数/メソッドと同様に、簡潔で「統一された」表現が可能になります。
これを実行すると、次のようなウィンドウが、画面の左上に現われます。ウィンドウを大きくすると、そのタイトルが Happy になっているのが分かります。

さらに、同じことは、次のように記述できます。

>>> f = JFrame('Happy')
>>> f.visible = True

Swing は JavaBean に準拠しているので、メソッド呼び出し setVisible() を利用すると、set を除いた属性 visible に値を設定できます。Jython では、メソッド呼び出しの代用表現が可能です。つまり、

f.x = @

f.setX(@)

とは同等になります。そのため、C# のプロパティーと同様に、簡潔で「統一された」表現が可能になります。さらに、数行のコードを追加します。

>>> f = JFrame()
>>> f.defaultCloseOperation = JFrame.EXIT_ON_CLOSE
>>> f.size = 150,100
>>> f.title = 'Happy'
>>> f.visible = True

defaultCloseOperation には、ウィンドウを閉じるときの動作を設定します。size には、ウィンドウの大きさ (幅,高さ) を設定します。title には、ウィンドウのタイトルを設定します。さらに、同じことは、次のように記述できます。

>>> f = JFrame(
... defaultCloseOperation = JFrame.EXIT_ON_CLOSE,
... size = (150,100),
... title = 'Happy',
... visible = True)

その違いは、キーワード引数を使って、値を設定していることです。

Last updated♪2009/08/09