자이 썬-퀵 가이드

Jython은 Python 프로그래밍 언어의 JVM 구현입니다. Java 플랫폼에서 실행되도록 설계되었습니다. Jython 프로그램은 모든 Java 클래스를 가져 와서 사용할 수 있습니다. Java와 마찬가지로 Jython 프로그램은 다음과 같이 컴파일됩니다.bytecode. 주요 장점 중 하나는 Python으로 설계된 사용자 인터페이스가 다음과 같은 GUI 요소를 사용할 수 있다는 것입니다.AWT, Swing 또는 SWT Package.

JPython으로 시작하여 나중에 이름이 변경된 Jython은 다음과 같은 표준 Python 구현을 거의 따릅니다. CPython 작성자 Guido Van Rossum. 자이 썬은 1997 년Jim Hugunin. Jython 2.0은 1999 년에 출시되었습니다. 그 이후로 Jython 2.x 릴리스는 동등한 CPython 릴리스에 해당합니다. 2015 년 5 월에 출시 된 Jython 2.7.0은 CPython 2.7에 해당합니다. 자이 썬 3.x의 개발이 진행 중입니다.

Python과 Java의 차이점

다음은 Python과 Java의 차이점입니다.

  • Python은 동적 형식의 언어입니다. 따라서 변수의 유형 선언이 필요하지 않습니다. 반면에 Java는 정적으로 유형이 지정된 언어이므로 변수의 유형 선언이 필수이며 변경할 수 없습니다.

  • Python에는 확인되지 않은 예외 만있는 반면 Java에는 확인 된 예외와 확인되지 않은 예외가 모두 있습니다.

  • Python은 범위 지정에 들여 쓰기를 사용하는 반면 Java는 일치하는 중괄호를 사용합니다.

  • Python은 인터프리터 기반 언어이므로 별도의 컴파일 단계가 없습니다. 그러나 Java 프로그램은 바이트 코드로 컴파일되어야하며 차례로 JVM에 의해 실행됩니다.

  • Python은 다중 상속을 지원하지만 Java에서는 다중 상속이 불가능합니다. 그러나 인터페이스 구현이 있습니다.

  • 자바에 비해 Python은 내장 데이터 구조가 더 풍부합니다 (목록, 사전, 튜플, 모든 것이 객체입니다).

Python과 Jython의 차이점

다음은 Python과 Jython의 차이점입니다.

  • CPython이라고하는 Python의 참조 구현은 C 언어로 작성됩니다. 반면에 Jython은 완전히 Java로 작성되었으며 JVM 구현입니다.

  • 표준 Python은 여러 플랫폼에서 사용할 수 있습니다. Jython은 JVM이 설치된 모든 플랫폼에서 사용할 수 있습니다.

  • 표준 Python 코드는 .pyc 파일, 자이 썬 프로그램은 .class 파일.

  • Python 확장은 C 언어로 작성할 수 있습니다. Jython 용 확장은 Java로 작성됩니다.

  • 자이 썬은 본질적으로 진정한 멀티 스레드입니다. 그러나 파이썬은Global Interpreter Lock (GIL) 메커니즘.

  • 두 구현 모두 가비지 수집 메커니즘이 다릅니다.

다음 장에서는 자이 썬에서 자바 라이브러리를 가져 오는 방법을 배웁니다.

Jython 2.7을 설치하기 전에 시스템에 JDK 7이상이 설치되었습니다. Jython은 실행 가능한 jar 파일 형식으로 제공됩니다. -에서 다운로드http://www.jython.org/downloads.html 아이콘을 두 번 클릭하거나 다음 명령을 실행하십시오.

java -jar jython_installer-2.7.0.jar

설치 옵션을 제공해야하는 설치 마법사가 시작됩니다. 다음은 체계적인 설치 절차입니다.

마법사의 첫 번째 단계에서는 언어를 선택하라는 메시지가 표시됩니다.

두 번째 단계에서는 라이센스 계약에 동의하라는 메시지를 표시합니다.

다음 단계에서 설치 유형을 선택하십시오. 표준 설치를 선택하는 것이 좋습니다.

다음 화면에서 옵션에 대한 확인을 요청하고 설치를 완료합니다.

설치 절차를 완료하는 데 다소 시간이 걸릴 수 있습니다.

설치가 완료되면 다음을 호출하십시오. jython.exe대상 디렉토리 내의 bin 디렉토리에서. 자이 썬이 설치되어 있다고 가정C:\jython27, 명령 줄에서 다음을 실행합니다.

C:\jython27\bin\jython

Python 프롬프트 (>>>)가 나타나고 그 앞에 모든 Python 문 또는 Python 스크립트를 실행할 수 있습니다.

Jython의 가장 중요한 기능 중 하나는 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 스크립트로 가져올 수 있습니다. 여기에서 다음 자바 프로그램은 다음과 같은 패키지에 저장되고 컴파일됩니다.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!

변수는 컴퓨터 메모리의 명명 된 위치입니다. 각 변수는 하나의 데이터를 포함 할 수 있습니다. Java와 달리 Python은 동적으로 입력되는 언어입니다. 따라서 Jython을 사용하는 동안에도; 변수의 데이터 유형에 대한 사전 선언이 수행되지 않습니다. 어떤 데이터를 저장할 수 있는지 결정하는 변수의 유형이 아니라 데이터가 변수의 유형을 결정합니다.

다음 예에서는 변수에 정수 값이 할당됩니다. type () 내장 함수를 사용하여 변수 유형이 정수인지 확인할 수 있습니다. 그러나 동일한 변수에 문자열이 할당되면 type () 함수는 동일한 변수의 유형으로 문자열을 지정합니다.

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

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

이것은 파이썬이 동적 유형 언어라고 불리는 이유를 설명합니다.

다음 Python 내장 데이터 유형도 Jython에서 사용할 수 있습니다.

  • Number
  • String
  • List
  • Tuple
  • Dictionary

Python은 숫자 데이터를 정수, 부동 소수점이있는 실수 또는 복소수 일 수있는 숫자로 인식합니다. 문자열, 목록 및 튜플 데이터 유형을 시퀀스라고합니다.

자이 썬 숫자

Python에서 부호있는 정수는 'int'유형이라고합니다. 긴 정수를 표현하기 위해 문자 'L'이 붙습니다. 소수 구성 요소에서 정수 부분을 구분하는 소수점이있는 숫자를 'float'라고합니다. 분수 부분은 '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

자이 썬 문자열

문자열은 단일 (예 : 'hello'), 이중 (예 : "hello") 또는 삼중 (예 : ' "hello'"o "" "hello" "") 인용 부호로 묶인 일련의 문자입니다. 3 중 따옴표는 문자열 내용이 여러 줄에 걸쳐있는 경우 특히 유용합니다.

이스케이프 시퀀스 문자는 3 중 따옴표로 묶인 문자열에 그대로 포함될 수 있습니다. 다음 예제는 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.
"""

인쇄 될 때 세 번째 문자열은 다음 출력을 제공합니다.

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.

자이 썬 목록

목록은 시퀀스 데이터 유형입니다. 쉼표로 구분 된 항목의 모음이며 반드시 동일한 유형일 필요는 없으며 대괄호 안에 저장됩니다. 목록의 개별 항목은 0 기반 인덱스를 사용하여 액세스 할 수 있습니다.

다음 코드 블록은 Python의 List 사용법을 요약합니다.

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 표현식 중 일부를 설명합니다.

자이 썬 표현식 기술
len (목록) 길이
목록 [2] = 10 업데이트
델리스트 [1] 삭제
List.append (20) 추가
List.insert (1,15) 삽입
List.sort () 정렬

자이 썬 튜플

튜플은 괄호 안에 저장된 쉼표로 구분 된 데이터 항목의 변경할 수없는 컬렉션입니다. 튜플의 요소를 삭제하거나 수정할 수 없으며 튜플 컬렉션에 요소를 추가 할 수도 없습니다. 다음 코드 블록은 튜플 작업을 보여줍니다.

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 Dictionary는 Java Collection 프레임 워크의 Map 클래스와 유사합니다. 키-값 쌍의 모음입니다. 쉼표로 구분 된 쌍은 중괄호로 묶습니다. Dictionary 개체는 해싱 기술에 의해 저장되므로 내부 요소를 검색하기 위해 0 기반 인덱스를 따르지 않습니다.

동일한 키는 사전 개체에 두 번 이상 나타날 수 없습니다. 그러나 둘 이상의 키가 동일한 연관된 ​​값을 가질 수 있습니다. Dictionary 객체에서 사용할 수있는 다양한 기능은 다음과 같습니다.

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

다음 표는 사전과 관련된 가장 일반적인 자이 썬 표현식 중 일부를 설명합니다.

자이 썬 표현식 기술
dict.get ( '011') 검색
len (dict) 길이
dict [ '044'] = '첸나이' 추가
del dict [ '022'] 지우다
dict.keys () 키 목록
dict.values ​​() 값 목록
dict.clear () 모든 요소를 ​​제거합니다.

Python의 내장 데이터 유형 외에도 Jython은 다음을 가져 와서 Java 컬렉션 클래스를 사용하는 이점이 있습니다. java.util package. 다음 코드는 아래에 주어진 클래스를 설명합니다-

  • add ()를 사용하는 Java ArrayList 객체
  • 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 클래스

자이 썬은 또한 Jarray Object, Python에서 Java 배열을 구성 할 수 있습니다. jarray로 작업하려면 Jython에서 시퀀스 유형을 정의하고 시퀀스에 포함 된 객체 유형과 함께 jarrayobject에 전달하면됩니다. jarray 내의 모든 값은 동일한 유형이어야합니다.

다음 표는 jarray와 함께 사용되는 문자 유형 코드를 보여줍니다.

문자 유형 코드 해당 Java 유형
부울
바이트
H 짧은
나는 int
에프 흙손
더블

다음 예제는 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정수의 튜플로 정의됩니다. Jarray arr1로 변환됩니다. 두 번째 예는 Jarray arr2가mySttr string순서. 위 스크립트의 출력jarray.py 다음과 같습니다-

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

의사 결정 구조에는 조건이 참인 경우 실행될 명령문과 함께 프로그램이 평가하거나 테스트 할 하나 이상의 조건이 있으며, 조건이 충족되는 경우 실행될 다른 명령문이 선택적으로 포함됩니다. 거짓으로 결정됩니다.

다음 그림은 대부분의 프로그래밍 언어에서 발견되는 일반적인 의사 결정 구조의 일반적인 형태를 보여줍니다.

Jython은 조건이 참 또는 거짓 일 때 실행될 명령문 블록을 나타 내기 위해 중괄호를 사용하지 않습니다 (Java의 경우). 대신 균일 한 들여 쓰기 (왼쪽 여백의 공백)가 문 블록을 형성하는 데 사용됩니다. 이렇게 균일하게 들여 쓰기 된 블록은 'if'문에 주어진 조건이 참일 때 조건 코드가 실행되도록합니다.

선택적 'else'문 뒤에 유사한 블록이있을 수 있습니다. 자이 썬은 또한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

일반적으로 프로그램의 명령문은 순차적으로 실행됩니다. 함수의 첫 번째 명령문이 먼저 실행되고 두 번째 명령문이 실행되는 방식입니다. 코드 블록을 여러 번 실행해야하는 상황이있을 수 있습니다. 이러한 반복 기능을 제공하는 문을 호출합니다.looping statements.

자이 썬에서 루프는 두 개의 문장으로 형성 될 수 있습니다.

  • 그만큼 while 진술 및

  • 그만큼 for 성명서

WHILE 루프

Jython의 while 루프 문은 Java의 문과 유사합니다. 주어진 조건이 참인 한 반복적으로 문장 블록을 실행합니다. 다음 순서도는while 고리.

while 문의 일반 구문은 다음과 같습니다.

while expression:
   statement(s)

다음 Jython 코드는 while 루프를 사용하여 변수 값이 0 미만이 될 때까지 반복적으로 증가하고 인쇄합니다.

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 문을 사용하여 List 또는 Tuple의 각 항목뿐만 아니라 문자열의 각 문자를 표시 할 수 있습니다.

#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

자이 썬에서 for문은 range () 함수에 의해 생성 된 숫자 목록을 반복하는데도 사용됩니다. range () 함수는 다음과 같은 형식을 취합니다.

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

시작 및 단계 매개 변수는 기본적으로 0과 1입니다. 생성 된 마지막 숫자는 중지 단계입니다. FOR 문은range() function. 예를 들면-

for num in range(5):
   print num

다음 출력을 생성합니다-

0
1
2
3
4

복잡한 프로그래밍 논리는 함수라고하는 하나 이상의 독립적이고 재사용 가능한 문 블록으로 나뉩니다. Python의 표준 라이브러리에는 많은 내장 함수가 포함되어 있습니다. 또한 다음을 사용하여 자신의 기능을 정의 할 수 있습니다.def예어. 함수의 사용자 정의 이름 뒤에는 return 문으로 끝나는 본문을 형성하는 문 블록이옵니다.

일단 정의되면 모든 환경에서 여러 번 호출 할 수 있습니다. 요점을 명확히하기 위해 다음 코드를 고려해 보겠습니다.

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

#calling the function
SayHello()

호출 환경에서 하나 이상의 매개 변수 / 인수를 수신하도록 함수를 설계 할 수 있습니다. 이러한 매개 변수화 된 함수를 호출하는 동안 함수 정의에 사용 된 유사한 데이터 유형으로 동일한 수의 매개 변수를 제공해야합니다. 그렇지 않으면 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

모듈은 하나 이상의 관련 함수, 클래스 또는 변수가 정의 된 Jython 스크립트입니다. 이것은 Jython 코드의 논리적 구성을 허용합니다. 모듈에 정의 된 Program 요소는 모듈 또는 특정 요소 (함수 / 클래스)를 가져 와서 다른 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")

함수를 호출하는 동안 모듈 이름을 접두사로 붙일 필요가 없습니다.

하나 이상의 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 파일을 Java CLASSPATH 환경 변수에 포함합니다.

이 라이브러리에는 PythonInterpreter수업. 이 클래스의 객체를 사용하면 모든 Python 스크립트를execfile()방법. PythonInterpreter를 사용하면 다음을 사용할 수 있습니다.PyObjects직접. Jython 런타임 시스템에 알려진 모든 객체는 PyObject 클래스의 인스턴스 또는 해당 하위 클래스 중 하나로 표시됩니다.

PythonInterpreter 클래스에는 정기적으로 사용되는 몇 가지 메서드가 있으며 아래 표에 설명되어 있습니다.

Sr. 아니. 방법 및 설명
1

setIn(PyObject)

표준 입력 스트림에 사용할 Python 개체 설정

2

setIn(java.io.Reader)

표준 입력 스트림에 사용할 java.io.Reader 설정

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에서 프로젝트 개발을 지원하는 Eclipse IDE 용 오픈 소스 플러그인입니다. 그것은에서 호스팅됩니다https://pydev.org. Eclipse IDE에 PyDev 플러그인을 설치하는 단계별 절차는 다음과 같습니다.

Step 1 − Eclipse IDE를 열고 Install New Software 도움말 메뉴에서 옵션.

Step 2 − 입력 http://pydev.org/updates레이블 작업 앞의 텍스트 상자에 추가를 클릭합니다. 목록에서 사용 가능한 모든 항목을 선택하고 다음을 클릭하십시오. 마법사가 설치를 완료하는 데 몇 분 정도 걸리며 IDE를 다시 시작하라는 메시지가 표시됩니다.

Step 3− 이제 창 메뉴에서 기본 설정 옵션을 선택합니다. 아래와 같이 환경 설정 대화 상자가 열립니다.

Step 4− Interpreters 노드를 확장하고 왼쪽 창에서 Jython Interpreter를 선택합니다. 오른쪽 창에서 새로 만들기를 클릭하여jython.jar file.

이제 Eclipse를 사용하여 Jython 프로젝트를 시작할 준비가되었습니다.

Eclipse에서 프로젝트를 만들려면 아래 단계를 따라야합니다.

Step 1− 파일 선택? 새로운? 계획. 고르다PyDev필터 대화 상자에서. 프로젝트 이름, 프로젝트 유형을 제공하고 완료를 클릭하십시오.

Step 2− 이제 Hello 프로젝트가 왼쪽의 프로젝트 탐색기에 나타납니다. hello.py를 추가하려면 마우스 오른쪽 버튼을 클릭하십시오.

Step 3− 빈 hello.py가 편집기에 나타납니다. 자이 썬 코드를 작성하고 저장합니다.

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의 자이 썬 프로젝트

다시 시작되면 파일 / 새로 만들기를 선택하여 새 프로젝트를 시작합니다. 이제 카테고리 목록에서 Python 카테고리를 사용할 수 있습니다. 계속하려면 선택하세요.

시스템에 Python이 설치되어있는 경우 해당 버전 / 버전이 자동으로 감지되어 Python 플랫폼 드롭 다운 목록에 표시됩니다. 그러나 Jython은 나열되지 않습니다. 추가하려면 관리 버튼을 클릭하십시오.

'새로 만들기'버튼을 클릭하여 플랫폼 이름과 경로를 Jython 실행 파일에 추가합니다.

이제 플랫폼 목록에서 Jython을 사용할 수 있습니다. 다음 스크린 샷과 같이 드롭 다운 목록에서 선택합니다.

이제 다음 창에서 프로젝트 이름, 위치 및 기본 파일을 채울 수 있습니다.

프로젝트 구조는 NetBeans IDE의 프로젝트 창에 표시되고 편집기 창에는 템플릿 Python 코드가 표시됩니다.

NetBeans IDE의 출력 창에서 다음 결과를 얻으려면 Jython 프로젝트를 빌드하고 실행하십시오.

Java 서블릿은 가장 널리 사용되는 웹 개발 기술입니다. 자이 썬을 사용하여 서블릿을 작성할 수 있으며, 이제 Python 언어 기능도 사용할 수 있기 때문에 Java가 제공하는 것보다 더 많은 이점이 추가됩니다.

NetBeans IDE를 사용하여 Jython 서블릿으로 Java 웹 애플리케이션을 개발합니다. 확인하십시오nbPython pluginNetBeans 설치에 설치됩니다. 다음 경로를 선택하여 웹 애플리케이션을 빌드하는 새 프로젝트를 시작하십시오.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 서블릿은 PyServlet이라고도하는 중간 Java 서블릿을 통해 작동합니다. 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 코드를 이전 ServletTest.java와 동일한 JythonServlet.py로 프로젝트 폴더 내의 WEB-INF 폴더에 배치하십시오.

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 Servlet 출력의 경우와 같이 <h1> 태그에서.

자이 썬은 zxJDBC packageJDBC를 중심으로 사용하기 쉬운 Python 래퍼를 제공합니다. zxJDBC는 두 가지 표준을 연결합니다.JDBC Java에서 데이터베이스 액세스를위한 표준 플랫폼입니다. DBI Python 앱용 표준 데이터베이스 API입니다.

ZxJDBC는 JDBC에 대한 DBI 2.0 표준 호환 인터페이스를 제공합니다. 200 개 이상의 드라이버가 JDBC 용으로 제공되며 모두 zxJDBC에서 작동합니다. 다음을 포함한 모든 주요 관계형 데이터베이스에서 고성능 드라이버를 사용할 수 있습니다.

  • DB2
  • Derby
  • MySQL
  • Oracle
  • PostgreSQL
  • SQLite
  • SQL Server 및
  • Sybase.

ZxJDBC 패키지는 다음에서 다운로드 할 수 있습니다. https://sourceforge.net/projects/zxjdbc/ 또는 http://www.ziclix.com/zxjdbc/. 다운로드 한 아카이브에는 CLASSPATH 환경 변수에 추가해야하는 ZxJDBC.jar이 포함되어 있습니다.

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
점수 Int

거기에 몇 가지 레코드를 추가하십시오.

이름 나이 점수
라비 21 78
Ashok 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의 주요 기능 중 하나는 JDK에서 Swing GUI 라이브러리를 사용하는 기능입니다. 표준 Python 배포 (종종 CPython이라고 함)에는Tkinter GUI library함께 배송됩니다. 같은 다른 GUI 라이브러리PyQtWxPython 그것과 함께 사용할 수도 있지만 스윙 라이브러리는 플랫폼 독립적 인 GUI 툴킷을 제공합니다.

Jython에서 스윙 라이브러리를 사용하는 것은 Java에서 사용하는 것보다 훨씬 쉽습니다. Java에서는 익명 클래스를 사용하여 이벤트 바인딩을 만들어야합니다. 자이 썬에서 우리는 단순히 같은 목적으로 함수를 전달할 수 있습니다.

기본 최상위 창은 다음 개체를 선언하여 생성됩니다. JFrame classvisible 속성을 true로 설정합니다. 이를 위해 스윙 패키지에서 Jframe 클래스를 가져와야합니다.

from javax.swing import JFrame

JFrame 클래스에는 인수 수가 다양한 여러 생성자가 있습니다. 문자열을 인수로 취하고 제목으로 설정하는 하나를 사용합니다.

frame = JFrame(“Hello”)

visible 속성을 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의 패키지. 주요 컨테이너 클래스,JFrameJDialogAWT 라이브러리에있는 Frame 및 Dialog 클래스에서 각각 파생됩니다. 다음과 같은 다른 GUI 컨트롤JLabel, JButton, JTextField, 등은 JComponent 클래스에서 파생됩니다.

다음 그림은 스윙 패키지 클래스 계층 구조를 보여줍니다.

다음 표는 스윙 라이브러리의 다양한 GUI 제어 클래스를 요약 한 것입니다.

Sr. 아니. 클래스 및 설명
1

JLabel

JLabel 객체는 컨테이너에 텍스트를 배치하기위한 구성 요소입니다.

2

JButton

이 클래스는 레이블이 지정된 버튼을 만듭니다.

JColorChooser

JColorChooser는 사용자가 색상을 조작하고 선택할 수 있도록 설계된 컨트롤 창을 제공합니다.

4

JCheckBox

JCheckBox는 다음 중 하나에있을 수있는 그래픽 구성 요소입니다. on (true) 또는 off (거짓) 상태.

5

JRadioButton

JRadioButton 클래스는 on (true) 또는 off (false) 상태 일 수있는 그래픽 구성 요소입니다. 그룹에서.

6

JList

JList 구성 요소는 사용자에게 텍스트 항목의 스크롤 목록을 제공합니다.

7

JComboBox

JComboBox 구성 요소는 사용자에게 항목 드롭 다운 목록을 제공합니다.

8

JTextField

JTextField 객체는 한 줄의 텍스트를 편집 할 수있는 텍스트 구성 요소입니다.

9

JPasswordField

JPasswordField 객체는 암호 입력에 특화된 텍스트 구성 요소입니다.

10

JTextArea

JTextArea 객체는 여러 줄의 텍스트를 편집 할 수있는 텍스트 구성 요소입니다.

11

ImageIcon

ImageIcon 컨트롤은 이미지에서 아이콘을 그리는 아이콘 인터페이스의 구현입니다.

12

JScrollbar

Scrollbar 컨트롤은 사용자가 값 범위에서 선택할 수 있도록 스크롤 막대 구성 요소를 나타냅니다.

13

JOptionPane

JOptionPane은 사용자에게 값을 입력하거나 무언가를 알려주는 표준 대화 상자 세트를 제공합니다.

14

JFileChooser

JFileChooser 컨트롤은 사용자가 파일을 선택할 수있는 대화 창을 나타냅니다.

15

JProgressBar

작업이 완료 될 때까지 진행하면 진행률 표시 줄에 작업의 완료율이 표시됩니다.

16

JSlider

JSlider를 사용하면 제한된 간격 내에서 노브를 밀어 값을 그래픽으로 선택할 수 있습니다.

17

JSpinner

JSpinner는 사용자가 순서가 지정된 시퀀스에서 숫자 또는 개체 값을 선택할 수있는 한 줄 입력 필드입니다.

다음 예제에서 이러한 컨트롤 중 일부를 사용합니다.

Java의 레이아웃 관리자는 다음과 같은 컨테이너 개체의 컨트롤 배치를 관리하는 클래스입니다. Frame, Dialog 또는 Panel. 레이아웃 관리자는 해상도가 변경되거나 프레임 자체의 크기가 조정 되더라도 프레임에서 컨트롤의 상대적 위치를 유지합니다.

이 클래스는 Layout interface. 다음 레이아웃 관리자는AWT library

  • BorderLayout
  • FlowLayout
  • GridLayout
  • CardLayout
  • GridBagLayout

다음 레이아웃 관리자는 Swing library

  • BoxLayout
  • GroupLayout
  • ScrollPaneLayout
  • SpringLayout

다음 예제에서는 AWT 레이아웃 관리자와 스윙 레이아웃 관리자를 사용할 것입니다.

  • 절대 레이아웃
  • 흐름 레이아웃
  • 그리드 레이아웃
  • 테두리 레이아웃
  • 상자 레이아웃
  • 그룹 레이아웃

이제 각각에 대해 자세히 설명하겠습니다.

절대 레이아웃

위의 레이아웃 관리자를 모두 살펴보기 전에 컨테이너에서 컨트롤의 절대 위치를 확인해야합니다. 프레임 개체의 레이아웃 방식을 'None'으로 설정해야합니다.

frame.setLayout(None)

그런 다음 setBounds()방법. x 위치, y 위치, 너비 및 높이의 네 가지 인수가 필요합니다.

예를 들어-버튼 개체를 절대 위치에 절대 크기로 배치합니다.

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

마찬가지로 모든 컨트롤은 위치와 크기를 적절하게 할당하여 배치 할 수 있습니다. 이 레이아웃은 비교적 사용하기 쉽지만 창 크기를 조정하거나 화면 해상도가 변경 될 때 프로그램이 실행될 때 모양이 유지되지 않습니다.

다음 Jython 스크립트에서 세 개의 Jlabel 객체는 각각 "phy", "maths"및 "Total"텍스트를 표시하는 데 사용됩니다. 이 세 개의 JTextField 객체 앞에 배치됩니다. Button 개체는 "Total"레이블 위에 배치됩니다.

먼저 레이아웃이 없음으로 설정된 JFrame 창이 생성됩니다.

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)

위 코드의 출력은 다음과 같습니다.

자이 썬 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)

자이 썬 GridLayout

Gridlayout 관리자를 사용하면 직사각형 그리드에 컨트롤을 배치 할 수 있습니다. 그리드의 각 셀에 하나의 컨트롤이 배치됩니다.

다음 예제에서 GridLayout은 4 행 4 열로 나누어 진 JFrame 객체에 적용됩니다. 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로 설정합니다. 완전한 자이 썬 코드는 다음과 같습니다.

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)

위 코드의 출력은 다음과 같습니다.

자이 썬 BorderLayout

BorderLayout 관리자는 컨테이너를 5 개의 지리적 영역과 각 영역에 하나의 구성 요소로 배치합니다. 이 영역은 다음과 같이 정의 된 상수로 표시됩니다.

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

다음 예를 살펴 보겠습니다.

자이 썬 BoxLayout

BoxLayout 클래스는 javax.swing package. 컨테이너의 구성 요소를 수직 또는 수평으로 배열하는 데 사용됩니다. 방향은 다음 상수에 의해 결정됩니다-

  • X_AXIS
  • Y_AXIS
  • LINE_AXIS
  • PAGE_AXIS

정수 상수는 컨테이너의 구성 요소가 배치되어야하는 축을 지정합니다. 컨테이너에 기본 구성 요소 방향이있는 경우 LINE_AXIS는 구성 요소가 왼쪽에서 오른쪽으로 배치되도록 지정하고 PAGE_AXIS는 구성 요소가 위에서 아래로 배치되도록 지정합니다.

다음 예제에서는 JFrame 객체에 패널 (JPanel 클래스)이 추가됩니다. 수직 BoxLayout이 적용되고 두 개의 패널 (상단 및 하단)이 추가됩니다. 이 두 개의 내부 패널에는 수평 Boxlayout에 각각 추가 된 두 개의 버튼이 있습니다.

먼저 최상위 수준의 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)

이 패널에서는 두 개의 패널 상단과 하단이 추가됩니다. 각각은 두 개의 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()기능은 두 버튼 사이에 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)

위의 코드는 다음 출력을 생성합니다.

자이 썬 GroupLayout

GroupLayout 관리자는 계층 적 방식으로 구성 요소를 그룹화합니다. 그룹화는 두 개의 클래스로 이루어집니다.SequentialGroupParallelGroup, 둘 다 Java에서 그룹 인터페이스를 구현합니다.

레이아웃 절차는 두 단계로 나뉩니다. 한 단계에서 구성 요소는 수평 축을 따라 배치되고 두 번째는 수직 축을 따라 배치됩니다. 각 구성 요소는 레이아웃에서 두 번 정의되어야합니다.

배열에는 순차와 병렬의 두 가지 유형이 있습니다. 두 가지 모두 구성 요소를 순차적으로 또는 병렬로 배열 할 수 있습니다. 가로 배열에서 행을 순차 그룹이라고하고 열을 병렬 그룹이라고합니다. 반면에 병렬 배열에서 요소의 행은 병렬 그룹과 열을 순차적이라고합니다.

다음 예에서는 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 (다른 세 개의 버튼이 수직으로 추가됨)이 배치됩니다.

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의 정의가 나옵니다. 세 개의 버튼으로 구성된 ParallelGroup 행을 추가 한 다음 두 개의 버튼을 수직으로 놓습니다.

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 스윙에서 이벤트를 처리하려면 컨트롤 (예 : JButton 또는 JList 등)이 해당 이벤트 리스너에 등록되어야합니다. 이벤트 리스너 인터페이스 또는 해당 어댑터 클래스는 이벤트 처리 메소드를 재정 의하여 구현하거나 서브 클래 싱해야합니다. Jython에서 이벤트 처리는 매우 간단합니다. 컨트롤에 해당하는 이벤트 핸들링 함수의 속성으로 모든 함수를 전달할 수 있습니다.

먼저 자바에서 클릭 이벤트가 어떻게 처리되는지 살펴 보자.

우선, 우리는 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를 가져올 필요가 없습니다.

둘째, ActionListener를 구현하거나 하위 클래스화할 필요가 없습니다. 대신 사용자 정의 함수는 다음 값으로 JButton 생성자에 바로 제공됩니다.actionPerformed 콩 속성.

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'에 표시를 입력하기 위해 JFrame 창에 두 개의 JTextField 개체가 제공됩니다. JButton 객체는 클릭하면 add () 함수를 실행합니다.

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

add () 함수는 getText () 메서드로 두 텍스트 필드의 내용을 읽고 정수로 구문 분석하므로 더하기를 수행 할 수 있습니다. 결과는 setText () 메소드에 의해 세 번째 텍스트 필드에 입력됩니다.

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 '버튼을 클릭합니다. 그에 따라 결과가 표시됩니다.

Jython JRadioButton 이벤트

JRadioButton 클래스는 javax.swing package. 켜짐 또는 꺼짐 상태로 선택 가능한 토글 버튼을 만듭니다. ButtonGroup에 여러 라디오 버튼이 추가 된 경우 해당 선택은 상호 배타적입니다.

다음 예제에서는 JRadioButton 클래스의 두 개체와 두 개의 JLabels가 세로 BoxLayout의 Jpanel 컨테이너에 추가됩니다. JRadioButton 객체의 생성자에서OnCheck()function은 actionPerformed 속성의 값으로 설정됩니다. 이 기능은 라디오 버튼을 클릭하여 상태를 변경할 때 실행됩니다.

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

라디오 버튼의 기본 상태는 false (선택되지 않음)입니다. rb1 버튼은 시작 상태가 True (선택됨)로 만들어집니다.

두 개의 라디오 버튼이 라디오 ButtonGroup에 추가되어 상호 배타적으로 만들므로 하나를 선택하면 다른 하나는 자동으로 선택 취소됩니다.

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

두 개의 레이블과 함께이 두 개의 라디오 버튼은 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)

이 패널은 마지막에 visible 속성이 'True'로 설정된 최상위 JFrame 개체에 추가됩니다.

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 스크립트를 실행하고 라디오 버튼 선택을 변경합니다. 선택 항목은 하단의 라벨에 표시됩니다.

자이 썬 JCheckBox 이벤트

처럼 JRadioButton, JCheckBox 객체는 캡션 옆에 직사각형 체크 박스가있는 선택 가능한 버튼이기도합니다. 이것은 일반적으로 항목 목록에서 여러 옵션을 선택할 수있는 사용자 기회를 제공하는 데 사용됩니다.

다음 예에서는 두 개의 확인란과 스윙 패키지의 레이블이 수직 BoxLayout의 JPanel에 추가됩니다. 하단의 레이블은 두 개의 확인란의 즉각적인 선택 상태를 표시합니다.

두 확인란 모두 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)

패널 자체는 visible 속성이 마지막에 true로 설정된 최상위 JFrame 창에 추가됩니다.

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

frame.setVisible(True)

위의 코드를 실행하고 확인란을 선택하여 실험 해보십시오. 두 확인란의 순간 상태가 하단에 표시됩니다.

자이 썬 JList 이벤트

스윙 패키지의 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, JMenuJMenuItem 클래스.

다음 예에서는 최상위 창에 메뉴 모음이 제공됩니다. 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()

파일 메뉴 개체가 메뉴 모음에 추가됩니다. 마지막으로 JFrame 개체의 맨 아래에 JTextField 컨트롤이 추가됩니다.

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 개의 메뉴 항목이 드롭 다운됩니다. 버튼을 클릭하면 해당 이름이 텍스트 상자 컨트롤에 표시됩니다.

Dialog 개체는 사용자가 상호 작용하는 기본 창 위에 표시되는 창입니다. 이 장에서는 스윙 라이브러리에 정의 된 미리 구성된 대화 상자를 볼 것입니다. 그들은MessageDialog, ConfirmDialogInputDialog. JOptionPane 클래스의 정적 메서드 때문에 사용할 수 있습니다.

다음 예제에서 파일 메뉴에는 위의 세 대화 상자에 해당하는 세 개의 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 창의 텍스트 상자에 표시됩니다. 확인 옵션을 선택하면 YES, NO 및 CANCEL의 세 버튼이있는 대화 상자가 나타납니다. 사용자의 선택이 텍스트 상자에 기록됩니다.

전체 코드는 다음과 같습니다.

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)

위의 스크립트가 실행되면 메뉴에 세 가지 옵션이있는 다음 창이 표시됩니다.

메세지 박스

입력 상자

대화 확인