Jython - Panduan Cepat

Jython adalah implementasi JVM dari bahasa pemrograman Python. Ini dirancang untuk berjalan di platform Java. Program Jython dapat mengimpor dan menggunakan kelas Java apa pun. Sama seperti Java, program Jython dikompilasi kebytecode. Salah satu keuntungan utamanya adalah antarmuka pengguna yang dirancang dengan Python dapat menggunakan elemen GUIAWT, Swing atau SWT Package.

Jython, yang dimulai sebagai JPython dan kemudian diganti namanya, mengikuti dengan cermat implementasi standar Python yang disebut CPython seperti yang dibuat oleh Guido Van Rossum. Jython diciptakan pada tahun 1997 olehJim Hugunin. Jython 2.0 dirilis pada tahun 1999. Sejak itu, rilis Jython 2.x sesuai dengan rilis CPython yang setara. Jython 2.7.0 dirilis pada Mei 2015, sesuai dengan CPython 2.7. Pengembangan Jython 3.x sedang berlangsung.

Perbedaan antara Python dan Java

Berikut adalah perbedaan antara Python dan Java -

  • Python adalah bahasa yang diketik secara dinamis. Oleh karena itu, deklarasi tipe variabel tidak diperlukan. Java di sisi lain adalah bahasa yang diketik secara statis, yang berarti deklarasi tipe variabel bersifat wajib dan tidak dapat diubah.

  • Python hanya memiliki pengecualian yang tidak dicentang, sedangkan Java memiliki pengecualian yang dicentang dan yang tidak dicentang.

  • Python menggunakan indentasi untuk pelingkupan, sedangkan Java menggunakan tanda kurung kurawal yang cocok.

  • Karena Python adalah bahasa berbasis interpreter, ia tidak memiliki langkah kompilasi terpisah. Namun, program Java perlu dikompilasi menjadi bytecode dan pada gilirannya dijalankan oleh JVM.

  • Python mendukung multiple inheritance, tetapi di Java, multiple inheritance tidak dimungkinkan. Namun itu memiliki implementasi antarmuka.

  • Dibandingkan dengan Java, Python memiliki struktur data built-in yang lebih kaya (list, dicts, tuple, semuanya adalah objek).

Perbedaan antara Python dan Jython

Berikut adalah perbedaan antara Python dan Jython -

  • Implementasi referensi Python, disebut CPython, ditulis dalam bahasa C. Jython di sisi lain sepenuhnya ditulis di Java dan merupakan implementasi JVM.

  • Python standar tersedia di berbagai platform. Jython tersedia untuk semua platform dengan JVM terpasang di atasnya.

  • Kode Python standar dikompilasi menjadi .pyc file, sementara program Jython mengkompilasi ke file .class mengajukan.

  • Ekstensi Python dapat ditulis dalam bahasa C. Ekstensi untuk Jython ditulis di Java.

  • Jython benar-benar multi-threaded di alam. Namun Python menggunakanGlobal Interpreter Lock (GIL) untuk tujuan tersebut.

  • Kedua implementasi tersebut memiliki mekanisme pengumpulan sampah yang berbeda.

Di bab selanjutnya, kita akan belajar cara mengimpor pustaka Java di Jython.

Sebelum instalasi Jython 2.7, pastikan bahwa sistem memiliki JDK 7atau lebih terpasang. Jython tersedia dalam bentuk file jar yang dapat dieksekusi. Unduh dari -http://www.jython.org/downloads.html dan klik dua kali pada ikonnya atau jalankan perintah berikut -

java -jar jython_installer-2.7.0.jar

Wizard penginstalan akan dimulai dengan opsi penginstalan yang harus diberikan. Berikut adalah prosedur pemasangan yang sistematis.

Langkah pertama dalam wizard meminta Anda untuk memilih bahasa.

Langkah kedua meminta Anda untuk menerima perjanjian lisensi.

Pada langkah selanjutnya, pilih jenis instalasi. Disarankan untuk memilih penginstalan standar.

Layar berikutnya meminta konfirmasi Anda tentang opsi Anda dan melanjutkan untuk menyelesaikan penginstalan.

Prosedur penginstalan mungkin memerlukan beberapa waktu untuk selesai.

Setelah penginstalan selesai, aktifkan jython.exedari direktori bin di dalam direktori tujuan. Dengan asumsi bahwa Jython dipasang diC:\jython27, jalankan perintah berikut dari baris perintah.

C:\jython27\bin\jython

Perintah Python (>>>) akan muncul, di depannya pernyataan Python atau skrip Python apa pun dapat dijalankan.

Salah satu fitur terpenting Jython adalah kemampuannya untuk mengimpor kelas Java dalam program Python. Kami dapat mengimpor paket atau kelas java apa pun di Jython, seperti yang kami lakukan di program Java. Contoh berikut menunjukkan bagaimana filejava.util paket diimpor dengan skrip Python (Jython) untuk mendeklarasikan objek dari kelas Tanggal.

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

Simpan dan jalankan kode di atas sebagai UtilDate.pydari baris perintah. Contoh tanggal dan waktu saat ini akan ditampilkan.

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

Paket berikut dari pustaka Java lebih sering diimpor dalam program Jython terutama karena pustaka Python standar tidak memiliki padanannya atau tidak sebaik itu.

  • Servlets
  • JMS
  • J2EE
  • Javadoc
  • Swing dianggap lebih unggul dari toolkit GUI lainnya

Paket Java apa pun dalam hal ini dapat diimpor dalam skrip Jython. Di sini, program java berikut disimpan dan dikompilasi dalam sebuah paket bernamafoo.

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

Ini HelloWorld.classdiimpor dalam Jython Script berikut. Metode di kelas ini dapat dipanggil dari skrip Jythonimportex.py.

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

Simpan dan jalankan skrip di atas dari baris perintah untuk mendapatkan keluaran berikut.

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

Variabel diberi nama lokasi di memori komputer. Setiap variabel dapat menampung satu bagian data di dalamnya. Tidak seperti Java, Python adalah bahasa yang diketik secara dinamis. Karenanya saat menggunakan Jython juga; Deklarasi sebelumnya dari tipe data variabel tidak dilakukan. Daripada jenis variabel yang menentukan data mana yang dapat disimpan di dalamnya, data yang menentukan jenis variabel.

Dalam contoh berikut, variabel diberi nilai integer. Dengan menggunakan fungsi type () built-in, kita dapat memverifikasi bahwa jenis variabel adalah integer. Tapi, jika variabel yang sama diberi string, fungsi type () akan string sebagai jenis variabel yang sama.

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

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

Ini menjelaskan mengapa Python disebut bahasa yang diketik secara dinamis.

Tipe data bawaan Python berikut juga dapat digunakan di Jython -

  • Number
  • String
  • List
  • Tuple
  • Dictionary

Python mengenali data numerik sebagai angka, yang mungkin berupa bilangan bulat, bilangan real dengan titik mengambang atau bilangan kompleks. Tipe data String, List dan Tuple disebut urutan.

Nomor Jython

Dalam Python, setiap integer bertanda dikatakan bertipe 'int'. Untuk mengekspresikan bilangan bulat panjang, huruf 'L' dilampirkan padanya. Angka dengan titik desimal yang memisahkan bagian bilangan bulat dari komponen pecahan disebut 'float'. Bagian pecahan mungkin mengandung eksponen yang dinyatakan dalam notasi ilmiah menggunakan 'E' atau 'e'.

Bilangan kompleks juga didefinisikan sebagai tipe data numerik dengan Python. Bilangan kompleks berisi bagian nyata (bilangan floating-point) dan bagian imajiner yang memiliki 'j' yang melekat padanya.

Untuk mengekspresikan angka dalam representasi Oktal atau Heksadesimal, 0O atau 0Xdiawali untuk itu. Blok kode berikut memberikan contoh representasi angka yang berbeda dengan 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

String Jython

String adalah urutan karakter apa pun yang diapit oleh tanda kutip tunggal (misalnya 'halo'), ganda (misalnya "halo") atau tiga (misalnya, '"halo'" o "" "halo" ""). Kutipan rangkap tiga sangat berguna jika konten string mencakup lebih dari beberapa baris.

Karakter urutan Escape dapat dimasukkan kata demi kata dalam string kutip tiga. Contoh berikut menunjukkan cara berbeda untuk mendeklarasikan string dengan 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.
"""

String ketiga saat dicetak, akan memberikan hasil sebagai berikut.

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.

Daftar Jython

Daftar adalah tipe data urutan. Ini adalah kumpulan item yang dipisahkan koma, tidak harus dari jenis yang sama, disimpan dalam tanda kurung siku. Item individual dari Daftar dapat diakses menggunakan indeks berbasis nol.

Blok kode berikut merangkum penggunaan List dengan 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]

Tabel berikut menjelaskan beberapa Ekspresi Jython paling umum yang terkait dengan Daftar Jython.

Ekspresi Jython Deskripsi
len (Daftar) Panjangnya
Daftar [2] = 10 Pembaruan
Hapus Daftar [1] Penghapusan
List.append (20) Menambahkan
List.insert (1,15) Insersi
List.sort () Penyortiran

Jython Tuples

Tupel adalah kumpulan item data yang dipisahkan koma yang disimpan dalam tanda kurung. Tidak mungkin untuk menghapus atau memodifikasi elemen dalam tuple, juga tidak mungkin untuk menambahkan elemen ke koleksi tupel. Blok kode berikut menunjukkan operasi Tuple.

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]

Kamus Jython

Kamus Jython mirip dengan kelas Peta dalam kerangka Koleksi Java. Ini adalah kumpulan pasangan nilai kunci. Pasangan yang dipisahkan dengan koma diapit tanda kurung kurawal. Objek Dictionary tidak mengikuti indeks berbasis nol untuk mengambil elemen di dalamnya karena disimpan dengan teknik hashing.

Kunci yang sama tidak dapat muncul lebih dari sekali dalam objek kamus. Namun, lebih dari satu kunci dapat memiliki nilai terkait yang sama. Fungsi berbeda yang tersedia dengan objek Dictionary dijelaskan di bawah -

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

Tabel berikut menjelaskan beberapa Ekspresi Jython paling umum yang terkait dengan Kamus.

Ekspresi Jython Deskripsi
dict.get ('011') Cari
len (dikt) Panjangnya
dict ['044'] = 'Chennai' Menambahkan
del dict ['022'] Menghapus
dict.keys () daftar kunci
dict.values ​​() Daftar nilai
dict.clear () Menghapus semua elemen

Selain tipe data bawaan Python, Jython memiliki keuntungan menggunakan kelas koleksi Java dengan mengimpor file java.util package. Kode berikut menjelaskan kelas-kelas yang diberikan di bawah ini -

  • Objek Java ArrayList dengan add ()
  • remove()
  • get () dan set () dari kelas ArrayList.
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

Skrip Jython di atas menghasilkan output berikut -

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

Kelas Jarray

Jython juga mengimplementasikan Jarray Object, yang memungkinkan pembangunan larik Java dengan Python. Untuk bekerja dengan jarray, cukup tentukan tipe urutan di Jython dan teruskan ke objek jarray bersama dengan jenis objek yang ada di dalam urutan. Semua nilai dalam jarray harus berjenis sama.

Tabel berikut menunjukkan jenis kode karakter yang digunakan dengan jarray.

Kode Jenis Karakter Jenis Java yang Sesuai
Z Boolean
C arang
B byte
H. pendek
saya int
L panjang
F mengapung
D dua kali lipat

Contoh berikut menunjukkan konstruksi 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

Sini my_seqdidefinisikan sebagai tupel bilangan bulat. Ini diubah menjadi Jarray arr1. Contoh kedua menunjukkan bahwa Jarray arr2 dibangunmySttr stringurutan. Output dari skrip di atasjarray.py adalah sebagai berikut -

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

Struktur pengambilan keputusan memiliki satu atau lebih kondisi untuk dievaluasi atau diuji oleh program, bersama dengan pernyataan atau pernyataan yang akan dieksekusi, jika kondisi ditentukan benar, dan secara opsional, pernyataan lain untuk dieksekusi, jika kondisinya ditentukan sebagai salah.

Ilustrasi berikut menunjukkan bentuk umum dari struktur pengambilan keputusan tipikal yang ditemukan di sebagian besar bahasa pemrograman -

Jython tidak menggunakan tanda kurung kurawal untuk menunjukkan blok pernyataan yang akan dieksekusi ketika kondisinya benar atau salah (seperti yang terjadi di Jawa). Sebaliknya, indentasi seragam (spasi dari margin kiri) digunakan untuk membentuk blok pernyataan. Blok dengan indentasi yang seragam membuat kode kondisional dijalankan ketika kondisi yang diberikan dalam pernyataan 'if' adalah benar.

Blok serupa mungkin ada setelah pernyataan 'lain' opsional. Jython juga menyediakan fileelif statementmenggunakan kondisi berurutan yang dapat diuji. Di sinielse clauseakan muncul terakhir dan akan dijalankan hanya jika semua kondisi sebelumnya gagal. Sintaks umum penggunaanif..elif..else adalah sebagai berikut.

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

Dalam contoh berikut, jika ..elif ..else konstruk digunakan untuk menghitung diskon pada nilai yang berbeda dari jumlah yang dimasukkan oleh pengguna.

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

Output dari kode di atas akan seperti gambar di bawah ini.

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

Secara umum, pernyataan dalam program dieksekusi secara berurutan: Pernyataan pertama dalam suatu fungsi dijalankan pertama, diikuti oleh yang kedua, dan seterusnya. Mungkin ada situasi ketika Anda perlu mengeksekusi blok kode beberapa kali. Pernyataan yang menyediakan kemampuan pengulangan seperti itu disebutlooping statements.

Di Jython, sebuah loop dapat dibentuk oleh dua pernyataan, yaitu -

  • Itu while pernyataan dan

  • Itu for pernyataan

Loop WHILE

Pernyataan while loop di Jython mirip dengan yang ada di Java. Ini berulang kali mengeksekusi blok pernyataan selama kondisi yang diberikan benar. Diagram alir berikut menjelaskan perilaku awhile lingkaran.

Sintaks umum pernyataan while diberikan di bawah ini.

while expression:
   statement(s)

Kode Jython berikut menggunakan while loop untuk menambah dan mencetak nilai variabel berulang kali hingga nilainya kurang dari nol.

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

Output - Outputnya adalah sebagai berikut.

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

Loop FOR

Loop FOR di Jython bukanlah loop yang dihitung seperti di Java. Sebaliknya, ia memiliki kemampuan untuk melintasi elemen dalam tipe data urutan seperti string, list atau tuple. Sintaks umum dari pernyataan FOR di Jython adalah seperti yang ditunjukkan di bawah ini -

for iterating_var in sequence:
   statements(s)

Kita dapat menampilkan setiap karakter dalam string, serta setiap item dalam List atau Tuple dengan menggunakan pernyataan FOR seperti yang ditunjukkan di bawah ini -

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

Output - Outputnya adalah sebagai berikut.

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

Mari kita pertimbangkan contoh lain sebagai berikut.

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

Output - Outputnya adalah sebagai berikut.

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

Berikut contoh lain untuk dipertimbangkan.

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

Output - Output dari program di atas adalah sebagai berikut.

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

Di Jython, file forpernyataan juga digunakan untuk mengulangi daftar angka yang dihasilkan oleh fungsi range (). Fungsi range () mengambil bentuk berikut -

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

Parameter awal dan langkah adalah 0 dan 1 secara default. Angka terakhir yang dihasilkan adalah langkah berhenti. Pernyataan FOR melintasi daftar yang dibentuk olehrange() function. Misalnya -

for num in range(5):
   print num

Ini menghasilkan output berikut -

0
1
2
3
4

Logika pemrograman yang kompleks dipecah menjadi satu atau beberapa blok pernyataan yang independen dan dapat digunakan kembali yang disebut fungsi. Pustaka standar Python berisi sejumlah besar fungsi bawaan. Seseorang juga dapat menentukan fungsinya sendiri menggunakandefkata kunci. Nama fungsi yang ditentukan pengguna diikuti oleh blok pernyataan yang membentuk tubuhnya, yang diakhiri dengan pernyataan return.

Setelah ditentukan, itu dapat dipanggil dari lingkungan mana pun beberapa kali. Mari kita pertimbangkan kode berikut untuk memperjelas maksudnya.

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

#calling the function
SayHello()

Sebuah fungsi dapat dirancang untuk menerima satu atau lebih parameter / argumen dari lingkungan pemanggil. Saat memanggil fungsi berparameter seperti itu, Anda perlu memberikan jumlah parameter yang sama dengan tipe data serupa yang digunakan dalam definisi fungsi, jika tidak, juru bahasa Jython melemparTypeError pengecualian.

Contoh

#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)

Itu output akan menjadi sebagai berikut -

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

Setelah melakukan langkah-langkah yang ditentukan di dalamnya, fungsi yang dipanggil kembali ke lingkungan panggilan. Itu bisa mengembalikan data, jika ekspresi disebutkan di depan kata kunci return di dalam definisi fungsi.

#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

Output berikut diperoleh jika skrip di atas dijalankan dari prompt Jython.

area = 200
value returned by function : 200

Modul adalah skrip Jython di mana satu atau lebih fungsi, kelas, atau variabel terkait ditentukan. Ini memungkinkan organisasi logis dari kode Jython. Elemen Program yang didefinisikan dalam modul dapat digunakan dalam skrip Jython lain dengan mengimpor modul atau elemen tertentu (fungsi / kelas) darinya.

Dalam kode berikut (hello.py) sebuah fungsi SayHello() didefinisikan.

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

Untuk menggunakan fungsi SayHello () dari skrip lain, impor hello.py module di dalamnya.

import hello
hello.SayHello("TutorialsPoint")

Namun, ini akan mengimpor semua fungsi yang ditentukan dalam modul. Untuk mengimpor fungsi tertentu dari modul, gunakan sintaks berikut.

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

Misalnya, untuk mengimpor hanya fungsi SayHello (), ubah skrip di atas sebagai berikut.

from hello import SayHello
SayHello("TutorialsPoint")

Tidak perlu mengawali nama modul saat memanggil fungsi.

Folder apapun yang berisi satu atau lebih modul Jython dikenali sebagai sebuah paket. Namun, itu harus memiliki file khusus bernama__init__.py, yang menyediakan indeks fungsi yang akan digunakan.

Sekarang mari kita mengerti, bagaimana membuat dan mengimpor paket.

Step 1 - Buat folder bernama package1, lalu buat dan simpan berikut ini g modul di dalamnya.

#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 - Dalam folder package1 buat dan simpan file __init__.py file dengan konten berikut.

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

Step 3 - Buat skrip Jython berikut di luar folder package1 sebagai 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- Jalankan test.py dari prompt Jython. Output berikut akan diperoleh.

factorial = 120
addition = 30
multiplication = 200

Unduh jython-standalone-2.7.0.jar - Untuk menanamkan Jython di aplikasi Java dari halaman unduhan resmi mereka: http://www.jython.org/downloads.html dan sertakan file jar ini di variabel lingkungan Java CLASSPATH.

Perpustakaan ini berisi PythonInterpreterkelas. Menggunakan objek kelas ini, skrip Python apa pun dapat dieksekusi menggunakanexecfile()metode. PythonInterpreter memungkinkan Anda untuk memanfaatkanPyObjectslangsung. Semua objek yang diketahui sistem runtime Jython diwakili oleh instance kelas PyObject atau salah satu subkelasnya.

Kelas PythonInterpreter memiliki beberapa metode yang biasa digunakan, yang dijelaskan dalam tabel di bawah ini.

Sr.No. Metode & Deskripsi
1

setIn(PyObject)

Setel objek Python yang akan digunakan untuk aliran input standar

2

setIn(java.io.Reader)

Setel java.io.Reader yang akan digunakan untuk aliran input standar

3

setIn(java.io.InputStream)

Setel java.io.InputStream yang akan digunakan untuk aliran input standar

4

setOut(PyObject)

Setel objek Python yang akan digunakan untuk aliran keluaran standar

5

setOut(java.io.Writer)

Setel java.io.Writer yang akan digunakan untuk aliran keluaran standar

6

setOut(java,io.OutputStream)

Setel java.io.OutputStream yang akan digunakan untuk aliran keluaran standar

7

setErr(PyObject)

Setel objek kesalahan Python yang akan digunakan untuk aliran kesalahan standar

8

setErr(java.io.Writer

Setel java.io.Writer yang akan digunakan untuk aliran kesalahan standar

9

setErr(java.io.OutputStream)

Setel java.io.OutputStream yang akan digunakan untuk aliran kesalahan standar

10

eval(String)

Evaluasi string sebagai sumber Python dan kembalikan hasilnya

11

eval(PyObject)

Evaluasi objek kode Python dan kembalikan hasilnya

12

exec(String)

Jalankan string sumber Python di namespace lokal

13

exec(PyObject)

Jalankan objek kode Python di namespace lokal

14

execfile(String filename)

Jalankan file sumber Python di namespace lokal

15

execfile(java.io.InputStream)

Jalankan aliran input sumber Python di namespace lokal

16

compile(String)

Kompilasi string sumber Python sebagai ekspresi atau modul

17

compile(script, filename)

Kompilasi skrip sumber Python sebagai ekspresi atau modul

18

set(String name, Object value)

Tetapkan variabel tipe Objek di namespace lokal

19

set(String name, PyObject value)

Tetapkan variabel jenis PyObject di namespace lokal

20

get(String)

Dapatkan nilai variabel di namespace lokal

21

get(String name, Class javaclass

Dapatkan nilai variabel di namespace lokal. Nilai akan dikembalikan sebagai turunan dari kelas Java yang diberikan.

Blok kode berikut adalah program Java yang memiliki skrip Jython tertanam “hello.py”.usingexecfile()metode objek PythonInterpreter. Ini juga menunjukkan bagaimana variabel Python dapat disetel atau dibaca menggunakan metode set () dan get ().

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 ");
   }
}

Kompilasi dan jalankan program Java di atas untuk mendapatkan keluaran berikut.

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

PyDev adalah plugin open source untuk Eclipse IDE untuk memungkinkan pengembangan proyek dengan Python, Jython serta IronPython. Ini dihosting dihttps://pydev.org. Prosedur langkah demi langkah untuk menginstal plugin PyDev di Eclipse IDE diberikan di bawah ini.

Step 1 - Buka Eclipse IDE dan pilih file Install New Software opsi dari menu Bantuan.

Step 2 - Masuk http://pydev.org/updatesdi kotak teks di depan pekerjaan dengan label dan klik tambahkan. Pilih semua entri yang tersedia dalam daftar dan klik Berikutnya. Wizard akan membutuhkan waktu beberapa menit untuk menyelesaikan penginstalan dan akan meminta IDE untuk dimulai ulang.

Step 3- Sekarang pilih opsi preferensi dari menu Jendela. Dialog Preferensi akan terbuka seperti yang ditunjukkan di bawah ini.

Step 4- Perluas node Interpreters dan pilih Jython Interpreter di panel kiri. Di panel kanan, klik baru untuk memberikan jalur kejython.jar file.

Kami sekarang siap untuk memulai proyek Jython menggunakan Eclipse.

Untuk membuat proyek dalam gerhana, kita harus mengikuti langkah-langkah yang diberikan di bawah ini.

Step 1- Pilih File? Baru? Proyek. MemilihPyDevdari dialog filter. Beri nama proyek, jenis proyek dan klik Selesai.

Step 2- Proyek Hello sekarang akan muncul di penjelajah proyek di sebelah kiri. Klik kanan untuk menambahkan hello.py di dalamnya.

Step 3- Hello.py kosong akan muncul di editor. Tulis kode Jython dan simpan.

Step 4- Klik tombol Jalankan di bilah menu. Outputnya akan muncul di jendela konsol seperti yang ditunjukkan di bawah ini.

Dukungan Python dan Jython untuk NetBeans tersedia melalui nbPython plugin. Unduh plugin dari URL berikut -http://plugins.netbeans.org/plugin/56795. Buka zip arsip yang diunduh di beberapa folder. Sebagai contoh -d:\nbplugin. Untuk menginstal Plugin NetBeans, mari kita ikuti langkah-langkah yang diberikan di bawah ini.

Step 1 - Mulai Netbeans IDEdan kemudian pergi ke Tools / Plugin untuk membuka Manajer Plugin. Pilih tab 'Downloaded' dan telusuri folder tempat file yang didownload telah dibuka ritsletingnya. Jendela NetBeans akan muncul seperti yang ditunjukkan di bawah ini.

Step 2 - Langkah selanjutnya adalah memilih semua file .nbm file dan klik buka.

Step 3 - Klik pada tombol Instal.

Step 4 - Terima perjanjian lisensi berikut untuk melanjutkan.

Abaikan peringatan tentang sumber plugin yang tidak tepercaya dan mulai ulang IDE untuk melanjutkan.

Proyek Jython di NetBeans

Setelah dimulai ulang, mulailah proyek baru dengan memilih File / New. Kategori Python sekarang akan tersedia di daftar kategori. Pilih untuk melanjutkan.

Jika sistem telah menginstal Python, versi / versinya akan secara otomatis terdeteksi dan ditampilkan dalam daftar dropdown platform Python. Namun, Jython tidak akan terdaftar. Klik pada tombol Kelola untuk menambahkannya.

Klik pada tombol 'New' untuk menambahkan nama platform dan path ke Jython yang dapat dieksekusi.

Jython sekarang akan tersedia di daftar platform. Pilih dari daftar dropdown seperti yang ditunjukkan pada tangkapan layar berikut.

Sekarang kita dapat mengisi nama proyek, lokasi dan file utama di jendela berikutnya.

Struktur proyek akan muncul di jendela proyek dari NetBeans IDE dan template kode Python di jendela editor.

Bangun dan jalankan proyek Jython untuk mendapatkan hasil berikut di jendela keluaran NetBeans IDE.

Servlet Java adalah teknik pengembangan web yang paling banyak digunakan. Kita dapat menggunakan Jython untuk menulis servlet dan ini menambah lebih banyak keuntungan di luar apa yang ditawarkan Java karena sekarang kita dapat menggunakan fitur bahasa Python juga.

Kami akan menggunakan NetBeans IDE untuk mengembangkan aplikasi web Java dengan servlet Jython. Pastikan filenbPython plugindiinstal di instalasi NetBeans. Mulai proyek baru untuk membangun aplikasi web dengan memilih jalur berikut -File → New Project → Java web → New Web Application.

Berikan nama dan lokasi Proyek. IDE akan membuat struktur folder proyek. Tambahkan file servlet Java (ServletTest.java) di bawah node paket sumber di jendela Projects. Ini akan menambahservlet-api.jardi folder lib proyek. Selain itu, biarkan IDE membuat web.xmldescriptor file. Tambahkan kode berikut diServletTest.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>"
      );
   }
}

File web.xml yang dibuat oleh NetBeans akan seperti yang ditunjukkan di bawah ini -

<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>

Bangun dan jalankan proyek untuk mendapatkan teks Servlet Testmuncul di tag <h1> di jendela browser. Jadi, kami telah menambahkan servlet Java biasa dalam aplikasi.

Sekarang, kita akan menambahkan Jython Servlet. Servlet Jython bekerja melalui servlet Java perantara yang juga dikenal sebagai PyServlet. PyServlet.class ada dijython standalone.jar. Tambahkan diWEB-INF/lib map.

Langkah selanjutnya adalah mengkonfigurasi web.xml untuk menjalankan PyServlet, setiap kali ada permintaan *.py filedibesarkan. Ini harus dilakukan dengan menambahkan kode xml berikut di dalamnya.

<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>

Kode web.xml lengkap akan terlihat seperti yang ditunjukkan di bawah ini.

<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>

Tempatkan kode Jython berikut di folder WEB-INF di dalam folder proyek sebagai JythonServlet.py, yang setara dengan ServletTest.java sebelumnya.

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>"
      )

Bangun proyek dan di browser buka URL berikut -

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

Browser akan menampilkan Servlet Test dalam tag <h1> seperti pada keluaran Java Servlet.

Jython menggunakan zxJDBC packageyang menyediakan pembungkus Python yang mudah digunakan di sekitar JDBC. zxJDBC menjembatani dua standar:JDBC adalah platform standar untuk akses database di Java, dan DBI adalah API database standar untuk aplikasi Python.

ZxJDBC menyediakan antarmuka standar DBI 2.0 ke JDBC. Lebih dari 200 driver tersedia untuk JDBC dan semuanya bekerja dengan zxJDBC. Driver performa tinggi tersedia untuk semua database relasional utama, termasuk -

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

Paket ZxJDBC dapat diunduh dari https://sourceforge.net/projects/zxjdbc/ atau http://www.ziclix.com/zxjdbc/. Arsip yang diunduh berisi ZxJDBC.jar, yang harus ditambahkan ke variabel lingkungan CLASSPATH.

Kami bermaksud untuk membangun konektivitas database dengan database MySQL. Untuk tujuan ini, driver JDBC untuk MySQL diperlukan. UnduhMySQL J connector dari tautan berikut - https://dev.mysql.com/downloads/connector/j/ dan menyertakan konektor mysql java-5.1.42-bin.jar di CLASSPATH.

Masuk ke server MySQL dan buat tabel siswa di database tes dengan struktur berikut -

Bidang Tipe Lebar
Nama Varchar 10
Usia Int 3
Tanda Int 3

Tambahkan beberapa catatan di dalamnya.

Nama Usia Tanda
Ravi 21 78
Ashok 20 65
Anil 22 71

Buat skrip Jython berikut sebagai 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

Jalankan skrip di atas dari prompt Jython. Catatan dalam tabel siswa akan dicantumkan seperti yang ditunjukkan di bawah ini -

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

Ini menjelaskan prosedur membangun JDBC di Jython.

Salah satu fitur utama Jython adalah kemampuannya untuk menggunakan pustaka Swing GUI di JDK. Distribusi Python Standar (sering disebut CPython) memiliki ekstensiTkinter GUI librarydikirim dengan itu. Perpustakaan GUI lain sepertiPyQt dan WxPython juga tersedia untuk digunakan dengannya, tetapi pustaka ayunan menawarkan perangkat GUI platform independen.

Menggunakan pustaka ayunan di Jython jauh lebih mudah dibandingkan menggunakannya di Jawa. Di Java, kelas anonim harus digunakan untuk membuat pengikatan acara. Di Jython, kita cukup meneruskan fungsi untuk tujuan yang sama.

Jendela tingkat atas dasar dibuat dengan mendeklarasikan objek dari JFrame classdan setel propertinya yang terlihat ke true. Untuk itu, kelas Jframe perlu diimpor dari paket ayunan.

from javax.swing import JFrame

Kelas JFrame memiliki banyak konstruktor dengan jumlah argumen yang bervariasi. Kami akan menggunakan satu, yang mengambil string sebagai argumen dan menetapkannya sebagai judul.

frame = JFrame(“Hello”)

Setel ukuran bingkai dan properti lokasi sebelum menyetel properti terlihat ke true. Simpan kode berikut sebagaiframe.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)

Jalankan skrip di atas dari command prompt. Ini akan menampilkan output berikut yang menampilkan jendela.

Pustaka GUI ayunan disediakan dalam bentuk javax.swingpaket di Jawa. Kelas kontainer utamanya,JFrame dan JDialogmasing-masing diturunkan dari kelas Frame dan Dialog, yang ada di perpustakaan AWT. Kontrol GUI lainnya sepertiJLabel, JButton, JTextField, dll., diturunkan dari kelas JComponent.

Ilustrasi berikut memperlihatkan hierarki Kelas Paket Ayun.

Tabel berikut merangkum berbagai kelas kontrol GUI di pustaka ayunan -

Sr.No. Kelas & Deskripsi
1

JLabel

Objek JLabel adalah komponen untuk menempatkan teks dalam wadah.

2

JButton

Kelas ini membuat tombol berlabel.

3

JColorChooser

JColorChooser menyediakan panel kontrol yang dirancang untuk memungkinkan pengguna memanipulasi dan memilih warna.

4

JCheckBox

JCheckBox adalah komponen grafis yang dapat berupa file on (benar atau off (salah).

5

JRadioButton

Kelas JRadioButton adalah komponen grafis yang bisa dalam keadaan hidup (benar) atau mati (salah). dalam kelompok.

6

JList

Komponen JList menyajikan pengguna dengan daftar gulir item teks.

7

JComboBox

Komponen JComboBox menyajikan kepada pengguna daftar drop-down item

8

JTextField

Objek JTextField adalah komponen teks yang memungkinkan pengeditan satu baris teks.

9

JPasswordField

Objek JPasswordField adalah komponen teks yang dikhususkan untuk entri kata sandi.

10

JTextArea

Objek JTextArea adalah komponen teks yang memungkinkan pengeditan beberapa baris teks.

11

ImageIcon

Kontrol ImageIcon adalah implementasi dari antarmuka Ikon yang melukis Ikon dari Gambar

12

JScrollbar

Kontrol Scrollbar mewakili komponen scroll bar untuk memungkinkan pengguna memilih dari rentang nilai.

13

JOptionPane

JOptionPane menyediakan sekumpulan kotak dialog standar yang meminta pengguna untuk suatu nilai atau memberitahu mereka tentang sesuatu.

14

JFileChooser

Kontrol JFileChooser mewakili jendela dialog tempat pengguna dapat memilih file.

15

JProgressBar

Saat tugas berlanjut ke penyelesaian, bilah kemajuan menampilkan persentase penyelesaian tugas.

16

JSlider

JSlider memungkinkan pengguna memilih nilai secara grafis dengan menggeser kenop dalam interval terbatas.

17

JSpinner

JSpinner adalah kolom input baris tunggal yang memungkinkan pengguna memilih angka atau nilai objek dari urutan yang diurutkan.

Kami akan menggunakan beberapa kontrol ini dalam contoh berikutnya.

Manajer tata letak di Java adalah kelas yang mengelola penempatan kontrol di objek kontainer seperti Frame, Dialog atau Panel. Manajer tata letak mempertahankan posisi relatif kontrol dalam bingkai, meskipun resolusi berubah atau ukuran bingkai itu sendiri diubah.

Kelas-kelas ini mengimplementasikan Layout interface. Manajer Tata Letak berikut ini ditentukan diAWT library -

  • BorderLayout
  • FlowLayout
  • GridLayout
  • CardLayout
  • GridBagLayout

Manajer Tata Letak berikut ditentukan di Swing library -

  • BoxLayout
  • GroupLayout
  • ScrollPaneLayout
  • SpringLayout

Kami akan menggunakan manajer tata letak AWT serta manajer tata letak ayunan dalam contoh berikut.

  • Tata Letak Mutlak
  • Tata Letak Aliran
  • Tata Letak Kisi
  • Tata Letak Perbatasan
  • Tata Letak Kotak
  • Tata Letak Grup

Sekarang mari kita bahas masing-masing secara mendetail.

Tata Letak Mutlak

Sebelum kita menjelajahi semua manajer Tata Letak di atas, kita harus melihat pemosisian absolut dari kontrol dalam sebuah wadah. Kami harus mengatur metode tata letak objek bingkai ke 'Tidak Ada'.

frame.setLayout(None)

Kemudian letakkan kontrol dengan memanggil setBounds()metode. Dibutuhkan empat argumen - posisi x, posisi y, lebar dan tinggi.

Misalnya - Untuk menempatkan objek tombol pada posisi absolut dan dengan ukuran absolut.

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

Demikian pula, semua kontrol dapat ditempatkan dengan mengalokasikan posisi dan ukuran dengan benar. Tata letak ini relatif mudah digunakan, tetapi gagal mempertahankan tampilannya saat jendela diubah ukurannya, atau jika program dijalankan saat resolusi layar berubah.

Dalam skrip Jython berikut, tiga objek Jlabel digunakan untuk menampilkan teks "phy", "maths" dan "Total". Di depan tiga ini - objek JTextField ditempatkan. Objek Button ditempatkan di atas label "Total".

Pertama-tama jendela JFrame dibuat dengan tata letak disetel ke none.

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

Kemudian kontrol yang berbeda ditambahkan sesuai dengan posisi dan ukuran absolutnya. Kode lengkap diberikan di bawah ini -

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)

Output untuk kode di atas adalah sebagai berikut.

Jython FlowLayout

FlowLayout adalah pengelola tata letak default untuk kelas kontainer. Ini mengatur kontrol dari kiri ke kanan dan kemudian dari atas ke arah bawah.

Dalam contoh berikut, objek Jlabel, objek JTextField dan objek JButton akan ditampilkan dalam JFrame menggunakan manajer FlowLayout. Untuk memulai, mari kita impor kelas yang diperlukan darijavax.swing paket dan java.awt paket.

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

Kemudian buat objek JFrame dan setel Lokasi serta properti ukurannya.

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())

Sekarang deklarasikan objek untuk kelas JLabel, JTextfield dan JButton.

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

Terakhir tambahkan kontrol ini dalam bingkai dengan memanggil add() metode kelas JFrame.

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

Untuk menampilkan bingkai, setel propertinya yang terlihat ke true. Skrip Jython lengkap dan hasilnya seperti yang diberikan di bawah ini -

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

Manajer Gridlayout memungkinkan penempatan kontrol dalam grid persegi panjang. Satu kontrol ditempatkan di setiap sel kisi.

Dalam contoh berikut, GridLayout diterapkan ke objek JFrame yang membaginya menjadi 4 baris dan 4 kolom. Objek JButton harus ditempatkan di setiap sel grid.

Mari kita mengimpor perpustakaan yang diperlukan -

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

Kemudian buat wadah JFrame -

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

Sekarang, terapkan GridLayout dengan menentukan dimensinya sebagai 4 kali 4.

frame.setLayout(GridLayout(4,4))

Kita sekarang harus menggunakan dua loop FOR, masing-masing dari 1 hingga 4, jadi enam belas objek JButton ditempatkan di sel berikutnya.

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)))

Terakhir, setel visibilitas bingkai ke true. Kode Jython lengkap diberikan di bawah ini.

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)

Output dari kode di atas adalah sebagai berikut -

Jython BorderLayout

Manajer BorderLayout membagi penampung di lima wilayah geografis dan tempat dengan satu komponen di setiap wilayah. Daerah ini diwakili oleh konstanta yang ditentukan sebagai berikut -

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

Mari kita perhatikan contoh berikut -

Jython BoxLayout

Kelas BoxLayout didefinisikan di javax.swing package. Ini digunakan untuk mengatur komponen dalam wadah baik secara vertikal maupun horizontal. Arah ditentukan oleh konstanta berikut -

  • X_AXIS
  • Y_AXIS
  • LINE_AXIS
  • PAGE_AXIS

Konstanta integer menentukan sumbu di mana komponen penampung harus diletakkan. Ketika wadah memiliki orientasi komponen default, LINE_AXIS menentukan bahwa komponen akan ditata dari kiri ke kanan, dan PAGE_AXIS menentukan bahwa komponen disusun dari atas ke bawah.

Dalam contoh berikut, panel (dari kelas JPanel) ditambahkan di objek JFrame. Vertical BoxLayout diterapkan padanya dan dua panel lagi, atas dan bawah, ditambahkan padanya. Kedua panel internal ini memiliki dua tombol yang masing-masing ditambahkan di Boxlayout horizontal.

Mari kita buat dulu jendela JFrame level atas.

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

Objek JPanel dinyatakan memiliki BoxLayout vertikal. Tambahkan di bingkai tingkat atas.

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

Di panel ini, dua panel lagi atas dan bawah ditambahkan padanya. Masing-masing memiliki dua objek JButton yang ditambahkan secara horizontal dengan penahan spasi 25 piksel yang memisahkannya.

###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)

Demikian pula, panel bawah dibuat.

###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())

Perhatikan bahwa file createRigidArea()Fungsi ini digunakan untuk membuat spasi sebesar 25 piksel di antara dua tombol. JugacreateVerticalGlue() fungsi menempati ruang depan atau belakang dalam tata letak.

Untuk memulai, tambahkan panel atas dan bawah dan setel properti visibilitas bingkai ke true. Kode lengkapnya adalah sebagai berikut -

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)

Kode di atas akan menghasilkan keluaran sebagai berikut.

Jython GroupLayout

Manajer GroupLayout mengelompokkan komponen secara hierarki. Pengelompokan dilakukan oleh dua kelas,SequentialGroup dan ParallelGroup, keduanya mengimplementasikan antarmuka Grup di Java.

Prosedur tata letak dibagi menjadi dua langkah. Dalam satu langkah, komponen ditempatkan bersama dengan sumbu horizontal, dan kedua sepanjang sumbu vertikal. Setiap komponen harus ditentukan dua kali dalam tata letak.

Ada dua jenis pengaturan, sekuensial dan paralel. Di keduanya, kita dapat menyusun komponen secara berurutan atau paralel. Dalam susunan horizontal, baris disebut kelompok sekuensial dan kolom disebut kelompok paralel. Sebaliknya, dalam susunan paralel, deretan elemen merupakan kelompok paralel dan kolom, yang disebut sekuensial.

Dalam contoh berikut, lima tombol disusun sedemikian rupa sehingga tiga tombol masing-masing muncul dalam baris dan kolom. Untuk memulainya, Tambahkan objek Jpanel di jendela JFrame dan setel tata letaknya sebagai Grouplayout.

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

Kemudian buat objek JButton -

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

Selanjutnya, kami membuat file SequentialGroup bernama LeftToRightke mana buttonD dan buttonY ditambahkan. Di antara mereka, sebuah ParallelGroup ColumnMiddle (dengan tiga tombol lainnya ditambahkan secara vertikal) ditempatkan.

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

Sekarang sampai pada definisi SequentialGroup vertikal yang disebut TopToBottom. Tambahkan baris ParallelGroup dari tiga tombol dan kemudian letakkan dua tombol secara vertikal.

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

Terakhir, setel grup LeftToRight secara horizontal dan grup TopToBottom secara vertikal ke objek tata letak. Kode lengkap diberikan di bawah ini -

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)

Output dari kode di atas adalah sebagai berikut -

Penanganan event di Java swing membutuhkan kontrol (seperti JButton atau JList dll.) Harus didaftarkan dengan event listener masing-masing. Antarmuka pemroses kejadian atau kelas Adaptor terkait perlu diimplementasikan atau disubkelas dengan mengganti metode penanganan kejadiannya. Di Jython, penanganan acara sangat sederhana. Kita bisa melewatkan fungsi apapun sebagai properti dari fungsi penanganan event yang sesuai dengan kontrol.

Pertama-tama, mari kita lihat bagaimana event klik ditangani di Java.

Untuk memulai, kita harus mengimpor file java.awt.event package. Selanjutnya, kelas yang memperluas JFrame harus mengimplementasikan antarmuka ActionListener.

public class btnclick extends JFrame implements ActionListener

Kemudian, kita harus mendeklarasikan objek JButton, menambahkannya ke bingkai ContentPane dan kemudian mendaftarkannya dengan ActionListener dengan metode addActionListener ().

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

Sekarang, metode actionPerformed () dari antarmuka ActionListener harus diganti untuk menangani ActionEvent.

Berikut ini adalah seluruh kode 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);
   }
}

Sekarang, kita akan menulis kode Jython yang setara dengan kode yang sama.

Untuk memulai, kita tidak perlu mengimpor ActionEvent atau ActionListener, karena pengetikan dinamis Jython memungkinkan kita untuk menghindari penyebutan kelas-kelas ini dalam kode kita.

Kedua, tidak perlu mengimplementasikan atau membuat subclass ActionListener. Sebaliknya, setiap fungsi yang ditentukan pengguna langsung diberikan ke konstruktor JButton sebagai nilaiactionPerformed properti kacang.

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

Itu clickhere() function didefinisikan sebagai fungsi Jython biasa, yang menangani event klik pada tombol.

def change_text(event):
print clicked!'

Berikut adalah kode setara 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)

Output kode Java dan Jython identik. Ketika tombol diklik, itu akan mencetak pesan 'diklik' di konsol.

Dalam kode Jython berikut, dua objek JTextField disediakan di jendela JFrame untuk memasukkan tanda di 'phy' dan 'maths'. Objek JButton menjalankan fungsi add () saat diklik.

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

Fungsi add () membaca konten dari dua bidang teks dengan metode getText () dan menguraikannya menjadi bilangan bulat, sehingga penambahan dapat dilakukan. Hasilnya kemudian diletakkan di bidang teks ketiga dengan metode setText ().

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

Kode lengkap diberikan di bawah ini -

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)

Ketika kode di atas dijalankan dari command prompt, jendela berikut akan muncul. Masukkan tanda untuk 'Phy', Matematika ', dan klik tombol' Add '. Hasilnya akan ditampilkan sesuai.

Acara Jython JRadioButton

Kelas JRadioButton didefinisikan di javax.swing package. Ini menciptakan tombol sakelar yang dapat dipilih dengan status hidup atau mati. Jika beberapa tombol radio ditambahkan dalam Grup Tombol, pilihannya eksklusif satu sama lain.

Dalam contoh berikut, dua objek kelas JRadioButton dan dua JLabel ditambahkan ke wadah Jpanel dalam BoxLayout vertikal. Dalam konstruktor objek JRadioButton, fileOnCheck()function ditetapkan sebagai nilai properti actionPerformed. Fungsi ini dijalankan ketika tombol radio diklik untuk mengubah statusnya.

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

Perhatikan bahwa status default Radio Button adalah false (tidak dipilih). Tombol rb1 dibuat dengan status awalnya sebagai True (dipilih).

Kedua tombol radio ditambahkan ke Radio ButtonGroup untuk membuatnya saling eksklusif, sehingga jika satu dipilih, yang lain batal dipilih secara otomatis.

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

Kedua tombol radio ini bersama dengan dua label ditambahkan ke objek panel dalam tata letak vertikal dengan area pemisah 25 piksel dalam ketinggian antara rb2 dan lbl2.

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)

Panel ini ditambahkan ke objek JFrame level atas, yang properti terlihatnya disetel ke 'True' pada akhirnya.

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)

Jalankan skrip Jython di atas dan ubah pilihan tombol radio. Pilihan akan muncul di label di bagian bawah.

Acara Jython JCheckBox

Seperti JRadioButton, Objek JCheckBox juga merupakan tombol yang dapat dipilih dengan kotak persegi panjang yang dapat dicentang di samping judulnya. Ini biasanya digunakan untuk memberikan kesempatan kepada pengguna untuk memilih beberapa opsi dari daftar item.

Dalam contoh berikut, dua kotak centang dan label dari paket ayunan ditambahkan ke JPanel dalam BoxLayout vertikal. Label di bagian bawah menampilkan status pemilihan seketika dari dua kotak centang.

Kedua kotak centang dideklarasikan dengan konstruktor yang memiliki properti actionPerformed yang disetel ke OnCheck() fungsi.

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

Fungsi OnCheck () memverifikasi status pemilihan setiap kotak centang dan menampilkan pesan terkait pada label di bagian bawah.

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"

Kotak-kotak ini dan objek JLabel ditambahkan ke JPanel dengan spasi 50 piksel yang ditambahkan di antaranya.

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)

Panel itu sendiri ditambahkan ke jendela JFrame tingkat atas, yang properti terlihatnya disetel ke true pada akhirnya.

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

frame.setVisible(True)

Jalankan kode di atas dan lakukan percobaan dengan memilih kotak centang. Status seketika dari kedua kotak centang ditampilkan di bagian bawah.

Acara Jython JList

Kontrol JList dalam paket swing memberi pengguna daftar item yang dapat digulir untuk dipilih. JComboBox menyediakan daftar drop-down item. Di Java, acara pemilihan diproses dengan mengimplementasikan metode valueChanged () di ListSelectionListener. Di Jython, penanganan kejadian ditugaskan ke properti valueChanged dari objek JList.

Dalam contoh berikut, objek JList dan label ditambahkan ke JFrame di BorderLayout. JList diisi dengan kumpulan item dalam tupel. Properti valueChangednya disetel ke fungsi listSelect ().

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

Fungsi event handler memperoleh indeks dari item yang dipilih dan mengambil item yang sesuai dari objek JList untuk ditampilkan pada label di bagian bawah.

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

Objek JList dan JLabel ditambahkan ke JFrame menggunakan BorderLayout.

Seluruh kode diberikan di bawah ini -

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)

Output dari kode berikut adalah sebagai berikut.

Sebagian besar aplikasi berbasis GUI memiliki bilah Menu di bagian atas. Ini ditemukan tepat di bawah bilah judul dari jendela tingkat atas. Paket javax.swing memiliki fasilitas yang rumit untuk membangun sistem menu yang efisien. Itu dibangun dengan bantuanJMenuBar, JMenu dan JMenuItem kelas.

Dalam contoh berikut, bilah menu disediakan di jendela tingkat atas. Menu File yang terdiri dari tiga tombol item menu ditambahkan ke bilah menu. Sekarang mari kita persiapkan objek JFrame dengan tata letak yang disetel ke BorderLayout.

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

Sekarang, objek JMenuBar diaktifkan dengan metode SetJMenuBar ().

bar = JMenuBar()
frame.setJMenuBar(bar)

Selanjutnya, objek JMenu yang memiliki judul 'File' dideklarasikan. Tiga tombol JMenuItem ditambahkan ke menu File. Ketika salah satu item menu diklik, fungsi pengendali ActionEvent OnClick () dijalankan. Ini didefinisikan dengan properti 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)

Penangan kejadian OnClick () mengambil nama tombol JMenuItem dengan fungsi gwtActionCommand () dan menampilkannya di kotak teks di bagian bawah jendela.

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

Objek menu File ditambahkan ke bilah menu. Akhirnya, kontrol JTextField ditambahkan di bagian bawah objek JFrame.

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

Seluruh kode menu.py diberikan di bawah ini -

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)

Ketika skrip di atas dijalankan menggunakan juru bahasa Jython, sebuah jendela dengan menu File akan muncul. Klik di atasnya dan tiga item menunya akan turun. Jika ada tombol yang diklik, namanya akan ditampilkan di kontrol kotak teks.

Objek Dialog adalah jendela yang muncul di atas jendela dasar tempat pengguna berinteraksi. Dalam bab ini, kita akan melihat dialog yang telah dikonfigurasi sebelumnya yang ditentukan di perpustakaan ayunan. MerekaMessageDialog, ConfirmDialog dan InputDialog. Mereka tersedia karena metode statis kelas JOptionPane.

Dalam contoh berikut, menu File memiliki tiga item JMenu yang sesuai dengan tiga dialog di atas; masing-masing mengeksekusiOnClick penanganan acara.

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)

Fungsi pengendali OnClick () mengambil judul tombol Item Menu dan memanggil metode showXXXDialog () masing-masing.

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")

Jika opsi pesan dari menu dipilih, sebuah pesan akan muncul. Jika opsi Input diklik, dialog yang meminta input akan muncul. Teks input kemudian ditampilkan di kotak teks di jendela JFrame. Jika opsi Konfirmasi dipilih, dialog dengan tiga tombol, YES, NO dan CANCEL muncul. Pilihan pengguna dicatat di kotak teks.

Seluruh kode diberikan di bawah ini -

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)

Ketika skrip di atas dijalankan, jendela berikut ditampilkan dengan tiga opsi di menu -

Kotak pesan

Kotak Masukan

Konfirmasi Dialog