Jython-クイックガイド

Jythonは、Pythonプログラミング言語のJVM実装です。これは、Javaプラットフォームで実行するように設計されています。Jythonプログラムは、任意のJavaクラスをインポートして使用できます。Javaと同じように、Jythonプログラムは次のようにコンパイルされます。bytecode。主な利点の1つは、Pythonで設計されたユーザーインターフェイスが次のGUI要素を使用できることです。AWTSwing または SWT Package

JPythonとして始まり、後に名前が変更されたJythonは、次のように呼ばれる標準のPython実装に厳密に従います。 CPython によって作成されたように Guido Van Rossum。Jythonは1997年にによって作成されましたJim Hugunin。Jython 2.0は1999年にリリースされました。それ以降、Jython2.xリリースは同等のCPythonリリースに対応しています。2015年5月にリリースされたJython2.7.0は、CPython2.7に対応します。Jython3.xの開発が進行中です。

PythonとJavaの違い

以下はPythonとJavaの違いです-

  • Pythonは動的に型付けされた言語です。したがって、変数の型宣言は必要ありません。一方、Javaは静的に型付けされた言語です。つまり、変数の型宣言は必須であり、変更することはできません。

  • Pythonにはチェックされていない例外しかありませんが、Javaにはチェックされている例外とチェックされていない例外の両方があります。

  • Pythonはスコープにインデントを使用しますが、Javaは一致する中括弧を使用します。

  • Pythonはインタプリタベースの言語であるため、個別のコンパイル手順はありません。ただし、Javaプログラムはバイトコードにコンパイルする必要があり、JVMによって実行されます。

  • Pythonは多重継承をサポートしていますが、Javaでは多重継承はできません。ただし、インターフェイスが実装されています。

  • Javaと比較して、Pythonにはより豊富な組み込みデータ構造があります(リスト、dict、タプル、すべてがオブジェクトです)。

PythonとJythonの違い

以下はPythonとJythonの違いです-

  • CPythonと呼ばれるPythonのリファレンス実装は、C言語で記述されています。一方、Jythonは完全にJavaで記述されており、JVMの実装です。

  • 標準のPythonは複数のプラットフォームで利用できます。Jythonは、JVMがインストールされているすべてのプラットフォームで使用できます。

  • 標準のPythonコードは次のようにコンパイルされます .pyc Jythonプログラムがコンパイルされている間 .class ファイル。

  • Python拡張機能はC言語で記述できます。Jythonの拡張機能はJavaで書かれています。

  • Jythonは本質的に真にマルチスレッドです。ただし、PythonはGlobal Interpreter Lock (GIL)目的のためのメカニズム。

  • どちらの実装にも、異なるガベージコレクションメカニズムがあります。

次の章では、JythonにJavaライブラリをインポートする方法を学習します。

Jython 2.7をインストールする前に、システムに JDK 7以上がインストールされています。Jythonは、実行可能なjarファイルの形式で入手できます。からダウンロード-http://www.jython.org/downloads.html アイコンをダブルクリックするか、次のコマンドを実行します-

java -jar jython_installer-2.7.0.jar

インストールウィザードが開始され、インストールオプションを指定する必要があります。体系的なインストール手順は次のとおりです。

ウィザードの最初のステップでは、言語を選択するように求められます。

2番目のステップでは、使用許諾契約に同意するように求められます。

次のステップで、インストールの種類を選択します。標準インストールを選択することをお勧めします。

次の画面では、オプションについて確認を求められ、インストールの完了に進みます。

インストール手順が完了するまでに時間がかかる場合があります。

インストールが完了したら、を呼び出します jython.exe宛先ディレクトリ内のbinディレクトリから。Jythonがにインストールされていると仮定しますC:\jython27、コマンドラインから以下を実行します。

C:\jython27\bin\jython

Pythonプロンプト(>>>)が表示され、その前に任意のPythonステートメントまたはPythonスクリプトを実行できます。

Jythonの最も重要な機能の1つは、PythonプログラムにJavaクラスをインポートする機能です。Javaプログラムの場合と同じように、Jythonに任意のJavaパッケージまたはクラスをインポートできます。次の例は、java.util パッケージはPython(Jython)スクリプトにインポートされ、Dateクラスのオブジェクトを宣言します。

from java.util import Date
d = Date()
print d

上記のコードを保存して実行します UtilDate.pyコマンドラインから。現在の日付と時刻のインスタンスが表示されます。

C:\jython27\bin>jython UtilDate.py
Sun Jul 09 00:05:43 IST 2017

Javaライブラリからの次のパッケージは、主に標準のPythonライブラリに同等のものがないか、それほど良くないために、Jythonプログラムにインポートされることがよくあります。

  • Servlets
  • JMS
  • J2EE
  • Javadoc
  • Swingは、他のGUIツールキットよりも優れていると見なされています

その点に関するJavaパッケージは、Jythonスクリプトでインポートできます。ここでは、次のJavaプログラムが、というパッケージに格納およびコンパイルされています。foo

package foo;
public class HelloWorld {
   public void hello() {
      System.out.println("Hello World!");
   }
   public void hello(String name) {
      System.out.printf("Hello %s!", name);
   }
}

この HelloWorld.class次のJythonスクリプトにインポートされます。このクラスのメソッドは、Jythonスクリプトから呼び出すことができますimportex.py

from foo import HelloWorld
h = HelloWorld()
h.hello()
h.hello("TutorialsPoint")

上記のスクリプトを保存してコマンドラインから実行すると、次の出力が得られます。

C:\jython27\bin>jython importex.py
Hello World!
Hello TutorialsPoint!

変数は、コンピューターのメモリー内の名前付きの場所です。各変数は、その中に1つのデータを保持できます。Javaとは異なり、Pythonは動的に型指定された言語です。したがって、Jythonを使用している間も; 変数のデータ型の事前宣言は行われません。変数のタイプがどのデータを格納できるかを決定するのではなく、データが変数のタイプを決定します。

次の例では、変数に整数値が割り当てられています。type()組み込み関数を使用して、変数の型が整数であることを確認できます。ただし、同じ変数に文字列が割り当てられている場合、type()関数は同じ変数の型として文字列を返します。

> x = 10
>>> type(x)
<class 'int'>

>>> x = "hello"
>>> type(x)
<class 'str'>

これは、Pythonが動的に型付けされた言語と呼ばれる理由を説明しています。

次のPython組み込みデータ型もJythonで使用できます-

  • Number
  • String
  • List
  • Tuple
  • Dictionary

Pythonは、数値データを数値として認識します。数値は、整数、浮動小数点を含む実数、または複素数の場合があります。文字列、リスト、およびタプルのデータ型はシーケンスと呼ばれます。

Jython番号

Pythonでは、符号付き整数は「int」型であると言われます。長整数を表すために、文字「L」が付けられています。整数部分を小数成分から分離する小数点のある数値は、「フロート」と呼ばれます。小数部分には、「E」または「e」を使用して科学的記数法で表された指数が含まれる場合があります。

複素数は、Pythonでは数値データ型としても定義されています。複素数には、実数部(浮動小数点数)と虚数部に「j」が付いています。

8進数または16進数の表現で数値を表現するには、 0O または 0X接頭辞が付いています。次のコードブロックは、Pythonでの数値のさまざまな表現の例を示しています。

int     -> 10, 100, -786, 80
long    -> 51924361L, -0112L, 47329487234L
float   -> 15.2, -21.9, 32.3+e18, -3.25E+101
complex -> 3.14j, 45.j, 3e+26J, 9.322e-36j

Jython Strings

文字列は、一重引用符(例:「hello」)、二重引用符(例:「hello」)、または三重引用符(例:「hello」」または「「hello」」)で囲まれた文字のシーケンスです。三重引用符は、文字列の内容が複数行にまたがる場合に特に役立ちます。

エスケープシーケンス文字は、三重引用符で囲まれた文字列に逐語的に含めることができます。次の例は、Pythonで文字列を宣言するさまざまな方法を示しています。

str = ’hello how are you?’
str = ”Hello how are you?”
str = """this is a long string that is made up of several lines and non-printable
characters such as TAB ( \t ) and they will show up that way when displayed. NEWLINEs
within the string, whether explicitly given like this within the brackets [ \n ], or just
a NEWLINE within the variable assignment will also show up.
"""

3番目の文字列を印刷すると、次の出力が得られます。

this is a long string that is made up of
several lines and non-printable characters such as
TAB ( 	 ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
], or just a NEWLINE within
the variable assignment will also show up.

Jythonリスト

リストはシーケンスデータ型です。これは、角かっこで囲まれた、必ずしも同じタイプである必要はない、コンマで区切られたアイテムのコレクションです。リストの個々のアイテムには、ゼロベースのインデックスを使用してアクセスできます。

次のコードブロックは、Pythonでのリストの使用法をまとめたものです。

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];
print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]

次の表に、Jythonリストに関連する最も一般的なJython式のいくつかを示します。

Jython式 説明
len(リスト) 長さ
リスト[2] = 10 更新
デルリスト[1] 削除
List.append(20) 追加する
List.insert(1,15) 挿入
List.sort() 並べ替え

Jythonタプル

タプルは、括弧内に格納されたコンマ区切りのデータ項目の不変のコレクションです。タプル内の要素を削除または変更したり、タプルコレクションに要素を追加したりすることはできません。次のコードブロックは、タプル操作を示しています。

tup1 = ('physics','chemistry‘,1997,2000);
tup2 = (1, 2, 3, 4, 5, 6, 7 );
print "tup1[0]: ", tup1[0]
print "tup2[1:5]: ", tup2[1:5]

Jython辞書

Jythonディクショナリは、JavaコレクションフレームワークのMapクラスに似ています。これは、キーと値のペアのコレクションです。カンマで区切られたペアは中括弧で囲まれます。ディクショナリオブジェクトは、ハッシュ手法によって格納されるため、ゼロベースのインデックスに従ってその中の要素を取得しません。

同じキーをディクショナリオブジェクトに複数回表示することはできません。ただし、複数のキーに同じ値を関連付けることができます。辞書オブジェクトで使用できるさまざまな関数を以下に説明します-

dict = {'011':'New Delhi','022':'Mumbai','033':'Kolkata'}
print "dict[‘011’]: ",dict['011']
print "dict['Age']: ", dict['Age']

次の表に、辞書に関連する最も一般的なJython式のいくつかを示します。

Jython式 説明
dict.get( '011') 探す
len(dict) 長さ
dict ['044'] = 'チェンナイ' 追加する
デルディクト['022'] 削除
dict.keys() キーのリスト
dict.values() 値のリスト
dict.clear() すべての要素を削除します

Jythonには、Pythonの組み込みデータ型に加えて、Javaコレクションクラスをインポートすることで使用できるという利点があります。 java.util package。次のコードは、以下に示すクラスを記述しています。

  • add()を使用したJavaArrayListオブジェクト
  • remove()
  • ArrayListクラスのget()メソッドとset()メソッド。
import java.util.ArrayList as ArrayList
arr = ArrayList()
arr.add(10)
arr.add(20)
print "ArrayList:",arr
arr.remove(10) #remove 10 from arraylist
arr.add(0,5) #add 5 at 0th index
print "ArrayList:",arr
print "element at index 1:",arr.get(1) #retrieve item at index 1
arr.set(0,100) #set item at 0th index to 100
print "ArrayList:",arr

上記のJythonスクリプトは、次の出力を生成します-

C:\jython27\bin>jython arrlist.py
ArrayList: [10, 20]
ArrayList: [5, 20]
element at index 1: 20
ArrayList: [100, 20]

Jarrayクラス

Jythonは、 Jarray Object、PythonでJava配列を構築できます。jarrayを操作するには、Jythonでシーケンスタイプを定義し、シーケンスに含まれるオブジェクトのタイプとともにjarrayobjectに渡します。jarray内のすべての値は、同じタイプである必要があります。

次の表は、jarrayで使用される文字タイプコードを示しています。

文字タイプコード 対応するJavaタイプ
Z ブール値
C char
B バイト
H ショート
int
L 長いです
F 浮く
D ダブル

次の例は、jarrayの構築を示しています。

my_seq = (1,2,3,4,5)
from jarray import array
arr1 = array(my_seq,'i')
print arr1
myStr = "Hello Jython"
arr2 = array(myStr,'c')
print arr2

ここに my_seq整数のタプルとして定義されます。Jarrayarr1に変換されます。2番目の例は、Jarrayarr2がmySttr stringシーケンス。上記のスクリプトの出力jarray.py 次のとおりです-

array('i', [1, 2, 3, 4, 5])
array('c', 'Hello Jython')

意思決定構造には、プログラムによって評価またはテストされる1つ以上の条件と、条件が真であると判断された場合に実行される1つまたは複数のステートメント、およびオプションで、条件が真である場合に実行される他のステートメントがあります。 falseと判断されます。

次の図は、ほとんどのプログラミング言語に見られる典型的な意思決定構造の一般的な形式を示しています。

Jythonは、条件がtrueまたはfalseの場合に実行されるステートメントのブロックを示すために中括弧を使用しません(Javaの場合のように)。代わりに、均一なインデント(左マージンからの空白)を使用してステートメントのブロックを形成します。このように均一にインデントされたブロックは、「if」ステートメントで指定された条件が真の場合に実行される条件コードを作成します。

オプションの「else」ステートメントの後に、同様のブロックが存在する場合があります。Jythonはelif statement連続する条件をテストできるものを使用します。ここでは、else clause最後に表示され、前述のすべての条件が満たされない場合にのみ実行されます。使用の一般的な構文if..elif..else 以下のとおりであります。

if expression1:
   statement(s)
elif expression2:
   statement(s)
elif expression3:
   statement(s)
else:
   statement(s)

次の例では、 ..elif ..else 構成は、ユーザーが入力した金額のさまざまな値の割引を計算するために使用されます。

discount = 0
amount = input("enter Amount")
if amount>1000:
   discount = amount*0.10
elif amount>500:
   discount = amount*0.05
else:
   discount = 0
print 'Discount = ',discount
print 'Net amount = ',amount-discount

上記のコードの出力は次のようになります。

enter Amount1500
Discount = 150.0
Net amount = 1350.0
enter Amount600
Discount = 30.0
Net amount = 570.0
enter Amount200
Discount = 0
Net amount = 200

一般に、プログラム内のステートメントは順番に実行されます。関数内の最初のステートメントが最初に実行され、次に2番目のステートメントが実行されます。コードのブロックを数回実行する必要がある場合があります。このような繰り返し機能を提供するステートメントは、looping statements

Jythonでは、ループは2つのステートメントで形成できます。

  • ザ・ while ステートメントと

  • ザ・ for ステートメント

WHILEループ

Jythonのwhileループステートメントは、Javaのステートメントに似ています。指定された条件が真である限り、ステートメントのブロックを繰り返し実行します。次のフローチャートは、while ループ。

whileステートメントの一般的な構文を以下に示します。

while expression:
   statement(s)

次のJythonコードは、whileループを使用して、変数の値がゼロ未満になるまで繰り返しインクリメントおよび出力します。

count = 0
while count<10:
   count = count+1
   print "count = ",count
print "Good Bye!"

Output −出力は次のようになります。

count =  1
count =  2
count =  3
count =  4
count =  5
count =  6
count =  7
count =  8
count =  9
count =  10
Good Bye!

FORループ

JythonのFORループは、Javaのようにカウントされたループではありません。代わりに、文字列、リスト、タプルなどのシーケンスデータ型の要素をトラバースする機能があります。JythonのFORステートメントの一般的な構文は次のとおりです-

for iterating_var in sequence:
   statements(s)

以下に示すように、FORステートメントを使用して、文字列内の各文字、およびリストまたはタプル内の各項目を表示できます。

#each letter in string
for letter in 'Python':
   print 'Current Letter :', letter

Output −出力は次のようになります。

Current Letter : P
Current Letter : y
Current Letter : t
Current Letter : h
Current Letter : o
Current Letter : n

次のように別のインスタンスを考えてみましょう。

#each item in list
libs = [‘PyQt’, 'WxPython',  'Tkinter']
for lib in libs:        # Second Example
   print 'Current library :', lib

Output −出力は以下のようになります。

Current library : PyQt
Current library : WxPython
Current library : Tkinter

考慮すべき別の例を次に示します。

#each item in tuple
libs = (‘PyQt’, 'WxPython',  'Tkinter')
for lib in libs:        # Second Example
   print 'Current library :', lib

Output −上記プログラムの出力は以下のとおりです。

Current library : PyQt
Current library : WxPython
Current library : Tkinter

Jythonでは、 forステートメントは、range()関数によって生成された数値のリストを反復処理するためにも使用されます。range()関数は次の形式を取ります-

range[([start],stop,[step])

開始パラメーターとステップパラメーターは、デフォルトで0と1です。最後に生成された番号は停止ステップです。FORステートメントは、によって形成されたリストをトラバースします。range() function。例-

for num in range(5):
   print num

次の出力を生成します-

0
1
2
3
4

複雑なプログラミングロジックは、関数と呼ばれる1つ以上の独立した再利用可能なステートメントのブロックに分割されます。Pythonの標準ライブラリには、多数の組み込み関数が含まれています。を使用して独自の関数を定義することもできますdefキーワード。関数のユーザー定義名の後には、その本体を形成するステートメントのブロックが続き、returnステートメントで終わります。

一度定義すると、任意の環境から何度でも呼び出すことができます。ポイントを明確にするために、次のコードを考えてみましょう。

#definition of function
defSayHello():
   "optional documentation string"
   print "Hello World"
   return

#calling the function
SayHello()

関数は、呼び出し元の環境から1つ以上のパラメーター/引数を受け取るように設計できます。このようなパラメーター化された関数を呼び出すときは、関数定義で使用される同様のデータ型で同じ数のパラメーターを指定する必要があります。そうしないと、JythonインタープリターはTypeError 例外。

#defining function with two arguments
def area(l,b):
   area = l*b
   print "area = ",area
   return

#calling function
length = 10
breadth = 20
#with two arguments. This is OK
area(length, breadth)
#only one argument provided. This will throw TypeError
area(length)

ザ・ output 次のようになります-

area = 200
Traceback (most recent call last):
   File "area.py", line 11, in <module>
   area(length)
TypeError: area() takes exactly 2 arguments (1 given)

定義された手順を実行した後、呼び出された関数は呼び出し元の環境に戻ります。関数の定義内でreturnキーワードの前に式が指定されている場合、データを返すことができます。

#defining function
def area(l,b):
   area = l*b
   print "area = ",area
   return area

#calling function
length = 10
breadth = 20
#calling function and obtaining its reurned value
result = area(length, breadth)
print "value returned by function : ", result

上記のスクリプトをJythonプロンプトから実行すると、次の出力が得られます。

area = 200
value returned by function : 200

モジュールは、1つ以上の関連する関数、クラス、または変数が定義されているJythonスクリプトです。これにより、Jythonコードの論理的な編成が可能になります。モジュールで定義されたプログラム要素は、モジュールまたはモジュールから特定の要素(関数/クラス)をインポートすることにより、別のJythonスクリプトで使用できます。

次のコード(hello.py)では関数 SayHello() が定義されています。

#definition of function
defSayHello(str):
   print "Hello ", str
   return

別のスクリプトからSayHello()関数を使用するには、 hello.py module 初期化。

import hello
hello.SayHello("TutorialsPoint")

ただし、これにより、モジュールで定義されているすべての関数がインポートされます。モジュールから特定の関数をインポートするには、次の構文を使用します。

from modname import name1[, name2[,... nameN]

たとえば、SayHello()関数のみをインポートするには、上記のスクリプトを次のように変更します。

from hello import SayHello
SayHello("TutorialsPoint")

関数を呼び出すときに、モジュールの名前の前に付ける必要はありません。

1つ以上のJythonモジュールを含むフォルダーは、パッケージとして認識されます。ただし、という特別なファイルが必要です__init__.py、使用する関数のインデックスを提供します。

パッケージを作成してインポートする方法を理解しましょう。

Step 1 −というフォルダを作成します package1、次に以下を作成して保存します g その中のモジュール。

#fact.py
def factorial(n):
   f = 1
   for x in range(1,n+1):
      f = f*x
   return f

#sum.py
def add(x,y):
   s = x+y
   return s

#mult.py
def multiply(x,y):
   s = x*y
   return s

Step 2 − package1フォルダーに、を作成して保存します。 __init__.py 次の内容のファイル。

#__init__.py
from fact import factorial
from sum import add
from mult import multiply

Step 3 −package1フォルダーの外に次のJythonスクリプトを作成します。 test.py

# Import your Package.
import package1

f = package1.factorial(5)
print "factorial = ",f
s = package1.add(10,20)
print "addition = ",s
m = package1.multiply(10,20)
print "multiplication = ",m

Step 4−Jythonプロンプトからtest.pyを実行します。以下の出力が得られます。

factorial = 120
addition = 30
multiplication = 200

ダウンロード jython-standalone-2.7.0.jar -公式ダウンロードページからJavaアプリケーションにJythonを埋め込む場合: http://www.jython.org/downloads.html このjarファイルをJavaCLASSPATH環境変数に含めます。

このライブラリには、 PythonInterpreterクラス。このクラスのオブジェクトを使用すると、Pythonスクリプトを使用して実行できます。execfile()方法。PythonInterpreterを使用すると、PyObjects直接。Jythonランタイムシステムに認識されているすべてのオブジェクトは、クラスPyObjectまたはそのサブクラスの1つのインスタンスによって表されます。

PythonInterpreterクラスには、以下の表で説明されている、定期的に使用されるメソッドがいくつかあります。

シニア番号 方法と説明
1

setIn(PyObject)

標準入力ストリームに使用するPythonオブジェクトを設定します

2

setIn(java.io.Reader)

標準入力ストリームに使用するjava.io.Readerを設定します

3

setIn(java.io.InputStream)

標準入力ストリームに使用するjava.io.InputStreamを設定します

4

setOut(PyObject)

標準出力ストリームに使用するPythonオブジェクトを設定します

5

setOut(java.io.Writer)

標準出力ストリームに使用するjava.io.Writerを設定します

6

setOut(java,io.OutputStream)

標準出力ストリームに使用するjava.io.OutputStreamを設定します

7

setErr(PyObject)

標準エラーストリームに使用するPythonエラーオブジェクトを設定します

8

setErr(java.io.Writer

標準エラーストリームに使用するjava.io.Writerを設定します

9

setErr(java.io.OutputStream)

標準エラーストリームに使用するjava.io.OutputStreamを設定します

10

eval(String)

文字列をPythonソースとして評価し、結果を返します

11

eval(PyObject)

Pythonコードオブジェクトを評価して結果を返す

12

exec(String)

ローカル名前空間でPythonソース文字列を実行します

13

exec(PyObject)

ローカル名前空間でPythonコードオブジェクトを実行します

14

execfile(String filename)

ローカル名前空間でPythonソースのファイルを実行します

15

execfile(java.io.InputStream)

ローカル名前空間でPythonソースの入力ストリームを実行します

16

compile(String)

Pythonソース文字列を式またはモジュールとしてコンパイルします

17

compile(script, filename)

Pythonソースのスクリプトを式またはモジュールとしてコンパイルします

18

set(String name, Object value)

ローカル名前空間にオブジェクトタイプの変数を設定します

19

set(String name, PyObject value)

ローカル名前空間にPyObjectタイプの変数を設定します

20

get(String)

ローカル名前空間の変数の値を取得します

21

get(String name, Class javaclass

ローカル名前空間の変数の値を取得します。値は、指定されたJavaクラスのインスタンスとして返されます。

次のコードブロックは、Jythonスクリプトが埋め込まれたJavaプログラムです。 “hello.py”.usingexecfile()PythonInterpreterオブジェクトのメソッド。また、set()メソッドとget()メソッドを使用してPython変数を設定または読み取る方法も示します。

import org.python.util.PythonInterpreter;
import org.python.core.*;

public class SimpleEmbedded {
   public static void main(String []args) throws PyException {
      PythonInterpreter interp = new PythonInterpreter();
      System.out.println("Hello, world from Java");
      interp.execfile("hello.py");
      interp.set("a", new PyInteger(42));
      interp.exec("print a");
      interp.exec("x = 2+2");
      PyObject x = interp.get("x");
      System.out.println("x: "+x);
      System.out.println("Goodbye ");
   }
}

上記のJavaプログラムをコンパイルして実行し、次の出力を取得します。

Hello, world from Java
hello world from Python
42
x: 4
Goodbye

PyDevは、Python、Jython、IronPythonでプロジェクトを開発できるようにするEclipseIDEのオープンソースプラグインです。それはでホストされていますhttps://pydev.org。EclipseIDEにPyDevプラグインをインストールするためのステップバイステップの手順を以下に示します。

Step 1 − Eclipse IDEを開き、 Install New Software ヘルプメニューのオプション。

Step 2 −入力 http://pydev.org/updatesラベル付きの作業の前のテキストボックスで、[追加]をクリックします。リストで使用可能なすべてのエントリを選択し、[次へ]をクリックします。ウィザードはインストールを完了するのに数分かかり、IDEを再起動するように求められます。

Step 3−次に、[ウィンドウ]メニューから[設定]オプションを選択します。以下に示すように、[設定]ダイアログが開きます。

Step 4− [インタープリター]ノードを展開し、左側のペインで[Jythonインタープリター]を選択します。右側のペインで、[新規]をクリックしてパスを指定しますjython.jar file

これで、Eclipseを使用してJythonプロジェクトを開始する準備が整いました。

Eclipseでプロジェクトを作成するには、以下の手順に従う必要があります。

Step 1−ファイルを選択しますか?新着 ?事業。選択PyDevフィルタダイアログから。プロジェクト名、プロジェクトタイプを入力し、[完了]をクリックします。

Step 2−ハロープロジェクトが左側のプロジェクトエクスプローラーに表示されます。右クリックしてhello.pyを追加します。

Step 3−空のhello.pyがエディターに表示されます。Jythonコードを記述して保存します。

Step 4−メニューバーの[実行]ボタンをクリックします。以下に示すように、出力がコンソールウィンドウに表示されます。

NetBeansに対するPythonおよびJythonのサポートは、 nbPython plugin。次のURLからプラグインをダウンロードします-http://plugins.netbeans.org/plugin/56795。ダウンロードしたアーカイブをいくつかのフォルダーに解凍します。例えば ​​-d:\nbplugin。NetBeansプラグインをインストールするには、以下の手順に従います。

Step 1 −開始 Netbeans IDE次に、[ツール] / [プラグイン]に移動して、プラグインマネージャーを開きます。[ダウンロード済み]タブを選択し、ダウンロードしたファイルが解凍されたフォルダーを参照します。NetBeansウィンドウが次のように表示されます。

Step 2 −次のステップは、すべての .nbm ファイルをクリックし、[開く]をクリックします。

Step 3 − [インストール]ボタンをクリックします。

Step 4 −続行するには、次の使用許諾契約に同意してください。

プラグインの信頼できないソースに関する警告を無視し、IDEを再起動して続行します。

NetBeansのJythonプロジェクト

再起動したら、[ファイル] / [新規]を選択して新しいプロジェクトを開始します。Pythonカテゴリがカテゴリリストで利用できるようになります。続行するにはそれを選択してください。

システムにPythonがインストールされている場合、そのバージョンは自動的に検出され、Pythonプラットフォームのドロップダウンリストに表示されます。ただし、Jythonはリストされません。[管理]ボタンをクリックして追加します。

[新規]ボタンをクリックして、プラットフォーム名とパスをJython実行可能ファイルに追加します。

Jythonがプラットフォームリストで利用できるようになります。次のスクリーンショットに示すように、ドロップダウンリストから選択します。

これで、次のウィンドウでプロジェクト名、場所、メインファイルを入力できます。

プロジェクト構造は、NetBeans IDEのプロジェクトウィンドウに表示され、テンプレートPythonコードはエディタウィンドウに表示されます。

Jythonプロジェクトをビルドして実行し、NetBeansIDEの出力ウィンドウで次の結果を取得します。

Javaサーブレットは、最も広く使用されているWeb開発手法です。Jythonを使用してサーブレットを作成できます。これにより、Javaが提供する以上の多くの利点が追加されます。これは、Python言語機能も利用できるようになったためです。

NetBeans IDEを使用して、Jythonサーブレットを使用してJavaWebアプリケーションを開発します。ことを確認nbPython pluginNetBeansインストールにインストールされます。次のパスを選択して、新しいプロジェクトを開始し、Webアプリケーションを構築します-File → New Project → Java web → New Web Application

プロジェクトの名前と場所を入力します。IDEはプロジェクトフォルダ構造を作成します。[プロジェクト]ウィンドウのソースパッケージノードの下にJavaサーブレットファイル(ServletTest.java)を追加します。これにより追加されますservlet-api.jarプロジェクトのlibフォルダーにあります。また、IDEにweb.xmlを作成させますdescriptor file。次のコードをに追加しますServletTest.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletTest extends HttpServlet {
   
   public void doGet (HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      doPost(request, response);
   }
   
   public void doPost (HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      response.setContentType ("text/html");
      PrintWriter toClient = response.getWriter();
      
      toClient.println (
         "<html>
            <head>
               <title>Servlet Test</title>" + "
            </head>
            <body>
               <h1>Servlet Test</h1>
            </body>
         </html>"
      );
   }
}

NetBeansによって作成されるweb.xmlファイルは次のようになります-

<web-app>
   <servlet>
      <servlet-name>ServletTest</servlet-name>
      <servlet-class>ServletTest</servlet-class>
   </servlet>
   
   <servlet-mapping>
      <servlet-name>ServletTest</servlet-name>
      <url-pattern>/ServletTest</url-pattern>
   </servlet-mapping>
</web-app>

プロジェクトをビルドして実行し、テキストを取得します Servlet Testブラウザウィンドウの<h1>タグに表示されます。したがって、アプリケーションに通常のJavaサーブレットを追加しました。

ここで、Jythonサーブレットを追加します。Jythonサーブレットは、中間Javaサーブレットを使用して動作します。これはPyServletとも呼ばれます。PyServlet.classはに存在しますjython standalone.jar。に追加しますWEB-INF/lib フォルダ。

次のステップは、PyServletを呼び出すようにweb.xmlを構成することです。 *.py file上げられます。これは、次のxmlコードを追加することによって実行する必要があります。

<servlet>
   <servlet-name>PyServlet</servlet-name>
   <servlet-class>org.python.util.PyServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
   <servlet-name>PyServlet</servlet-name>
   <url-pattern>*.py</url-pattern>
</servlet-mapping>

完全なweb.xmlコードは次のようになります。

<web-app>
   <servlet>
      <servlet-name>ServletTest</servlet-name>
      <servlet-class>ServletTest</servlet-class>
   </servlet>
   
   <servlet>
      <servlet-name>PyServlet</servlet-name>
      <servlet-class>org.python.util.PyServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
   
   <servlet-mapping>
      <servlet-name>ServletTest</servlet-name>
      <url-pattern>/ServletTest</url-pattern>
   </servlet-mapping>
   
   <servlet-mapping>
      <servlet-name>PyServlet</servlet-name>
      <url-pattern>*.py</url-pattern>
   </servlet-mapping>
</web-app>

次のJythonコードをプロジェクトフォルダー内のWEB-INFフォルダーにJythonServlet.pyとして配置します。これは、前のServletTest.javaと同等です。

from javax.servlet.http import HttpServlet
class JythonServlet1 (HttpServlet):
   def doGet(self,request,response):
      self.doPost (request,response)
   def doPost(self,request,response):
      toClient = response.getWriter()
      response.setContentType ("text/html")
      
      toClient.println (
         "<html>
            <head>
               <title>Servlet Test</title>" + "
            </head>
            <body>
               <h1>Servlet Test</h1>
            </body>
         </html>"
      )

プロジェクトをビルドし、ブラウザで次のURLを開きます-

http://localhost:8080/jythonwebapp/jythonservlet.py

ブラウザにが表示されます Servlet Test Javaサーブレット出力の場合と同様に、<h1>タグ内。

Jythonは zxJDBC packageこれは、JDBCの使いやすいPythonラッパーを提供します。zxJDBCは、次の2つの標準を橋渡しします。JDBC Javaでのデータベースアクセスの標準プラットフォームであり、 DBI Pythonアプリの標準データベースAPIです。

ZxJDBCは、JDBCへのDBI2.0標準準拠のインターフェースを提供します。JDBCでは200を超えるドライバーが利用可能であり、それらはすべてzxJDBCで動作します。高性能ドライバーは、以下を含むすべての主要なリレーショナルデータベースで利用できます。

  • DB2
  • Derby
  • MySQL
  • Oracle
  • PostgreSQL
  • SQLite
  • SQLServerと
  • Sybase.

ZxJDBCパッケージはからダウンロードできます https://sourceforge.net/projects/zxjdbc/ または http://www.ziclix.com/zxjdbc/。ダウンロードしたアーカイブにはZxJDBC.jarが含まれており、これをCLASSPATH環境変数に追加する必要があります。

MySQLデータベースとのデータベース接続を確立する予定です。この目的のために、MySQL用のJDBCドライバーが必要です。ダウンロードMySQL J connector 次のリンクから- https://dev.mysql.com/downloads/connector/j/ mysqlコネクタjava-5.1.42-bin.jarをCLASSPATHに含めます。

MySQLサーバーにログインし、次の構造でテストデータベースに学生テーブルを作成します-

フィールド タイプ
名前 Varchar 10
年齢 Int 3
マーク Int 3

その中にいくつかのレコードを追加します。

名前 年齢 マーク
ラビ 21 78
アショク 20 65
アニル 22 71

次のJythonスクリプトを次のように作成します dbconnect.py

url = "jdbc:mysql://localhost/test"
user = "root"
password = "password"
driver = "com.mysql.jdbc.Driver"
mysqlConn = zxJDBC.connect(url, user, password, driver)
mysqlConn = con.cursor()
mysqlConn.execute(“select * from student)
for a in mysql.fetchall():
   print a

Jythonプロンプトから上記のスクリプトを実行します。学生テーブルのレコードは、次のように一覧表示されます-

(“Ravi”, 21, 78)
(“Ashok”, 20, 65)
(“Anil”,22,71)

これは、JythonでJDBCを確立する手順を説明しています。

Jythonの主な機能の1つは、JDKでSwingGUIライブラリを使用できることです。標準のPythonディストリビューション(CPythonと呼ばれることもあります)には、Tkinter GUI library付属しています。のような他のGUIライブラリPyQt そして WxPython 一緒に使用することもできますが、swingライブラリはプラットフォームに依存しないGUIツールキットを提供します。

Jythonでswingライブラリを使用することは、Javaで使用するよりもはるかに簡単です。Javaでは、匿名クラスを使用してイベントバインディングを作成する必要があります。Jythonでは、同じ目的で関数を渡すだけで済みます。

基本的なトップレベルウィンドウは、のオブジェクトを宣言することによって作成されます JFrame classそして、そのvisibleプロパティをtrueに設定します。そのためには、Jframeクラスをswingパッケージからインポートする必要があります。

from javax.swing import JFrame

JFrameクラスには、さまざまな数の引数を持つ複数のコンストラクターがあります。文字列を引数としてタイトルとして設定するものを使用します。

frame = JFrame(“Hello”)

表示プロパティをtrueに設定する前に、フレームのサイズと場所のプロパティを設定します。次のコードを次のように保存しますframe.py

from javax.swing import JFrame

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(300,200)
frame.setVisible(True)

コマンドプロンプトから上記のスクリプトを実行します。ウィンドウを示す次の出力が表示されます。

スイングGUIライブラリは次の形式で提供されます javax.swingJavaのパッケージ。そのメインコンテナクラス、JFrame そして JDialogそれぞれ、AWTライブラリにあるFrameクラスとDialogクラスから派生しています。のような他のGUIコントロールJLabel, JButton, JTextField, などは、JComponentクラスから派生します。

次の図は、Swingパッケージクラスの階層を示しています。

次の表は、swingライブラリのさまざまなGUIコントロールクラスをまとめたものです。

シニア番号 クラスと説明
1

JLabel

JLabelオブジェクトは、テキストをコンテナに配置するためのコンポーネントです。

2

JButton

このクラスは、ラベル付きボタンを作成します。

3

JColorChooser

JColorChooserは、ユーザーが色を操作および選択できるように設計されたコントロールのペインを提供します。

4

JCheckBox

JCheckBoxは、次のいずれかに配置できるグラフィカルコンポーネントです。 on (true)または off (false)状態。

5

JRadioButton

JRadioButtonクラスは、オン(true)またはオフ(false)のいずれかの状態にあるグラフィックコンポーネントです。グループで。

6

JList

JListコンポーネントは、テキストアイテムのスクロールリストをユーザーに提示します。

7

JComboBox

JComboBoxコンポーネントは、アイテムのドロップダウンリストをユーザーに提示します

8

JTextField

JTextFieldオブジェクトは、1行のテキストの編集を可能にするテキストコンポーネントです。

9

JPasswordField

JPasswordFieldオブジェクトは、パスワード入力に特化したテキストコンポーネントです。

10

JTextArea

JTextAreaオブジェクトは、複数行のテキストの編集を可能にするテキストコンポーネントです。

11

ImageIcon

ImageIconコントロールは、画像からアイコンをペイントするアイコンインターフェイスの実装です。

12

JScrollbar

スクロールバーコントロールは、ユーザーが値の範囲から選択できるようにするためのスクロールバーコンポーネントを表します。

13

JOptionPane

JOptionPaneは、ユーザーに値の入力を求める、またはユーザーに何かを通知する一連の標準ダイアログボックスを提供します。

14

JFileChooser

JFileChooserコントロールは、ユーザーがファイルを選択できるダイアログウィンドウを表します。

15

JProgressBar

タスクが完了に向かって進行すると、進行状況バーにタスクの完了率が表示されます。

16

JSlider

JSliderを使用すると、ユーザーは、制限された間隔内でノブをスライドさせることにより、値をグラフィカルに選択できます。

17

JSpinner

JSpinnerは、ユーザーが順序付けられたシーケンスから数値またはオブジェクト値を選択できるようにする1行の入力フィールドです。

以降の例では、これらのコントロールの一部を使用します。

Javaのレイアウトマネージャーは、次のようなコンテナーオブジェクト内のコントロールの配置を管理するクラスです。 Frame, Dialog または Panel。レイアウトマネージャーは、解像度が変更されたり、フレーム自体のサイズが変更されたりしても、フレーム内のコントロールの相対的な位置を維持します。

これらのクラスは、 Layout interface。次のレイアウトマネージャーは、AWT library

  • BorderLayout
  • FlowLayout
  • GridLayout
  • CardLayout
  • GridBagLayout

次のレイアウトマネージャーは、 Swing library

  • BoxLayout
  • GroupLayout
  • ScrollPaneLayout
  • SpringLayout

以下の例では、AWTレイアウトマネージャーとSwingレイアウトマネージャーを使用します。

  • 絶対レイアウト
  • フローレイアウト
  • グリッドレイアウト
  • ボーダーレイアウト
  • ボックスレイアウト
  • グループレイアウト

これらのそれぞれについて詳しく説明しましょう。

絶対レイアウト

上記のすべてのレイアウトマネージャーを調べる前に、コンテナー内のコントロールの絶対位置を確認する必要があります。フレームオブジェクトのレイアウトメソッドを「なし」に設定する必要があります。

frame.setLayout(None)

次に、を呼び出してコントロールを配置します setBounds()方法。x位置、y位置、幅、高さの4つの引数を取ります。

例-ボタンオブジェクトを絶対位置に絶対サイズで配置します。

btn = JButton("Add")
btn.setBounds(60,80,60,20)

同様に、すべてのコントロールは、位置とサイズを適切に割り当てることで配置できます。このレイアウトは比較的使いやすいですが、ウィンドウのサイズが変更された場合、または画面の解像度が変更されたときにプログラムが実行された場合、外観を維持できません。

次のJythonスクリプトでは、3つのJlabelオブジェクトを使用して、それぞれ「phy」、「maths」、「Total」というテキストを表示しています。これら3つの前に-JTextFieldオブジェクトが配置されます。Buttonオブジェクトは「Total」ラベルの上に配置されます。

まず、JFrameウィンドウはレイアウトをnoneに設定して作成されます。

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(300,200)
frame.setLayout(None)

次に、絶対位置とサイズに応じてさまざまなコントロールが追加されます。完全なコードを以下に示します-

from javax.swing import JFrame, JLabel, JButton, JTextField

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(300,200)
frame.setLayout(None)

lbl1 = JLabel("Phy")
lbl1.setBounds(60,20,40,20)
txt1 = JTextField(10)
txt1.setBounds(120,20,60,20)
lbl2 = JLabel("Maths")
lbl2.setBounds(60,50,40,20)
txt2 = JTextField(10)
txt2.setBounds(120, 50, 60,20)
btn = JButton("Add")
btn.setBounds(60,80,60,20)
lbl3 = JLabel("Total")
lbl3.setBounds(60,110,40,20)
txt3 = JTextField(10)
txt3.setBounds(120, 110, 60,20)

frame.add(lbl1)
frame.add(txt1)
frame.add(lbl2)
frame.add(txt2)
frame.add(btn)
frame.add(lbl3)
frame.add(txt3)
frame.setVisible(True)

上記のコードの出力は次のとおりです。

Jython FlowLayout

FlowLayoutは、コンテナクラスのデフォルトのレイアウトマネージャです。コントロールを左から右に、次に上から下に配置します。

次の例では、Jlabelオブジェクト、JTextFieldオブジェクト、およびJButtonオブジェクトがFlowLayoutマネージャーを使用してJFrameに表示されます。まず、必要なクラスをからインポートしましょう。javax.swing パッケージと java.awt パッケージ。

from javax.swing import JFrame, JLabel, JButton, JTextField
from java.awt import FlowLayout

次に、JFrameオブジェクトを作成し、その場所とサイズのプロパティを設定します。

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(200,200)
Set the layout manager for the frame as FlowLayout.
frame.setLayout(FlowLayout())

次に、JLabel、JTextfield、およびJButtonクラスのオブジェクトを宣言します。

label = JLabel("Welcome to Jython Swing")
txt = JTextField(30)
btn = JButton("ok")

最後に、を呼び出して、これらのコントロールをフレームに追加します。 add() JFrameクラスのメソッド。

frame.add(label)
frame.add(txt)
frame.add(btn)

フレームを表示するには、そのvisibleプロパティをtrueに設定します。完全なJythonスクリプトとその出力は次のとおりです-

from javax.swing import JFrame, JLabel, JButton, JTextField
from java.awt import FlowLayout

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(200,200)

frame.setLayout(FlowLayout())

label = JLabel("Welcome to Jython Swing")
txt = JTextField(30)
btn = JButton("ok")

frame.add(label)
frame.add(txt)
frame.add(btn)
frame.setVisible(True)

Jython GridLayout

Gridlayoutマネージャーを使用すると、長方形のグリッドにコントロールを配置できます。グリッドの各セルに1つのコントロールが配置されます。

次の例では、GridLayoutがJFrameオブジェクトに適用され、4行4列に分割されています。JButtonオブジェクトは、グリッドの各セルに配置されます。

まず、必要なライブラリをインポートしましょう-

from javax.swing import JFrame, JButton
from java.awt import GridLayout

次に、JFrameコンテナを作成します-

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(400,400)

次に、その寸法を4 x 4として指定して、GridLayoutを適用します。

frame.setLayout(GridLayout(4,4))

ここで、それぞれ1から4までの2つのFORループを使用する必要があるため、16個のJButtonオブジェクトが後続のセルに配置されます。

k = 0
frame.setLayout(GridLayout(4,4))
for i in range(1,5):
   for j in range(1,5):
      k = k+1
      frame.add(JButton(str(k)))

最後に、フレームの可視性をtrueに設定します。完全なJythonコードを以下に示します。

from javax.swing import JFrame, JButton
from java.awt import GridLayout

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(400,400)

frame.setLayout(GridLayout(4,4))

k = 0
for i in range(1,5):
   for j in range(1,5):
      k = k+1
      frame.add(JButton(str(k)))

frame.setVisible(True)

上記のコードの出力は次のとおりです-

Jython BorderLayout

BorderLayoutマネージャーは、コンテナーを5つの地理的リージョンに分割し、各リージョンに1つのコンポーネントを配置します。これらの領域は、次のように定義された定数で表されます。

  • BorderLayout.NORTH
  • BorderLayout.SOUTH
  • BorderLayout.EAST
  • BorderLayout.WEST
  • BorderLayout.CENTER

次の例を考えてみましょう-

Jython BoxLayout

BoxLayoutクラスはで定義されています javax.swing package。コンテナ内のコンポーネントを垂直または水平に配置するために使用されます。方向は次の定数によって決定されます-

  • X_AXIS
  • Y_AXIS
  • LINE_AXIS
  • PAGE_AXIS

整数定数は、コンテナのコンポーネントを配置する軸を指定します。コンテナのコンポーネントの向きがデフォルトの場合、LINE_AXISはコンポーネントを左から右に配置することを指定し、PAGE_AXISはコンポーネントを上から下に配置することを指定します。

次の例では、(JPanelクラスの)パネルがJFrameオブジェクトに追加されています。垂直BoxLayoutが適用され、上部と下部の2つのパネルが追加されます。これらの2つの内部パネルには、水平のBoxlayoutにそれぞれ追加された2つのボタンがあります。

まず、トップレベルのJFrameウィンドウを作成しましょう。

frame = JFrame()
frame.setTitle("Buttons")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setSize(300, 150)

JPanelオブジェクトは、垂直BoxLayoutを持つように宣言されています。トップレベルのフレームに追加します。

panel = JPanel()
panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS))
frame.add(panel)

このパネルでは、上部と下部にさらに2つのパネルが追加されています。それぞれに2つのJButtonオブジェクトが水平方向に追加され、25ピクセルのスペースホルダーで区切られています。

###top panel
top = JPanel()
top.setLayout(BoxLayout(top, BoxLayout.X_AXIS))
b1 = JButton("OK")
b2 = JButton("Close")
top.add(Box.createVerticalGlue())
top.add(b1)
top.add(Box.createRigidArea(Dimension(25, 0)))
top.add(b2)

同様に、下部パネルが作成されます。

###bottom panel
bottom = JPanel()
bottom.setLayout(BoxLayout(bottom, BoxLayout.X_AXIS))
b3 = JButton("Open")
b4 = JButton("Save")
bottom.add(b3)
bottom.add(Box.createRigidArea(Dimension(25, 0)))
bottom.add(b4)
bottom.add(Box.createVerticalGlue())

注意してください createRigidArea()関数は、2つのボタンの間に25ピクセルのスペースを作成するために使用されます。また、createVerticalGlue() 関数は、レイアウトの先頭または末尾のスペースを占めます。

まず、上部パネルと下部パネルを追加し、フレームの可視性プロパティをtrueに設定します。完全なコードは次のとおりです-

from java.awt import Dimension
from javax.swing import JButton, JFrame,JPanel,BoxLayout,Box

frame = JFrame()
frame.setTitle("Buttons")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setSize(300, 150)

panel = JPanel()
panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS))
frame.add(panel)

###top panel
top = JPanel()
top.setLayout(BoxLayout(top, BoxLayout.X_AXIS))
b1 = JButton("OK")
b2 = JButton("Close")
top.add(Box.createVerticalGlue())
top.add(b1)
top.add(Box.createRigidArea(Dimension(25, 0)))
top.add(b2)

###bottom panel
bottom = JPanel()
bottom.setLayout(BoxLayout(bottom, BoxLayout.X_AXIS))
b3 = JButton("Open")
b4 = JButton("Save")
bottom.add(b3)
bottom.add(Box.createRigidArea(Dimension(25, 0)))
bottom.add(b4)
bottom.add(Box.createVerticalGlue())

panel.add(bottom)
panel.add(top)
frame.setVisible(True)

上記のコードは、次の出力を生成します。

Jython GroupLayout

GroupLayoutマネージャーは、コンポーネントを階層的にグループ化します。グループ化は2つのクラスによって行われます。SequentialGroup そして ParallelGroup、どちらもJavaでグループインターフェイスを実装します。

レイアウト手順は2つのステップに分かれています。ワンステップでは、コンポーネントは水平軸に沿って配置され、2番目には垂直軸に沿って配置されます。各コンポーネントは、レイアウトで2回定義する必要があります。

配置には、順次と並列の2つのタイプがあります。どちらの場合も、コンポーネントを順番にまたは並列に配置できます。水平配置では、行は順次グループと呼ばれ、列は並列グループと呼ばれます。一方、並列配置では、要素の行は並列グループであり、列はシーケンシャルと呼ばれます。

次の例では、5つのボタンが、それぞれ3つが行と列に表示されるように配置されています。まず、JFrameウィンドウにJpanelオブジェクトを追加し、そのレイアウトをGrouplayoutとして設定します。

frame =  JFrame()
panel =  JPanel()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
layout =  GroupLayout(panel)
panel.setLayout(layout)

次に、JButtonオブジェクトを作成します-

buttonD = JButton("D")
buttonR = JButton("R")
buttonY = JButton("Y")
buttonO = JButton("O")
buttonT = JButton("T")

次に、 SequentialGroup 名前付き LeftToRightbuttonDとbuttonYが追加されます。それらの間に、ParallelGroup ColumnMiddle(他の3つのボタンが垂直に追加されている)が配置されます。

leftToRight = layout.createSequentialGroup()
leftToRight.addComponent(buttonD)
columnMiddle = layout.createParallelGroup()
columnMiddle.addComponent(buttonR)
columnMiddle.addComponent(buttonO)
columnMiddle.addComponent(buttonT)
leftToRight.addGroup(columnMiddle)
leftToRight.addComponent(buttonY)

次に、TopToBottomと呼ばれる垂直SequentialGroupの定義があります。3つのボタンのParallelGroup行を追加してから、2つのボタンを垂直に置きます。

topToBottom = layout.createSequentialGroup()
rowTop = layout.createParallelGroup()
rowTop.addComponent(buttonD)
rowTop.addComponent(buttonR)
rowTop.addComponent(buttonY)
topToBottom.addGroup(rowTop)
topToBottom.addComponent(buttonO)
topToBottom.addComponent(buttonT)

最後に、LeftToRightグループを水平に設定し、TopToBottomグループを垂直にレイアウトオブジェクトに設定します。完全なコードを以下に示します-

from javax.swing import JButton, JFrame,JPanel,GroupLayout

frame = JFrame()
panel = JPanel()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
layout = GroupLayout(panel)
panel.setLayout(layout)

buttonD = JButton("D")
buttonR = JButton("R")
buttonY = JButton("Y")
buttonO = JButton("O")
buttonT = JButton("T")

leftToRight = layout.createSequentialGroup()
leftToRight.addComponent(buttonD)
columnMiddle = layout.createParallelGroup()
columnMiddle.addComponent(buttonR)
columnMiddle.addComponent(buttonO)
columnMiddle.addComponent(buttonT)
leftToRight.addGroup(columnMiddle)
leftToRight.addComponent(buttonY)

topToBottom = layout.createSequentialGroup()
rowTop = layout.createParallelGroup()
rowTop.addComponent(buttonD)
rowTop.addComponent(buttonR)
rowTop.addComponent(buttonY)
topToBottom.addGroup(rowTop)
topToBottom.addComponent(buttonO)
topToBottom.addComponent(buttonT)

layout.setHorizontalGroup(leftToRight)
layout.setVerticalGroup(topToBottom)

frame.add(panel)
frame.pack()
frame.setVisible(True)

上記のコードの出力は次のとおりです-

Java Swingでのイベント処理では、コントロール(JButtonやJListなど)をそれぞれのイベントリスナーに登録する必要があります。イベントリスナーインターフェイスまたは対応するアダプタクラスは、実装するか、イベント処理メソッドをオーバーライドしてサブクラス化する必要があります。Jythonでは、イベント処理は非常に簡単です。コントロールに対応するイベント処理関数のプロパティとして、任意の関数を渡すことができます。

まず、Javaでクリックイベントがどのように処理されるかを見てみましょう。

まず、インポートする必要があります java.awt.event package。次に、JFrameを拡張するクラスはActionListenerインターフェースを実装する必要があります。

public class btnclick extends JFrame implements ActionListener

次に、JButtonオブジェクトを宣言し、それをフレームのContentPaneに追加してから、addActionListener()メソッドによってActionListenerに登録する必要があります。

JButton b1 = new JButton("Click here");
   getContentPane().add(b1);
   b1.addActionListener(this);

ここで、ActionEventを処理するには、ActionListenerインターフェイスのactionPerformed()メソッドをオーバーライドする必要があります。

以下はJavaコード全体です-

import java.awt.event.*;
import javax.swing.*;
public class btnclick extends JFrame implements ActionListener {
   btnclick() {
      JButton b1 = new JButton("Click here");
      getContentPane().add(b1);
      b1.addActionListener(this);
   }
   
   public void actionPerformed(ActionEvent e) {
      System.out.println("Clicked");
   }
   
   public static void main(String args[]) {
      btnclick b = new btnclick();
      b.setSize(300,200);
      b.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      b.setVisible(true);
   }
}

ここで、同じコードと同等のJythonコードを記述します。

まず、ActionEventまたはActionListenerをインポートする必要はありません。これは、Jythonの動的型付けにより、コードでこれらのクラスについて言及することを回避できるためです。

次に、ActionListenerを実装またはサブクラス化する必要はありません。代わりに、ユーザー定義関数は、次の値としてJButtonコンストラクターにすぐに提供されます。actionPerformed Beanプロパティ。

button = JButton('Click here!', actionPerformed = clickhere)

ザ・ clickhere() 関数は、ボタンのクリックイベントを処理する通常のJython関数として定義されています。

def change_text(event):
print clicked!'

これがJythonの同等のコードです。

from javax.swing import JFrame, JButton

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(300,200)

def clickhere(event):
   print "clicked"

btn = JButton("Add", actionPerformed = clickhere)
frame.add(btn)

frame.setVisible(True)

JavaとJythonコードの出力は同じです。ボタンがクリックされると、コンソールに「クリックされました」というメッセージが出力されます。

次のJythonコードでは、「phy」と「maths」にマークを入力するために、2つのJTextFieldオブジェクトがJFrameウィンドウに提供されています。JButtonオブジェクトは、クリックされるとadd()関数を実行します。

btn = JButton("Add", actionPerformed = add)

add()関数は、getText()メソッドによって2つのテキストフィールドの内容を読み取り、それらを整数に解析して、加算を実行できるようにします。結果は、setText()メソッドによって3番目のテキストフィールドに入力されます。

def add(event):
   print "add"
   ttl = int(txt1.getText())+int(txt2.getText())
   txt3.setText(str(ttl))

完全なコードを以下に示します-

from javax.swing import JFrame, JLabel, JButton, JTextField
from java.awt import Dimension

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(300,200)
frame.setLayout(None)

def add(event):
   print "add"
   ttl = int(txt1.getText())+int(txt2.getText())
   txt3.setText(str(ttl))

lbl1 = JLabel("Phy")
lbl1.setBounds(60,20,40,20)
txt1 = JTextField(10)
txt1.setBounds(120,20,60,20)
lbl2 = JLabel("Maths")
lbl2.setBounds(60,50,40,20)
txt2 = JTextField(10)
txt2.setBounds(120, 50, 60,20)
btn = JButton("Add", actionPerformed = add)
btn.setBounds(60,80,60,20)
lbl3 = JLabel("Total")
lbl3.setBounds(60,110,40,20)
txt3 = JTextField(10)
txt3.setBounds(120, 110, 60,20)

frame.add(lbl1)
frame.add(txt1)
frame.add(lbl2)
frame.add(txt2)
frame.add(btn)
frame.add(lbl3)
frame.add(txt3)
frame.setVisible(True)

コマンドプロンプトから上記のコードを実行すると、以下のウィンドウが表示されます。「Phy」、「Maths」のマークを入力し、「Add」ボタンをクリックします。結果はそれに応じて表示されます。

JythonJRadioButtonイベント

JRadioButtonクラスは、 javax.swing package。オンまたはオフの状態で選択可能なトグルボタンを作成します。ButtonGroupに複数のラジオボタンが追加されている場合、それらの選択は相互に排他的です。

次の例では、JRadioButtonクラスの2つのオブジェクトと2つのJLabelが、垂直BoxLayoutのJpanelコンテナに追加されています。JRadioButtonオブジェクトのコンストラクターでは、OnCheck()functionPerformedプロパティの値として関数が設定されます。この機能は、ラジオボタンをクリックして状態を変更したときに実行されます。

rb1 = JRadioButton("Male", True,actionPerformed = OnCheck)
rb2 = JRadioButton("Female", actionPerformed = OnCheck)

ラジオボタンのデフォルト状態はfalse(選択されていない)であることに注意してください。ボタンrb1は、開始状態がTrue(選択済み)の状態で作成されます。

2つのラジオボタンがラジオButtonGroupに追加されて相互に排他的になり、一方が選択された場合、もう一方が自動的に選択解除されます。

grp = ButtonGroup()
grp.add(rb1)
grp.add(rb2)

これらの2つのラジオボタンと2つのラベルは、rb2とlbl2の間の高さ25ピクセルのセパレータ領域を持つ垂直レイアウトのパネルオブジェクトに追加されます。

panel = JPanel()
panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS))

panel.add(Box.createVerticalGlue())
panel.add(lbl)
panel.add(rb1)
panel.add(rb2)
panel.add(Box.createRigidArea(Dimension(0,25)))
panel.add(lbl1)

このパネルはトップレベルのJFrameオブジェクトに追加され、その可視プロパティは最終的に「True」に設定されます。

frame = JFrame("JRadioButton Example")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(250,200)
frame.setVisible(True)
The complete code of radio.py is given below:
from javax.swing import JFrame, JPanel, JLabel, BoxLayout, Box

from java.awt import Dimension
from javax.swing import JRadioButton,ButtonGroup
frame = JFrame("JRadioButton Example")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(250,200)
panel = JPanel()
panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS))
frame.add(panel)

def OnCheck(event):
   lbl1.text = ""
   if rb1.isSelected():
      lbl1.text = lbl1.text+"Gender selection : Male"
   else:
      lbl1.text = lbl1.text+"Gender selection : Female "
      lbl = JLabel("Select Gender")

rb1 = JRadioButton("Male", True,actionPerformed = OnCheck)
rb2 = JRadioButton("Female", actionPerformed = OnCheck)
grp = ButtonGroup()
grp.add(rb1)
grp.add(rb2)

lbl1 = JLabel("Gender Selection :")

panel.add(Box.createVerticalGlue())
panel.add(lbl)
panel.add(rb1)
panel.add(rb2)
panel.add(Box.createRigidArea(Dimension(0,25)))
panel.add(lbl1)

frame.setVisible(True)

上記のJythonスクリプトを実行し、ラジオボタンの選択を変更します。選択内容は下部のラベルに表示されます。

JythonJCheckBoxイベント

以下のような JRadioButton、JCheckBoxオブジェクトは、キャプションのほかに長方形のチェック可能なボックスが付いた選択可能なボタンでもあります。これは通常、アイテムのリストから複数のオプションを選択する機会をユーザーに提供するために使用されます。

次の例では、2つのチェックボックスとswingパッケージのラベルが垂直BoxLayoutのJPanelに追加されています。下部のラベルには、2つのチェックボックスの瞬間的な選択状態が表示されます。

両方のチェックボックスは、actionPerformedプロパティがに設定されているコンストラクターで宣言されています。 OnCheck() 関数。

box1 = JCheckBox("Check1", actionPerformed = OnCheck)
box2 = JCheckBox("Check2", actionPerformed = OnCheck)

OnCheck()関数は、各チェックボックスの選択状態を確認し、下部のラベルに対応するメッセージを表示します。

def OnCheck(event):
   lbl1.text = ""
   if box1.isSelected():
      lbl1.text = lbl1.text + "box1 selected "
   else:
      lbl1.text = lbl1.text + "box1 not selected "
   if box2.isSelected():
      lbl1.text = lbl1.text + "box2 selected"
   else:
      lbl1.text = lbl1.text + "box2 not selected"

これらのボックスとJLabelオブジェクトは、高さ50ピクセルのスペースホルダーが間に追加されたJPanelに追加されます。

panel = JPanel()
panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS))
panel.add(Box.createVerticalGlue())
panel.add(box1)
panel.add(box2)
panel.add(Box.createRigidArea(Dimension(0,50)))
panel.add(lbl1)

パネル自体がトップレベルのJFrameウィンドウに追加され、その可視プロパティは最終的にtrueに設定されます。

frame = JFrame("JCheckBox Example")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(250,150)
frame.add(panel)

frame.setVisible(True)

上記のコードを実行し、チェックボックスの選択を試してください。両方のチェックボックスの瞬間的な状態が下部に表示されます。

JythonJListイベント

スイングパッケージのJListコントロールは、選択するアイテムのスクロール可能なリストをユーザーに提供します。JComboBoxは、アイテムのドロップダウンリストを提供します。Javaでは、選択イベントは、ListSelectionListenerにvalueChanged()メソッドを実装することによって処理されます。Jythonでは、イベントハンドラーがJListオブジェクトのvalueChangedプロパティに割り当てられます。

次の例では、JListオブジェクトとラベルがBorderLayoutのJFrameに追加されています。JListには、タプル内のアイテムのコレクションが入力されます。そのvalueChangedプロパティはlistSelect()関数に設定されます。

lang = ("C", "C++", "Java", "Python", "Perl", "C#", "VB", "PHP", "Javascript", "Ruby")
lst = JList(lang, valueChanged = listSelect)

イベントハンドラ関数は、選択したアイテムのインデックスを取得し、対応するアイテムをJListオブジェクトからフェッチして、下部のラベルに表示します。

def listSelect(event):
   index = lst.selectedIndex
   lbl1.text = "Hello" + lang[index]

JListおよびJLabelオブジェクトは、BorderLayoutを使用してJFrameに追加されます。

コード全体を以下に示します-

from javax.swing import JFrame, JPanel, JLabel, JList
from java.awt import BorderLayout

frame = JFrame("JList Example")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(300,250)

frame.setLayout(BorderLayout())

def listSelect(event):
   index = lst.selectedIndex
   lbl1.text = "Hello" + lang[index]

lang = ("C", "C++", "Java", "Python", "Perl", "C#", "VB", "PHP", "Javascript", "Ruby")
lst = JList(lang, valueChanged = listSelect)
lbl1 = JLabel("box1 not selected box2 not selected")
frame.add(lst, BorderLayout.NORTH)
frame.add(lbl1, BorderLayout.SOUTH)

frame.setVisible(True)

次のコードの出力は次のとおりです。

ほとんどのGUIベースのアプリケーションには、上部にメニューバーがあります。トップレベルウィンドウのタイトルバーのすぐ下にあります。javax.swingパッケージには、効率的なメニューシステムを構築するための精巧な機能があります。それはの助けを借りて構築されていますJMenuBar, JMenu そして JMenuItem クラス。

次の例では、トップレベルウィンドウにメニューバーが表示されます。3つのメニュー項目ボタンで構成されるファイルメニューがメニューバーに追加されます。次に、レイアウトをBorderLayoutに設定してJFrameオブジェクトを準備しましょう。

frame = JFrame("JMenuBar example")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(400,300)
frame.setLayout(BorderLayout())

これで、JMenuBarオブジェクトがSetJMenuBar()メソッドによってアクティブ化されます。

bar = JMenuBar()
frame.setJMenuBar(bar)

次に、「File」キャプションを持つJMenuオブジェクトが宣言されます。3つのJMenuItemボタンが[ファイル]メニューに追加されます。メニュー項目のいずれかがクリックされると、ActionEventハンドラーのOnClick()関数が実行されます。これは、actionPerformedプロパティで定義されます。

file = JMenu("File")
newfile = JMenuItem("New",actionPerformed = OnClick)
openfile = JMenuItem("Open",actionPerformed = OnClick)
savefile = JMenuItem("Save",actionPerformed = OnClick)
file.add(newfile)
file.add(openfile)
file.add(savefile)
bar.add(file)

OnClick()イベントハンドラーは、gwtActionCommand()関数によってJMenuItemボタンの名前を取得し、ウィンドウの下部にあるテキストボックスに表示します。

def OnClick(event):
   txt.text = event.getActionCommand()

[ファイル]メニューオブジェクトがメニューバーに追加されます。最後に、JTextFieldコントロールがJFrameオブジェクトの下部に追加されます。

txt = JTextField(10)
frame.add(txt, BorderLayout.SOUTH)

menu.pyのコード全体を以下に示します-

from javax.swing import JFrame, JMenuBar, JMenu, JMenuItem, JTextField
from java.awt import BorderLayout

frame = JFrame("JMenuBar example")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(400,300)
frame.setLayout(BorderLayout())

def OnClick(event):
   txt.text = event.getActionCommand()

bar = JMenuBar()
frame.setJMenuBar(bar)

file = JMenu("File")
newfile = JMenuItem("New",actionPerformed = OnClick)
openfile = JMenuItem("Open",actionPerformed = OnClick)
savefile = JMenuItem("Save",actionPerformed = OnClick)
file.add(newfile)
file.add(openfile)
file.add(savefile)
bar.add(file)

txt = JTextField(10)
frame.add(txt, BorderLayout.SOUTH)

frame.setVisible(True)

上記のスクリプトをJythonインタープリターを使用して実行すると、[ファイル]メニューのウィンドウが表示されます。それをクリックすると、その3つのメニュー項目がドロップダウンします。いずれかのボタンがクリックされると、その名前がテキストボックスコントロールに表示されます。

ダイアログオブジェクトは、ユーザーが操作するベースウィンドウの上に表示されるウィンドウです。この章では、swingライブラリで定義された事前設定されたダイアログを確認します。彼らですMessageDialog, ConfirmDialog そして InputDialog。これらは、JOptionPaneクラスの静的メソッドのために使用できます。

次の例では、[ファイル]メニューに上記の3つのダイアログに対応する3つのJMenu項目があります。それぞれが実行しますOnClick イベントハンドラ。

file = JMenu("File")
msgbtn = JMenuItem("Message",actionPerformed = OnClick)
conbtn = JMenuItem("Confirm",actionPerformed = OnClick)
inputbtn = JMenuItem("Input",actionPerformed = OnClick)
file.add(msgbtn)
file.add(conbtn)
file.add(inputbtn)

OnClick()ハンドラー関数は、メニュー項目ボタンのキャプションを取得し、それぞれのshowXXXDialog()メソッドを呼び出します。

def OnClick(event):
   str = event.getActionCommand()
   if str == 'Message':
      JOptionPane.showMessageDialog(frame,"this is a sample message dialog")
   if str == "Input":
      x = JOptionPane.showInputDialog(frame,"Enter your name")
      txt.setText(x)
   if str == "Confirm":
      s = JOptionPane.showConfirmDialog (frame, "Do you want to continue?")
      if s == JOptionPane.YES_OPTION:
         txt.setText("YES")
      if s == JOptionPane.NO_OPTION:
         txt.setText("NO")
      if s == JOptionPane.CANCEL_OPTION:
         txt.setText("CANCEL")

メニューからメッセージオプションを選択すると、メッセージがポップアップ表示されます。入力オプションをクリックすると、入力を求めるダイアログが表示されます。入力テキストは、JFrameウィンドウのテキストボックスに表示されます。[確認]オプションを選択すると、[はい]、[いいえ]、[キャンセル]の3つのボタンがあるダイアログが表示されます。ユーザーの選択はテキストボックスに記録されます。

コード全体を以下に示します-

from javax.swing import JFrame, JMenuBar, JMenu, JMenuItem, JTextField
from java.awt import BorderLayout
from javax.swing import JOptionPane
frame = JFrame("Dialog example")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(400,300)
frame.setLayout(BorderLayout())

def OnClick(event):
   str = event.getActionCommand()
   if str == 'Message':
      JOptionPane.showMessageDialog(frame,"this is a sample message dialog")
   if str == "Input":
      x = JOptionPane.showInputDialog(frame,"Enter your name")
      txt.setText(x)
   if str == "Confirm":
      s = JOptionPane.showConfirmDialog (frame, "Do you want to continue?")
      if s == JOptionPane.YES_OPTION:
         txt.setText("YES")
      if s == JOptionPane.NO_OPTION:
         txt.setText("NO")
      if s == JOptionPane.CANCEL_OPTION:
         txt.setText("CANCEL")

bar = JMenuBar()
frame.setJMenuBar(bar)

file = JMenu("File")
msgbtn = JMenuItem("Message",actionPerformed = OnClick)
conbtn = JMenuItem("Confirm",actionPerformed = OnClick)
inputbtn = JMenuItem("Input",actionPerformed = OnClick)
file.add(msgbtn)
file.add(conbtn)
file.add(inputbtn)
bar.add(file)
txt = JTextField(10)
frame.add(txt, BorderLayout.SOUTH)
frame.setVisible(True)

上記のスクリプトを実行すると、次のウィンドウが表示され、メニューに3つのオプションが表示されます-

メッセージボックス

入力ボックス

ダイアログの確認