Jython - Hızlı Kılavuz
Jython, Python programlama dilinin JVM uygulamasıdır. Java platformunda çalışacak şekilde tasarlanmıştır. Bir Jython programı herhangi bir Java sınıfını içe aktarabilir ve kullanabilir. Java gibi, Jython programı dabytecode. Ana avantajlardan biri, Python'da tasarlanan bir kullanıcı arayüzünün şu GUI öğelerini kullanabilmesidir.AWT, Swing veya SWT Package.
JPython olarak başlayan ve daha sonra yeniden adlandırılan Jython, adı verilen standart Python uygulamasını yakından takip eder. CPython tarafından yaratıldığı gibi Guido Van Rossum. Jython, 1997 yılındaJim Hugunin. Jython 2.0 1999'da piyasaya sürüldü. O zamandan beri Jython 2.x sürümleri eşdeğer CPython sürümlerine karşılık geliyor. Mayıs 2015'te piyasaya sürülen Jython 2.7.0, CPython 2.7'ye karşılık gelir. Jython 3.x'in geliştirilmesi devam ediyor.
Python ve Java Arasındaki Fark
Python ve Java arasındaki farklar aşağıdadır -
Python, dinamik olarak yazılmış bir dildir. Bu nedenle, değişkenin tür bildirimine gerek yoktur. Öte yandan Java, statik olarak yazılmış bir dildir; bu, değişkenin tür bildiriminin zorunlu olduğu ve değiştirilemeyeceği anlamına gelir.
Python'da yalnızca kontrol edilmemiş istisnalar varken, Java hem kontrol edilmiş hem de kontrol edilmemiş istisnalara sahiptir.
Python kapsam belirleme için girintiler kullanırken, Java eşleşen küme parantezleri kullanır.
Python yorumlayıcı tabanlı bir dil olduğu için ayrı bir derleme adımına sahip değildir. Ancak bir Java programının bayt koduna göre derlenmesi gerekir ve bunun karşılığında bir JVM tarafından yürütülür.
Python çoklu kalıtımı destekler, ancak Java'da çoklu kalıtım mümkün değildir. Bununla birlikte, bir arayüz uygulamasına sahiptir.
Java ile karşılaştırıldığında, Python daha zengin yerleşik veri yapılarına sahiptir (listeler, diktatlar, tupleler, her şey bir nesnedir).
Python ve Jython Arasındaki Fark
Python ve Jython arasındaki farklar aşağıdadır -
Python'un CPython adı verilen referans uygulaması C dilinde yazılmıştır. Jython ise tamamen Java ile yazılmıştır ve bir JVM uygulamasıdır.
Standart Python birden fazla platformda mevcuttur. Jython, üzerinde JVM kurulu olan tüm platformlar için kullanılabilir.
Standart Python kodu bir .pyc Jython programı bir .class dosya.
Python uzantıları C dilinde yazılabilir. Jython için uzantılar Java ile yazılmıştır.
Jython, doğası gereği gerçekten çok iş parçacıklıdır. Python, ancakGlobal Interpreter Lock (GIL) amaç için mekanizma.
Her iki uygulamanın da farklı çöp toplama mekanizmaları vardır.
Sonraki bölümde, Java kitaplıklarının Jython'da nasıl içe aktarılacağını öğreneceğiz.
Jython 2.7'yi kurmadan önce, sistemde JDK 7veya daha fazla yüklü. Jython, çalıştırılabilir bir jar dosyası biçiminde mevcuttur. Şuradan indirin -http://www.jython.org/downloads.html ve simgesine çift tıklayın veya aşağıdaki komutu çalıştırın -
java -jar jython_installer-2.7.0.jar
Hangi kurulum seçeneklerinin verilmesi gerektiği ile bir kurulum sihirbazı başlayacaktır. İşte sistematik kurulum prosedürü.
Sihirbazın ilk adımı, dili seçmenizi ister.
İkinci adım, lisans sözleşmesini kabul etmenizi ister.
Sonraki adımda kurulum tipini seçin. Standart kurulumu seçmeniz önerilir.
Bir sonraki ekran, seçenekleriniz hakkında onayınızı sorar ve kurulumu tamamlamak için devam eder.
Kurulum prosedürünün tamamlanması biraz zaman alabilir.
Kurulum tamamlandıktan sonra çağırın jython.exehedef dizinin içindeki bin dizininden. Jython'un kurulu olduğunu varsayarsakC:\jython27, aşağıdakileri komut satırından yürütün.
C:\jython27\bin\jython
Önünde herhangi bir Python ifadesinin veya Python komut dosyasının çalıştırılabileceği bir Python istemi (>>>) görünecektir.
Jython'un en önemli özelliklerinden biri, Java sınıflarını bir Python programında içe aktarma yeteneğidir. Bir Java programında yaptığımız gibi, Jython'daki herhangi bir java paketini veya sınıfını içe aktarabiliriz. Aşağıdaki örnek,java.util paketler, Date sınıfının bir nesnesini bildirmek için Python (Jython) betiğine içe aktarılır.
from java.util import Date
d = Date()
print d
Yukarıdaki kodu kaydedin ve çalıştırın UtilDate.pykomut satırından. Güncel tarih ve saatin örneği görüntülenecektir.
C:\jython27\bin>jython UtilDate.py
Sun Jul 09 00:05:43 IST 2017
Java kitaplığındaki aşağıdaki paketler bir Jython programına daha sık içe aktarılır çünkü standart Python kitaplığının eşdeğerleri yoktur veya o kadar iyi değildir.
- Servlets
- JMS
- J2EE
- Javadoc
- Swing, diğer GUI araç setlerinden daha üstündür
Bu konudaki herhangi bir Java paketi bir Jython betiğine aktarılabilir. Burada, aşağıdaki java programı adı verilen bir pakette saklanır ve derlenir.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);
}
}
Bu HelloWorld.classaşağıdaki Jython Komut Dosyasına aktarılır. Bu sınıftaki yöntemler Jython betiğinden çağrılabilirimportex.py.
from foo import HelloWorld
h = HelloWorld()
h.hello()
h.hello("TutorialsPoint")
Aşağıdaki çıktıyı almak için yukarıdaki komut dosyasını komut satırından kaydedin ve çalıştırın.
C:\jython27\bin>jython importex.py
Hello World!
Hello TutorialsPoint!
Değişkenler, bilgisayarın belleğindeki adlandırılmış konumlardır. Her değişken, içinde tek bir veri parçası tutabilir. Java'dan farklı olarak Python, dinamik olarak yazılmış bir dildir. Bu nedenle Jython kullanırken de; veri türünün önceden bildirimi yapılmaz. İçinde hangi verilerin depolanacağına karar veren değişkenin türünden ziyade, veriler değişkenin türüne karar verir.
Aşağıdaki örnekte, bir değişkene bir tamsayı değeri atanmıştır. Type () yerleşik işlevini kullanarak, değişken türünün bir tamsayı olduğunu doğrulayabiliriz. Ancak, aynı değişkene bir dizge atanırsa, type () işlevi aynı değişkenin türü olarak dizilir.
> x = 10
>>> type(x)
<class 'int'>
>>> x = "hello"
>>> type(x)
<class 'str'>
Bu, Python'a neden dinamik olarak yazılmış bir dil denildiğini açıklar.
Aşağıdaki Python yerleşik veri türleri Jython'da da kullanılabilir -
- Number
- String
- List
- Tuple
- Dictionary
Python sayısal verileri tam sayı, kayan noktalı gerçek sayı veya karmaşık sayı olabilecek bir sayı olarak tanır. String, List ve Tuple veri türlerine diziler denir.
Jython Numaraları
Python'da, herhangi bir işaretli tamsayının 'int' türünde olduğu söylenir. Uzun bir tamsayıyı ifade etmek için ona 'L' harfi eklenir. Tamsayı kısmını kesirli bir bileşenden ayıran ondalık noktalı sayıya 'kayan nokta' denir. Kesirli kısım, bilimsel gösterimde 'E' veya 'e' kullanılarak ifade edilen bir üs içerebilir.
Karmaşık sayı, Python'da sayısal veri türü olarak da tanımlanır. Karmaşık bir sayı, gerçek bir kısım (bir kayan nokta sayısı) ve kendisine 'j' eklenmiş hayali bir kısım içerir.
Sekizli veya Onaltılı gösterimde bir sayıyı ifade etmek için, 0O veya 0Xbunun önüne eklenmiştir. Aşağıdaki kod bloğu, Python'da sayıların farklı temsillerinin örneklerini verir.
int -> 10, 100, -786, 80
long -> 51924361L, -0112L, 47329487234L
float -> 15.2, -21.9, 32.3+e18, -3.25E+101
complex -> 3.14j, 45.j, 3e+26J, 9.322e-36j
Jython Dizeleri
Bir dize, tek (ör. "Merhaba"), çift (ör. "Merhaba") veya üçlü (ör. "" Merhaba "o" "merhaba" ") tırnak işaretleri içine alınmış herhangi bir karakter dizisidir. Üçlü tırnak işaretleri, dizenin içeriği birden çok satıra yayılıyorsa özellikle kullanışlıdır.
Kaçış dizisi karakterleri, üç tırnaklı dizeye aynen dahil edilebilir. Aşağıdaki örnekler, Python'da bir dizeyi bildirmenin farklı yollarını gösterir.
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.
"""
Üçüncü dizi yazdırıldığında aşağıdaki çıktıyı verecektir.
this is a long string that is made up of
several lines and non-printable characters such as
TAB ( ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
], or just a NEWLINE within
the variable assignment will also show up.
Jython Listeleri
Liste, sıralı bir veri türüdür. Köşeli parantez içinde saklanan, aynı türden olması gerekmeyen, virgülle ayrılmış öğeler koleksiyonudur. Listedeki tek tek öğelere sıfır tabanlı dizin kullanılarak erişilebilir.
Aşağıdaki kod bloğu, Python'da bir List'in kullanımını özetler.
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]
Aşağıdaki tablo, Jython Listeleriyle ilgili en yaygın Jython İfadelerinden bazılarını açıklamaktadır.
Jython İfadesi | Açıklama |
---|---|
len (Liste) | Uzunluk |
Liste [2] = 10 | Güncelleme |
Listeyi Sil [1] | Silme |
List.append (20) | Ekle |
List.insert (1,15) | Yerleştirme |
List.sort () | Sıralama |
Jython Tuples
Tuple, parantez içinde saklanan virgülle ayrılmış veri öğelerinin değişmez bir koleksiyonudur. Tuple'daki bir öğeyi silmek veya değiştirmek mümkün olmadığı gibi, tuple koleksiyonuna bir öğe eklemek de mümkün değildir. Aşağıdaki kod bloğu Tuple işlemlerini gösterir.
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 Sözlüğü
Jython Sözlüğü, Java Koleksiyonu çerçevesindeki Harita sınıfına benzer. Anahtar-değer çiftlerinden oluşan bir koleksiyondur. Virgülle ayrılan çiftler küme parantezleri içine alınır. Bir Dictionary nesnesi, hashing tekniği ile depolandıkları için içindeki öğeyi almak için sıfır tabanlı dizini izlemez.
Aynı anahtar, bir sözlük nesnesinde birden fazla görünemez. Ancak, birden fazla anahtar aynı ilişkili değerlere sahip olabilir. Dictionary nesnesiyle kullanılabilen farklı işlevler aşağıda açıklanmıştır -
dict = {'011':'New Delhi','022':'Mumbai','033':'Kolkata'}
print "dict[‘011’]: ",dict['011']
print "dict['Age']: ", dict['Age']
Aşağıdaki tablo, Sözlük ile ilgili en yaygın Jython İfadelerinden bazılarını açıklamaktadır.
Jython İfadesi | Açıklama |
---|---|
dict.get ('011') | Arama |
len (dikte) | Uzunluk |
dict ['044'] = 'Chennai' | Ekle |
del dikte ['022'] | Sil |
dict.keys () | anahtar listesi |
dict.values () | Değerler listesi |
dict.clear () | Tüm öğeleri kaldırır |
Python'un yerleşik veri türlerine ek olarak Jython, Java koleksiyon sınıflarını içe aktararak kullanma avantajına sahiptir. java.util package. Aşağıdaki kod, aşağıda verilen sınıfları açıklamaktadır -
- Add () ile Java ArrayList nesnesi
- remove()
- ArrayList sınıfının get () ve set () yöntemleri.
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
Yukarıdaki Jython betiği aşağıdaki çıktıyı üretir -
C:\jython27\bin>jython arrlist.py
ArrayList: [10, 20]
ArrayList: [5, 20]
element at index 1: 20
ArrayList: [100, 20]
Jarray Sınıfı
Jython ayrıca Jarray ObjectPython'da bir Java dizisinin oluşturulmasına izin veren. Bir jarray ile çalışmak için, Jython'da basitçe bir dizi türü tanımlayın ve dizide bulunan nesne türü ile birlikte jarrayobject'e iletin. Bir jarray içindeki tüm değerler aynı türde olmalıdır.
Aşağıdaki tablo bir jarray ile kullanılan karakter tip kodlarını gösterir.
Karakter Tür kodu | İlgili Java Türü |
---|---|
Z | Boole |
C | kömür |
B | bayt |
H | kısa |
ben | int |
L | uzun |
F | yüzen |
D | çift |
Aşağıdaki örnek, jarray'in yapısını gösterir.
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
Buraya my_seqtam sayılardan oluşan bir demet olarak tanımlanır. Jarray arr1'e dönüştürülür. İkinci örnek, Jarray arr2'ninmySttr stringsıra. Yukarıdaki betiğin çıktısıjarray.py aşağıdaki gibidir -
array('i', [1, 2, 3, 4, 5])
array('c', 'Hello Jython')
Karar verme yapıları, program tarafından değerlendirilecek veya test edilecek bir veya daha fazla koşula, koşulun doğru olduğu belirlenirse yürütülecek bir ifade veya ifadeye ve isteğe bağlı olarak, koşulun yerine getirilmesi durumunda yürütülecek diğer ifadelere sahiptir. yanlış olduğu belirlenir.
Aşağıdaki çizim, programlama dillerinin çoğunda bulunan tipik bir karar verme yapısının genel biçimini göstermektedir -
Jython, koşul doğru veya yanlış olduğunda (Java'da olduğu gibi) yürütülecek ifade bloklarını belirtmek için süslü parantez kullanmaz. Bunun yerine, ifade bloğu oluşturmak için tek tip girinti (sol kenardan beyaz boşluk) kullanılır. Böyle tekdüze girintili bir blok, 'if' ifadesinde verilen bir koşul doğru olduğunda koşullu kodun çalıştırılmasını sağlar.
İsteğe bağlı bir 'else' ifadesinden sonra benzer bir blok mevcut olabilir. Jython ayrıcaelif statementhangi ardışık koşulların test edilebileceğini kullanarak. Buradaelse clauseen son görünecek ve yalnızca önceki tüm koşullar başarısız olduğunda yürütülecektir. Kullanmanın genel sözdizimiif..elif..else Şöyleki.
if expression1:
statement(s)
elif expression2:
statement(s)
elif expression3:
statement(s)
else:
statement(s)
Aşağıdaki örnekte, eğer ..elif ..else yapı, kullanıcı tarafından girilen farklı miktar değerlerinde indirimi hesaplamak için kullanılır.
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
Yukarıdaki kodun çıktısı aşağıda gösterildiği gibi olacaktır.
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
Genel olarak, bir programdaki ifadeler sırayla yürütülür: Bir fonksiyondaki ilk ifade önce çalıştırılır, ardından ikincisi yapılır ve bu böyle devam eder. Bir kod bloğunu birkaç kez çalıştırmanız gereken bir durum olabilir. Bu tür bir tekrarlama yeteneği sağlayan ifadelerelooping statements.
Jython'da, bir döngü iki ifade ile oluşturulabilir:
while ifade ve
for Beyan
WHILE Döngüsü
Jython'daki while döngüsü ifadesi Java'dakine benzer. Belirli bir koşul doğru olduğu sürece tekrar tekrar bir ifade bloğu yürütür. Aşağıdaki akış şeması, birwhile döngü.
While ifadesinin genel sözdizimi aşağıda verilmiştir.
while expression:
statement(s)
Aşağıdaki Jython kodu, bir değişkenin değerini sıfırdan küçük olana kadar art arda artırmak ve yazdırmak için while döngüsünü kullanır.
count = 0
while count<10:
count = count+1
print "count = ",count
print "Good Bye!"
Output - Çıktı aşağıdaki gibi olacaktır.
count = 1
count = 2
count = 3
count = 4
count = 5
count = 6
count = 7
count = 8
count = 9
count = 10
Good Bye!
FOR Döngüsü
Jython'daki FOR döngüsü, Java'daki gibi sayılan bir döngü değildir. Bunun yerine, dizi, liste veya tuple gibi bir dizi veri türündeki öğeleri geçme yeteneğine sahiptir. Jython'daki FOR ifadesinin genel sözdizimi aşağıda gösterildiği gibidir -
for iterating_var in sequence:
statements(s)
Aşağıda gösterildiği gibi FOR ifadesini kullanarak her karakteri bir dizede ve ayrıca List veya Tuple'daki her öğeyi görüntüleyebiliriz -
#each letter in string
for letter in 'Python':
print 'Current Letter :', letter
Output - Çıktı aşağıdaki gibi olacaktır.
Current Letter : P
Current Letter : y
Current Letter : t
Current Letter : h
Current Letter : o
Current Letter : n
Başka bir örneği aşağıdaki gibi ele alalım.
#each item in list
libs = [‘PyQt’, 'WxPython', 'Tkinter']
for lib in libs: # Second Example
print 'Current library :', lib
Output - Çıktı aşağıdaki gibi olacaktır.
Current library : PyQt
Current library : WxPython
Current library : Tkinter
İşte dikkate alınması gereken başka bir örnek.
#each item in tuple
libs = (‘PyQt’, 'WxPython', 'Tkinter')
for lib in libs: # Second Example
print 'Current library :', lib
Output - Yukarıdaki programın çıktısı aşağıdaki gibidir.
Current library : PyQt
Current library : WxPython
Current library : Tkinter
Jython'da fordeyimi ayrıca range () işlevi tarafından oluşturulan bir sayı listesi üzerinde yineleme yapmak için kullanılır. Range () işlevi aşağıdaki biçimi alır -
range[([start],stop,[step])
Başlangıç ve adım parametreleri varsayılan olarak 0 ve 1'dir. Üretilen son numara, durdurma adımıdır. FOR ifadesi, tarafından oluşturulan listeden geçer.range() function. Örneğin -
for num in range(5):
print num
Aşağıdaki çıktıyı üretir -
0
1
2
3
4
Karmaşık bir programlama mantığı, işlevler olarak adlandırılan bir veya daha fazla bağımsız ve yeniden kullanılabilir ifade bloğuna bölünmüştür. Python'un standart kitaplığı çok sayıda yerleşik işlev içerir. Biri kendi işlevini kullanarak da tanımlayabilirdefanahtar kelime. İşlevin kullanıcı tanımlı adının ardından, işlevin gövdesini oluşturan ve return ifadesiyle biten bir ifade bloğu gelir.
Bir kez tanımlandıktan sonra herhangi bir ortamdan istenilen sayıda çağrılabilir. Konuyu netleştirmek için aşağıdaki kodu ele alalım.
#definition of function
defSayHello():
"optional documentation string"
print "Hello World"
return
#calling the function
SayHello()
Çağıran ortamdan bir veya daha fazla parametre / bağımsız değişken almak için bir işlev tasarlanabilir. Bu tür parametreleştirilmiş bir işlevi çağırırken, işlev tanımında kullanılan benzer veri türleriyle aynı sayıda parametre sağlamanız gerekir, aksi takdirde Jython yorumlayıcısı birTypeError istisna.
Misal
#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 aşağıdaki gibi olacak -
area = 200
Traceback (most recent call last):
File "area.py", line 11, in <module>
area(length)
TypeError: area() takes exactly 2 arguments (1 given)
İçinde tanımlanan adımları gerçekleştirdikten sonra, çağrılan işlev çağıran ortama geri döner. İşlev tanımının içinde return anahtar sözcüğü önünde bir ifadeden bahsedilmişse, verileri döndürebilir.
#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
Yukarıdaki komut dosyası Jython komut isteminden çalıştırılırsa aşağıdaki çıktı elde edilir.
area = 200
value returned by function : 200
Bir modül, bir veya daha fazla ilgili fonksiyonun, sınıfın veya değişkenin tanımlandığı bir Jython betiğidir. Bu, Jython kodunun mantıksal bir organizasyonuna izin verir. Bir modülde tanımlanan Program öğeleri, modülü veya belirli öğeyi (işlev / sınıf) ondan içe aktararak başka bir Jython betiğinde kullanılabilir.
Aşağıdaki kodda (merhaba.py) bir işlev SayHello() tanımlanmış.
#definition of function
defSayHello(str):
print "Hello ", str
return
SayHello () işlevini başka bir komut dosyasından kullanmak için, hello.py module içinde.
import hello
hello.SayHello("TutorialsPoint")
Ancak bu, modülde tanımlanan tüm işlevleri içe aktaracaktır. Modülden belirli bir işlevi içeri aktarmak için aşağıdaki sözdizimini kullanın.
from modname import name1[, name2[,... nameN]
Örneğin, yalnızca SayHello () işlevini içe aktarmak için yukarıdaki komut dosyasını aşağıdaki gibi değiştirin.
from hello import SayHello
SayHello("TutorialsPoint")
İşlev çağrılırken modülün adının önüne geçilmesine gerek yoktur.
Bir veya daha fazla Jython modülü içeren herhangi bir klasör paket olarak tanınır. Ancak, adında özel bir dosyası olmalıdır.__init__.py, kullanılacak işlevlerin dizinini sağlar.
Şimdi paketin nasıl oluşturulacağını ve içe aktarılacağını anlayalım.
Step 1 - adlı bir klasör oluşturun package1, ardından aşağıdakileri oluşturun ve kaydedin g içindeki modüller.
#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 klasöründe, __init__.py aşağıdaki içeriğe sahip dosya.
#__init__.py
from fact import factorial
from sum import add
from mult import multiply
Step 3 - Aşağıdaki Jython betiğini package1 klasörünün dışında şu şekilde oluşturun: 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 komut isteminden test.py'yi çalıştırın. Aşağıdaki çıktı elde edilecektir.
factorial = 120
addition = 30
multiplication = 200
İndir jython-standalone-2.7.0.jar - Jython'u Java uygulamalarına resmi indirme sayfalarından yerleştirmek için: http://www.jython.org/downloads.html ve bu jar dosyasını Java CLASSPATH ortam değişkenine dahil edin.
Bu kütüphane şunları içerir: PythonInterpretersınıf. Bu sınıfın nesnesini kullanarak, herhangi bir Python betiği,execfile()yöntem. PythonInterpreter, aşağıdakilerden yararlanmanızı sağlar:PyObjectsdirekt olarak. Jython çalışma zamanı sistemi tarafından bilinen tüm nesneler, PyObject sınıfının bir örneği veya alt sınıflarından biri tarafından temsil edilir.
PythonInterpreter sınıfı, aşağıda verilen tabloda açıklanan düzenli olarak kullanılan bazı yöntemlere sahiptir.
Sr.No. | Yöntem ve Açıklama |
---|---|
1 | setIn(PyObject) Standart giriş akışı için kullanılacak Python nesnesini ayarlayın |
2 | setIn(java.io.Reader) Standart giriş akışı için kullanmak üzere bir java.io.Reader ayarlayın |
3 | setIn(java.io.InputStream) Standart giriş akışı için kullanmak üzere bir java.io.InputStream ayarlayın |
4 | setOut(PyObject) Standart çıktı akışı için kullanılacak Python nesnesini ayarlayın |
5 | setOut(java.io.Writer) Standart çıktı akışı için kullanmak üzere java.io.Writer'ı ayarlayın |
6 | setOut(java,io.OutputStream) Standart çıktı akışı için kullanmak üzere java.io.OutputStream'i ayarlayın |
7 | setErr(PyObject) Standart hata akışı için kullanılacak bir Python hata nesnesi ayarlayın |
8 | setErr(java.io.Writer Standart hata akışı için kullanmak üzere bir java.io.Writer ayarlayın |
9 | setErr(java.io.OutputStream) Standart hata akışı için kullanmak üzere bir java.io.OutputStream ayarlayın |
10 | eval(String) Bir dizeyi Python kaynağı olarak değerlendirin ve sonucu döndürün |
11 | eval(PyObject) Bir Python kod nesnesini değerlendirin ve sonucu döndürün |
12 | exec(String) Yerel ad alanında bir Python kaynak dizesi yürütün |
13 | exec(PyObject) Yerel ad alanında bir Python kodu nesnesi yürütün |
14 | execfile(String filename) Yerel ad alanında bir Python kaynağı dosyası yürütün |
15 | execfile(java.io.InputStream) Yerel ad alanında Python kaynağının giriş akışını yürütün |
16 | compile(String) Bir Python kaynak dizesini bir ifade veya modül olarak derleyin |
17 | compile(script, filename) Python kaynağının bir komut dosyasını bir ifade veya modül olarak derleyin |
18 | set(String name, Object value) Yerel ad alanında Nesne türünde bir değişken ayarlayın |
19 | set(String name, PyObject value) Yerel ad alanında PyObject türünde bir değişken ayarlayın |
20 | get(String) Yerel ad alanındaki bir değişkenin değerini alın |
21 | get(String name, Class
Yerel ad alanındaki bir değişkenin değerini alın. Değer, verilen Java sınıfının bir örneği olarak döndürülecektir. |
Aşağıdaki kod bloğu, yerleşik bir Jython betiğine sahip bir Java programıdır. “hello.py”.usingexecfile()PythonInterpreter nesnesinin yöntemi. Ayrıca bir Python değişkeninin set () ve get () yöntemleri kullanılarak nasıl ayarlanıp okunabileceğini de gösterir.
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 ");
}
}
Aşağıdaki çıktıyı elde etmek için yukarıdaki Java programını derleyin ve çalıştırın.
Hello, world from Java
hello world from Python
42
x: 4
Goodbye
PyDev, Python, Jython ve IronPython'da projelerin geliştirilmesini sağlamak için Eclipse IDE için açık kaynaklı bir eklentidir. Barındırılıyorhttps://pydev.org. PyDev eklentisini Eclipse IDE'ye kurmak için adım adım bir prosedür aşağıda verilmiştir.
Step 1 - Eclipse IDE'yi açın ve Install New Software Yardım menüsünden seçenek.
Step 2 - Giriş http://pydev.org/updatesetiketli çalışmanın önündeki metin kutusunda ve ekle'yi tıklayın. Listedeki tüm mevcut girişleri seçin ve İleri'ye tıklayın. Sihirbazın kurulumu tamamlaması birkaç dakika sürecek ve IDE'nin yeniden başlatılmasını isteyecektir.
Step 3- Şimdi Pencere menüsünden tercihler seçeneğini seçin. Tercihler iletişim kutusu aşağıda gösterildiği gibi açılacaktır.
Step 4- Yorumlayıcılar düğümünü genişletin ve sol bölmede Jython Yorumlayıcı'yı seçin. Sağ bölmede, yol vermek için yeniye tıklayın.jython.jar file.
Artık Eclipse kullanarak bir Jython projesi başlatmaya hazırız.
Tutulmada proje yapmak için aşağıda verilen adımları takip etmeliyiz.
Step 1- Dosya Seçilsin mi? Yeni ? Proje. SeçPyDevfiltre iletişim kutusundan. Proje adını, proje tipini verin ve Bitir'e tıklayın.
Step 2- Merhaba proje şimdi soldaki proje gezgininde görünecek. Hello.py'yi eklemek için sağ tıklayın.
Step 3- Düzenleyicide boş bir hello.py görünecektir. Jython kodunu yazın ve kaydedin.
Step 4- Menü çubuğundaki Çalıştır düğmesine tıklayın. Çıktı, aşağıda gösterildiği gibi konsol penceresinde görünecektir.
NetBeans için Python ve Jython desteği, nbPython plugin. Eklentiyi aşağıdaki URL'den indirin -http://plugins.netbeans.org/plugin/56795. İndirilen arşivi bir klasörde açın. Örneğin -d:\nbplugin. NetBeans Eklentisini kurmak için aşağıda verilen adımları takip edelim.
Step 1 - Başlat Netbeans IDEve ardından Eklenti Yöneticisini açmak için Araçlar / Eklenti'ye gidin. "İndirildi" sekmesini seçin ve indirilen dosyanın açılmış olduğu klasöre göz atın. NetBeans penceresi aşağıda gösterildiği gibi görünecektir.
Step 2 - Sonraki adım, tüm .nbm dosyaları ve aç'ı tıklayın.
Step 3 - Yükle düğmesine tıklayın.
Step 4 - Devam etmek için aşağıdaki lisans sözleşmesini kabul edin.
Güvenilmeyen eklenti kaynakları hakkındaki uyarıyı yoksayın ve devam etmek için IDE'yi yeniden başlatın.
NetBeans'de Jython Projesi
Yeniden başlatıldığında, Dosya / Yeni'yi seçerek yeni bir proje başlatın. Python kategorisi artık kategoriler listesinde yer alacaktır. Devam etmek için onu seçin.
Sistemde Python kuruluysa, sürümü / sürümleri otomatik olarak algılanacak ve Python platformu açılır listesinde gösterilecektir. Ancak Jython listelenmeyecektir. Eklemek için Yönet düğmesine tıklayın.
Jython çalıştırılabilirine bir platform adı ve yol eklemek için 'Yeni' düğmesine tıklayın.
Jython artık platform listesinde mevcut olacak. Aşağıdaki ekran görüntüsünde gösterildiği gibi açılır listeden seçim yapın.
Artık bir sonraki pencerede proje adını, yerini ve ana dosyayı doldurabiliriz.
Proje yapısı, NetBeans IDE'sinin projeler penceresinde ve düzenleyici penceresinde bir şablon Python kodu görünecektir.
NetBeans IDE'nin çıktı penceresinde aşağıdaki sonucu elde etmek için Jython projesini oluşturun ve yürütün.
Java sunucu uygulaması, en yaygın olarak kullanılan web geliştirme tekniğidir. Jython'u servlet yazmak için kullanabiliriz ve bu, Java'nın sunduklarının ötesinde çok daha fazla avantaj sağlar çünkü artık Python dil özelliklerini de kullanabiliriz.
Jython sunucu uygulamasıyla bir Java web uygulaması geliştirmek için NetBeans IDE'yi kullanacağız. Emin olunnbPython pluginNetBeans kurulumuna yüklenir. Aşağıdaki yolu seçerek bir web uygulaması oluşturmak için yeni bir proje başlatın -File → New Project → Java web → New Web Application.
Proje adını ve konumunu sağlayın. IDE, proje klasör yapısını oluşturacaktır. Projeler penceresindeki kaynak paketleri düğümünün altına bir Java servlet dosyası (ServletTest.java) ekleyin. Bu ekleyecekservlet-api.jarprojenin lib klasöründe. Ayrıca, IDE'nin web.xml dosyasını oluşturmasına izin verindescriptor file. Aşağıdaki kodu şuraya ekleyin: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 tarafından oluşturulan web.xml dosyası aşağıda gösterildiği gibi olacaktır -
<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>
Metni elde etmek için projeyi oluşturun ve çalıştırın Servlet Testtarayıcı penceresindeki <h1> etiketinde görünüyor. Böylece uygulamaya normal bir Java servlet ekledik.
Şimdi Jython Servlet'i ekleyeceğiz. Jython servletleri, PyServlet olarak da bilinen ara Java sunucu uygulaması aracılığıyla çalışır. PyServlet.class,jython standalone.jar. EkleyinWEB-INF/lib Klasör.
Bir sonraki adım, web.xml'yi PyServlet'i çağıracak şekilde yapılandırmaktır. *.py fileyükseltilir. Bu, içine aşağıdaki xml kodunu ekleyerek yapılmalıdır.
<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>
Tam web.xml kodu aşağıda gösterildiği gibi görünecektir.
<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>
Aşağıdaki Jython kodunu proje klasörünün içindeki WEB-INF klasörüne JythonServlet.py olarak yerleştirin, bu önceki ServletTest.java ile eşdeğerdir.
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>"
)
Projeyi oluşturun ve tarayıcıda aşağıdaki URL'yi açın -
http://localhost:8080/jythonwebapp/jythonservlet.py
Tarayıcı şunu gösterecektir: Servlet Test Java Servlet çıktısı durumunda olduğu gibi <h1> etiketinde.
Jython, zxJDBC packageJDBC etrafında kullanımı kolay bir Python sarmalayıcı sağlar. zxJDBC iki standardı birbirine bağlar:JDBC Java'da veritabanı erişimi için standart platformdur ve DBI Python uygulamaları için standart veritabanı API'sidir.
ZxJDBC, JDBC'ye DBI 2.0 standardıyla uyumlu bir arabirim sağlar. JDBC için 200'den fazla sürücü mevcuttur ve hepsi zxJDBC ile çalışır. Aşağıdakiler dahil tüm önemli ilişkisel veritabanları için yüksek performanslı sürücüler mevcuttur:
- DB2
- Derby
- MySQL
- Oracle
- PostgreSQL
- SQLite
- SQL Server ve
- Sybase.
ZxJDBC paketi şuradan indirilebilir: https://sourceforge.net/projects/zxjdbc/ veya
MySQL veritabanı ile veritabanı bağlantısı kurmayı planlıyoruz. Bu amaçla MySQL için JDBC sürücüsü gereklidir. İndirMySQL J connector aşağıdaki bağlantıdan - https://dev.mysql.com/downloads/connector/j/ ve CLASSPATH'a mysql bağlayıcı java-5.1.42-bin.jar'ı dahil edin.
MySQL sunucusuna giriş yapın ve aşağıdaki yapıda test veritabanında bir öğrenci tablosu oluşturun -
Alan | Tür | Genişlik |
---|---|---|
İsim | Varchar | 10 |
Yaş | Int | 3 |
İşaretler | Int | 3 |
İçine birkaç kayıt ekleyin.
İsim | Yaş | İşaretler |
---|---|---|
Ravi | 21 | 78 |
Ashok | 20 | 65 |
Anil | 22 | 71 |
Aşağıdaki Jython betiğini şu şekilde oluşturun: 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 komut isteminden yukarıdaki komut dosyasını çalıştırın. Öğrenci tablosundaki kayıtlar aşağıda gösterildiği gibi listelenecektir -
(“Ravi”, 21, 78)
(“Ashok”, 20, 65)
(“Anil”,22,71)
Bu, Jython'da JDBC kurma prosedürünü açıklar.
Jython'un en önemli özelliklerinden biri, JDK'da Swing GUI kitaplığını kullanma yeteneğidir. Standart Python dağıtımı (genellikle CPython olarak adlandırılır),Tkinter GUI libraryonunla birlikte gönderildi. Gibi diğer GUI kitaplıklarıPyQt ve WxPython onunla birlikte kullanılabilir, ancak swing kitaplığı, platformdan bağımsız bir GUI araç seti sunar.
Swing kitaplığını Jython'da kullanmak, Java'da kullanmaya kıyasla çok daha kolaydır. Java'da, olay bağlamayı oluşturmak için anonim sınıflar kullanılmalıdır. Jython'da, aynı amaç için bir işlevi basitçe iletebiliriz.
Temel üst düzey pencere, bir nesnenin bir nesnesi bildirilerek oluşturulur. JFrame classve visible özelliğini true olarak ayarlayın. Bunun için Jframe sınıfının swing paketinden içe aktarılması gerekir.
from javax.swing import JFrame
JFrame sınıfı, değişen sayıda bağımsız değişkene sahip birden çok kurucuya sahiptir. Bir dizgeyi argüman olarak alan ve onu başlık olarak ayarlayan birini kullanacağız.
frame = JFrame(“Hello”)
Görünür özelliğini true olarak ayarlamadan önce çerçevenin boyutunu ve konum özelliklerini ayarlayın. Aşağıdaki kodu şu şekilde saklayınframe.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)
Yukarıdaki komut dosyasını komut isteminden çalıştırın. Bir pencereyi gösteren aşağıdaki çıktıyı gösterecektir.
Swing GUI kitaplığı şu şekilde sağlanır: javax.swingJava'da paket. Başlıca konteyner sınıfları,JFrame ve JDialogsırasıyla AWT kitaplığındaki Frame ve Dialog sınıflarından türetilir. Gibi diğer GUI kontrolleriJLabel, JButton, JTextField, vb., JComponent sınıfından türetilir.
Aşağıdaki şekilde Swing Paket Sınıfı hiyerarşisi gösterilmektedir.
Aşağıdaki tablo, bir swing kitaplığındaki farklı GUI kontrol sınıflarını özetlemektedir -
Sr.No. | Class & Description |
---|---|
1 | JLabel A JLabel object is a component for placing text in a container. |
2 | JButton This class creates a labeled button. |
3 | JColorChooser A JColorChooser provides a pane of controls designed to allow a user to manipulate and select a color. |
4 | JCheckBox A JCheckBox is a graphical component that can be in either an on (true) or off (false) state. |
5 | JRadioButton The JRadioButton class is a graphical component that can be either in an on (true) or off (false) state. in a group. |
6 | JList A JList component presents the user with a scrolling list of text items. |
7 | JComboBox A JComboBox component presents the user with drop down list of items |
8 | JTextField A JTextField object is a text component that allows for the editing of a single line of text. |
9 | JPasswordField A JPasswordField object is a text component specialized for password entry. |
10 | JTextArea A JTextArea object is a text component that allows editing of a multiple lines of text. |
11 | ImageIcon A ImageIcon control is an implementation of the Icon interface that paints Icons from Images |
12 | JScrollbar A Scrollbar control represents a scroll bar component in order to enable the user to select from range of values. |
13 | JOptionPane JOptionPane provides set of standard dialog boxes that prompt users for a value or informs them of something. |
14 | JFileChooser A JFileChooser control represents a dialog window from which the user can select a file. |
15 | JProgressBar As the task progresses towards completion, the progress bar displays the task's percentage of completion. |
16 | JSlider A JSlider lets the user graphically select a value by sliding a knob within a bounded interval. |
17 | JSpinner A JSpinner is a single line input field that lets the user select a number or an object value from an ordered sequence. |
We would be using some of these controls in subsequent examples.
Layout managers in Java are classes those, which manage the placement of controls in the container objects like Frame, Dialog or Panel. Layout managers maintain the relative positioning of controls in a frame, even if the resolution changes or the frame itself is resized.
These classes implement the Layout interface. The following Layout managers are defined in the AWT library −
- BorderLayout
- FlowLayout
- GridLayout
- CardLayout
- GridBagLayout
The following Layout Managers are defined in the Swing library −
- BoxLayout
- GroupLayout
- ScrollPaneLayout
- SpringLayout
We shall use AWT layout managers as well as swing layout managers in the following examples.
- Absolute Layout
- Flow Layout
- Grid Layout
- Border Layout
- Box Layout
- Group Layout
Let us now discuss each of these in detail.
Absolute Layout
Before we explore all the above Layout managers, we must look at absolute positioning of the controls in a container. We have to set the layout method of the frame object to ‘None’.
frame.setLayout(None)
Then place the control by calling the setBounds() method. It takes four arguments - x position, y position, width and height.
For example - To place a button object at the absolute position and with the absolute size.
btn = JButton("Add")
btn.setBounds(60,80,60,20)
Similarly, all controls can be placed by properly allocating position and size. This layout is relatively easy to use, but fails to retain its appearance when the window either is resized, or if the program is executed when screen resolution changes.
In the following Jython script, three Jlabel objects are used to display text “phy”, “maths” and “Total” respectively. In front of these three - JTextField objects are placed. A Button object is placed above the “Total” label.
First of all the JFrame window is created with a layout set to none.
frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(300,200)
frame.setLayout(None)
Ardından mutlak konum ve boyutlarına göre farklı kontroller eklenir. Kodun tamamı aşağıda verilmiştir -
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)
Yukarıdaki kodun çıktısı aşağıdaki gibidir.
Jython Akış Düzeni
FlowLayout, konteyner sınıfları için varsayılan düzen yöneticisidir. Soldan sağa ve ardından yukarıdan aşağıya doğru kontrolü düzenler.
Aşağıdaki örnekte, bir Jlabel nesnesi, bir JTextField nesnesi ve bir JButton nesnesi, FlowLayout yöneticisi kullanılarak bir JFrame'de görüntülenecektir. Başlangıç olarak, gerekli sınıfları şuradan içe aktaralım:javax.swing paket ve java.awt paketi.
from javax.swing import JFrame, JLabel, JButton, JTextField
from java.awt import FlowLayout
Ardından bir JFrame nesnesi oluşturun ve bunun yanı sıra boyut özelliklerini de ayarlayın.
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())
Şimdi JLabel, JTextfield ve JButton sınıfları için nesneler bildirin.
label = JLabel("Welcome to Jython Swing")
txt = JTextField(30)
btn = JButton("ok")
Son olarak, bu kontrolleri çerçeveye ekleyin. add() JFrame sınıfının yöntemi.
frame.add(label)
frame.add(txt)
frame.add(btn)
Çerçeveyi görüntülemek için, visible özelliğini true olarak ayarlayın. Tam Jython betiği ve çıktısı aşağıda verildiği gibidir -
from javax.swing import JFrame, JLabel, JButton, JTextField
from java.awt import FlowLayout
frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(200,200)
frame.setLayout(FlowLayout())
label = JLabel("Welcome to Jython Swing")
txt = JTextField(30)
btn = JButton("ok")
frame.add(label)
frame.add(txt)
frame.add(btn)
frame.setVisible(True)
Jython GridLayout
Gridlayout yöneticisi, kontrollerin dikdörtgen bir ızgaraya yerleştirilmesine izin verir. Izgaranın her hücresine bir kontrol yerleştirilir.
Aşağıdaki örnekte, GridLayout, onu 4 satıra ve 4 sütuna bölen bir JFrame nesnesine uygulanır. Izgaranın her hücresine bir JButton nesnesi yerleştirilmelidir.
Önce gerekli kitaplıkları içe aktaralım -
from javax.swing import JFrame, JButton
from java.awt import GridLayout
Ardından JFrame kapsayıcısını oluşturun -
frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(400,400)
Şimdi, boyutlarını 4 x 4 olarak belirterek GridLayout uygulayın.
frame.setLayout(GridLayout(4,4))
Şimdi her biri 1'den 4'e giden iki FOR döngüsü kullanmalıyız, böylece on altı JButton nesnesi sonraki hücrelere yerleştirilir.
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)))
Son olarak çerçevenin görünürlüğünü true olarak ayarlayın. Tam Jython kodu aşağıda verilmiştir.
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)
Yukarıdaki kodun çıktısı aşağıdaki gibidir -
Jython Kenarlık Düzeni
BorderLayout yöneticisi, kabı beş coğrafi bölgeye böler ve her bölgede bir bileşenle yerleştirir. Bu bölgeler, aşağıdaki gibi tanımlanmış sabitlerle temsil edilir -
- BorderLayout.NORTH
- BorderLayout.SOUTH
- BorderLayout.EAST
- BorderLayout.WEST
- BorderLayout.CENTER
Şu örneği ele alalım -
Jython Kutusu Düzeni
BoxLayout sınıfı, javax.swing package. Kaptaki bileşenleri dikey veya yatay olarak düzenlemek için kullanılır. Yön, aşağıdaki sabitler tarafından belirlenir -
- X_AXIS
- Y_AXIS
- LINE_AXIS
- PAGE_AXIS
Tamsayı sabiti, konteynerin bileşenlerinin düzenlenmesi gereken ekseni belirtir. Konteyner varsayılan bileşen oryantasyonuna sahip olduğunda, LINE_AXIS bileşenlerin soldan sağa yerleştirileceğini belirtir ve PAGE_AXIS bileşenlerin yukarıdan aşağıya yerleştirileceğini belirtir.
Aşağıdaki örnekte, panel (JPanel sınıfından) bir JFrame nesnesine eklenmiştir. Dikey Kutu Düzeni buna uygulanır ve üst ve alt olmak üzere iki panel daha eklenir. Bu iki dahili panelin her biri yatay Kutu düzenine eklenen iki düğme vardır.
Önce üst düzey JFrame penceresini oluşturalım.
frame = JFrame()
frame.setTitle("Buttons")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setSize(300, 150)
JPanel nesnesinin dikey bir BoxLayout'a sahip olduğu bildirildi. Üst düzey çerçeveye ekleyin.
panel = JPanel()
panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS))
frame.add(panel)
Bu panele üstte ve altta iki panel daha eklenir. Her birine yatay olarak eklenmiş iki JButton nesnesi var ve bunları birbirinden ayıran 25 piksellik bir boşluk tutucu var.
###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)
Aynı şekilde alt panel de yapılmıştır.
###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())
Unutmayın ki createRigidArea()işlevi, iki düğme arasında 25 piksellik bir boşluk oluşturmak için kullanılır. AyrıcacreateVerticalGlue() işlevi düzende baştaki veya sondaki boşluğu kaplar.
Başlangıç olarak, üst ve alt panelleri ekleyin ve çerçevenin görünürlük özelliğini true olarak ayarlayın. Kodun tamamı aşağıdaki gibidir -
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)
Yukarıdaki kod aşağıdaki çıktıyı üretecektir.
Jython Grup Düzeni
GroupLayout yöneticisi, bileşenleri hiyerarşik bir şekilde gruplar. Gruplama iki sınıf tarafından yapılır,SequentialGroup ve ParallelGroup, her ikisi de Java'da Grup arayüzünü uygular.
Düzen prosedürü iki adıma bölünmüştür. Tek aşamada, bileşenler yatay eksen boyunca ve ikinci aşamada dikey eksen boyunca yerleştirilir. Her bileşen düzende iki kez tanımlanmalıdır.
Sıralı ve paralel olmak üzere iki tür düzenleme vardır. Her ikisinde de bileşenleri sıralı veya paralel olarak düzenleyebiliriz. Yatay düzenlemede satıra sıralı grup, sütun ise paralel grup olarak adlandırılır. Öte yandan paralel düzenlemede, eleman sırası paralel bir grup ve sıralı olarak adlandırılan bir sütundur.
Aşağıdaki örnekte, beş düğme, her biri sıra ve sütunda üç tane görünecek şekilde düzenlenmiştir. Başlangıç olarak, bir JFrame penceresine bir Jpanel nesnesi ekleyin ve düzenini Grouplayout olarak ayarlayın.
frame = JFrame()
panel = JPanel()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
layout = GroupLayout(panel)
panel.setLayout(layout)
Ardından JButton nesnelerini oluşturun -
buttonD = JButton("D")
buttonR = JButton("R")
buttonY = JButton("Y")
buttonO = JButton("O")
buttonT = JButton("T")
Sonra, bir SequentialGroup isimli LeftToRighthangi butonD ve butonY'nin eklendiği. Aralarına, bir ParallelGroup ColumnMiddle (diğer üç düğmenin dikey olarak eklendiği) yerleştirilir.
leftToRight = layout.createSequentialGroup()
leftToRight.addComponent(buttonD)
columnMiddle = layout.createParallelGroup()
columnMiddle.addComponent(buttonR)
columnMiddle.addComponent(buttonO)
columnMiddle.addComponent(buttonT)
leftToRight.addGroup(columnMiddle)
leftToRight.addComponent(buttonY)
Şimdi, TopToBottom adı verilen dikey Sıralı Grup tanımı geliyor. Üç düğmeden oluşan bir ParallelGroup satırı ekleyin ve ardından iki düğmeyi dikey olarak dinlendirin.
topToBottom = layout.createSequentialGroup()
rowTop = layout.createParallelGroup()
rowTop.addComponent(buttonD)
rowTop.addComponent(buttonR)
rowTop.addComponent(buttonY)
topToBottom.addGroup(rowTop)
topToBottom.addComponent(buttonO)
topToBottom.addComponent(buttonT)
Son olarak, LeftToRight grubunu yatay olarak ve TopToBottom grubunu dikey olarak düzen nesnesine ayarlayın. Kodun tamamı aşağıda verilmiştir -
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)
Yukarıdaki kodun çıktısı aşağıdaki gibidir -
Java salınımında olay işleme, denetimin (JButton veya JList vb.) İlgili olay dinleyicisine kaydedilmesini gerektirir. Olay dinleyici arabirimi veya karşılık gelen Adapter sınıfının, olay işleme yöntemi geçersiz kılınarak uygulanması veya alt sınıflara alınması gerekir. Jython'da olay yönetimi çok basittir. Denetime karşılık gelen olay işleme işlevinin özelliği olarak herhangi bir işlevi geçirebiliriz.
Öncelikle Java'da bir tıklama olayının nasıl işlendiğini görelim.
Başlamak için, java.awt.event package. Daha sonra, JFrame'i genişleten sınıf, ActionListener arabirimini uygulamalıdır.
public class btnclick extends JFrame implements ActionListener
Ardından, JButton nesnesini bildirmeli, onu çerçevenin ContentPane'ine eklemeli ve addActionListener () yöntemiyle ActionListener ile kaydetmeliyiz.
JButton b1 = new JButton("Click here");
getContentPane().add(b1);
b1.addActionListener(this);
Şimdi, ActionEvent'i işlemek için ActionListener arabiriminin actionPerformed () yöntemi geçersiz kılınmalıdır.
Java kodunun tamamı aşağıdadır -
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);
}
}
Şimdi aynı koda eşdeğer Jython kodunu yazacağız.
Başlangıç olarak, ActionEvent'i veya ActionListener'ı içe aktarmamıza gerek yoktur, çünkü Jython'un dinamik yazımı, kodumuzda bu sınıflardan bahsetmekten kaçınmamıza olanak tanır.
İkinci olarak, ActionListener'ı uygulamaya veya alt sınıflara ayırmaya gerek yoktur. Bunun yerine, herhangi bir kullanıcı tanımlı işlev JButton yapıcısına bir değer olarak sağlanır.actionPerformed fasulye özelliği.
button = JButton('Click here!', actionPerformed = clickhere)
clickhere() işlev, düğmedeki tıklama olayını işleyen normal bir Jython işlevi olarak tanımlanır.
def change_text(event):
print clicked!'
İşte Jython eşdeğer kodu.
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 ve Jython kodunun Çıktısı aynıdır. Düğmeye tıklandığında, konsolda 'tıklandı' mesajı yazdırılacaktır.
Aşağıdaki Jython kodunda, 'phy' ve 'maths'ye işaretler girmek için JFrame penceresinde iki JTextField nesnesi sağlanmıştır. JButton nesnesi, tıklandığında add () işlevini yürütür.
btn = JButton("Add", actionPerformed = add)
Add () işlevi, getText () yöntemi ile iki metin alanının içeriğini okur ve bunları tamsayılara ayrıştırır, böylece ekleme işlemi gerçekleştirilebilir. Sonuç daha sonra setText () yöntemi ile üçüncü metin alanına yerleştirilir.
def add(event):
print "add"
ttl = int(txt1.getText())+int(txt2.getText())
txt3.setText(str(ttl))
Kodun tamamı aşağıda verilmiştir -
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)
Yukarıdaki kod komut isteminden çalıştırıldığında aşağıdaki pencere açılır. 'Phy', Maths 'için işaretler girin ve' Ekle 'düğmesine tıklayın. Sonuç buna göre görüntülenecektir.
Jython JRadioButton Etkinliği
JRadioButton sınıfı, javax.swing package. Açık veya kapalı durumları olan seçilebilir bir geçiş düğmesi oluşturur. Bir ButtonGroup'a birden çok radyo düğmesi eklenirse, bunların seçimi birbirini dışlar.
Aşağıdaki örnekte, JRadioButton sınıfının iki nesnesi ve iki JLabel, dikey bir BoxLayout'taki bir Jpanel kapsayıcısına eklenir. JRadioButton nesnelerinin yapıcısında,OnCheck()function, actionPerformed özelliğinin değeri olarak ayarlanır. Bu işlev, durumunu değiştirmek için radyo düğmesine tıklandığında çalıştırılır.
rb1 = JRadioButton("Male", True,actionPerformed = OnCheck)
rb2 = JRadioButton("Female", actionPerformed = OnCheck)
Radyo Düğmesinin varsayılan durumunun yanlış (seçili değil) olduğunu unutmayın. Rb1 düğmesi, başlangıç durumu True (seçili) olacak şekilde oluşturulur.
İki radyo düğmesi, bir radyo ButtonGroup'a eklenir ve birbirlerini karşılıklı olarak dışlar, böylece biri seçilirse diğerinin seçimi otomatik olarak kaldırılır.
grp = ButtonGroup()
grp.add(rb1)
grp.add(rb2)
İki etiketle birlikte bu iki radyo düğmesi, rb2 ve lbl2 arasındaki yüksekliklerde 25 piksellik bir ayırıcı alana sahip dikey mizanpajdaki bir panel nesnesine eklenir.
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)
Bu panel, görünür özelliği sonunda 'True' olarak ayarlanan üst düzey bir JFrame nesnesine eklenir.
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)
Yukarıdaki Jython komut dosyasını çalıştırın ve radyo düğmesi seçimini değiştirin. Seçim, alttaki etikette görünecektir.
Jython JCheckBox Etkinliği
Gibi JRadioButtonJCheckBox nesnesi, başlığının yanı sıra dikdörtgen bir işaretlenebilir kutucuğa sahip seçilebilir bir düğmedir. Bu genellikle, kullanıcıya öğeler listesinden birden çok seçenek seçme fırsatı sağlamak için kullanılır.
Aşağıdaki örnekte, iki onay kutusu ve esnek paketten bir etiket, dikey BoxLayout'taki bir JPanel'e eklenmiştir. Alttaki etiket, iki onay kutusunun anlık seçim durumunu gösterir.
Her iki onay kutusu da actionPerformed özelliği şu şekilde ayarlanmış yapıcıyla bildirilir: OnCheck() işlevi.
box1 = JCheckBox("Check1", actionPerformed = OnCheck)
box2 = JCheckBox("Check2", actionPerformed = OnCheck)
OnCheck () işlevi, her bir onay kutusunun seçim durumunu doğrular ve alttaki etikette ilgili mesajı görüntüler.
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"
Bu kutular ve bir JLabel nesnesi, aralarına 50 piksel yüksekliğinde bir boşluk tutucuyla bir JPanel'e eklenir.
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)
Panelin kendisi, görünür özelliği sonunda true olarak ayarlanan üst düzey bir JFrame penceresine eklenir.
frame = JFrame("JCheckBox Example")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(250,150)
frame.add(panel)
frame.setVisible(True)
Yukarıdaki kodu çalıştırın ve onay kutularının seçimini deneyin. Her iki onay kutusunun anlık durumu altta görüntülenir.
Jython JList Etkinliği
Esnek paketteki JList kontrolü, kullanıcıya seçmesi için kaydırılabilir bir öğe listesi sağlar. JComboBox, bir açılır öğe listesi sağlar. Java'da, seçim olayı, ListSelectionListener'da valueChanged () yöntemi uygulanarak işlenir. Jython'da, JList nesnesinin valueChanged özelliğine bir olay işleyicisi atanır.
Aşağıdaki örnekte, BorderLayout'taki bir JFrame'e bir JList nesnesi ve bir etiket eklenmiştir. JList, bir gruptaki bir öğe koleksiyonuyla doldurulur. ValueChanged özelliği listSelect () işlevine ayarlanır.
lang = ("C", "C++", "Java", "Python", "Perl", "C#", "VB", "PHP", "Javascript", "Ruby")
lst = JList(lang, valueChanged = listSelect)
Olay işleyici işlevi, seçilen öğenin dizinini alır ve ilgili öğeyi alttaki etikette görüntülenmek üzere JList nesnesinden alır.
def listSelect(event):
index = lst.selectedIndex
lbl1.text = "Hello" + lang[index]
JList ve JLabel nesnesi, BorderLayout kullanılarak JFrame'e eklenir.
Kodun tamamı aşağıda verilmiştir -
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)
Aşağıdaki kodun çıktısı aşağıdaki gibidir.
GUI tabanlı uygulamaların çoğunun üstte bir Menü çubuğu vardır. En üst düzey pencerenin başlık çubuğunun hemen altında bulunur. Javax.swing paketi, verimli bir menü sistemi oluşturmak için ayrıntılı bir özelliğe sahiptir. Yardımı ile inşa edilmiştirJMenuBar, JMenu ve JMenuItem sınıflar.
Aşağıdaki örnekte, üst düzey pencerede bir menü çubuğu sağlanmıştır. Menü çubuğuna üç menü öğesi düğmesinden oluşan bir Dosya menüsü eklenir. Şimdi düzen BorderLayout olarak ayarlanmış bir JFrame nesnesi hazırlayalım.
frame = JFrame("JMenuBar example")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(400,300)
frame.setLayout(BorderLayout())
Şimdi, SetJMenuBar () yöntemi tarafından bir JMenuBar nesnesi etkinleştirilir.
bar = JMenuBar()
frame.setJMenuBar(bar)
Daha sonra, 'Dosya' başlığına sahip bir JMenu nesnesi bildirilir. Dosya menüsüne üç JMenuItem düğmesi eklenir. Menü öğelerinden herhangi birine tıklandığında, ActionEvent işleyici OnClick () işlevi çalıştırılır. ActionPerformed özelliğiyle tanımlanır.
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 () olay işleyicisi, JMenuItem düğmesinin adını gwtActionCommand () işlevi ile alır ve pencerenin altındaki metin kutusunda görüntüler.
def OnClick(event):
txt.text = event.getActionCommand()
Dosya menü nesnesi menü çubuğuna eklenir. Son olarak, JFrame nesnesinin altına bir JTextField denetimi eklenir.
txt = JTextField(10)
frame.add(txt, BorderLayout.SOUTH)
Menu.py kodunun tamamı aşağıda verilmiştir -
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)
Yukarıdaki komut dosyası Jython yorumlayıcısı kullanılarak yürütüldüğünde, Dosya menüsünü içeren bir pencere açılır. Üzerine tıklayın ve üç menü öğesi açılır. Herhangi bir düğmeye tıklanırsa, metin kutusu kontrolünde adı görüntülenecektir.
İletişim kutusu nesnesi, kullanıcının etkileşimde bulunduğu temel pencerenin üstünde görünen bir penceredir. Bu bölümde, swing kütüphanesinde tanımlanan önceden yapılandırılmış diyalogları göreceğiz. OnlarMessageDialog, ConfirmDialog ve InputDialog. JOptionPane sınıfının statik yöntemi nedeniyle kullanılabilirler.
Aşağıdaki örnekte, Dosya menüsünde yukarıdaki üç iletişim kutusuna karşılık gelen üç JMenu öğesi vardır; her biriOnClick olay işleyicisi.
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 () işleyici işlevi, Menü Öğesi düğmesinin başlığını alır ve ilgili showXXXDialog () yöntemini çağırır.
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")
Menüden mesaj seçeneği seçilirse, bir mesaj açılır. Giriş seçeneği tıklanırsa, giriş isteyen bir iletişim kutusu açılır. Giriş metni daha sonra JFrame penceresindeki metin kutusunda görüntülenir. Onayla seçeneği seçilirse, EVET, HAYIR ve İPTAL olmak üzere üç düğmeli bir iletişim kutusu açılır. Kullanıcının seçimi metin kutusuna kaydedilir.
Kodun tamamı aşağıda verilmiştir -
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)
Yukarıdaki komut dosyası yürütüldüğünde, menüde üç seçenekle aşağıdaki pencere görüntülenir -