Jython - Olay İşleme

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, ç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 yok, çünkü Jython'un dinamik yazımı, kodumuzda bu sınıflardan bahsetmekten kaçınmamıza izin veriyor.

İ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, JFrame penceresinde 'phy' ve 'maths'ye işaretler girmek için 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 yürütüldüğünde 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 eklenerek birbirlerini birbirini 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ı alanla 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ğu olan seçilebilir bir düğmedir. Bu genellikle kullanıcıya öğeler listesinden birden fazla seçenek seçme fırsatı sağlamak için kullanılır.

Aşağıdaki örnekte, iki onay kutusu ve hareketli 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 karşılık gelen 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.