Jython 事件处理
Java中的事件处理要求控件(如JButton或JList等)应该与相应的事件监听器进行注册。事件监听器接口或相应的适配器类需要实现或继承,并重写其事件处理方法。在Jython中,事件处理非常简单。我们可以将任意函数作为控件对应的事件处理函数的属性传递。
首先让我们看看在Java中如何处理点击事件。
首先,我们必须导入 java.awt.event 包。接下来,扩展JFrame类的类必须实现ActionListener接口。
然后,我们需要声明JButton对象,将它添加到frame的ContentPane中,并使用addActionListener()方法将其注册到ActionListener。
现在,必须重写ActionListener接口的actionPerformed()方法来处理ActionEvent事件。
以下是完整的Java代码:
现在,我们将编写与相同代码等效的Jython代码。
首先,我们不需要导入ActionEvent或ActionListener,因为Jython的动态类型使我们可以避免在代码中提及这些类。
其次,没有必要实现或子类化ActionListener。相反,任何用户定义的函数都可以直接作为actionPerformed bean属性的JButton构造函数的值。
在按钮上处理点击事件的 clickhere() 函数被定义为一个常规的 Jython 函数。
这是Jython等效的代码。
Java和Jython代码的输出是相同的。当按钮被点击时,它将在控制台上打印“clicked”的消息。
在下面的Jython代码中,在JFrame窗口上提供了两个JTextField对象,用于输入“phy”和“maths”中的分数。当点击JButton对象时,执行add()函数。
add()函数通过getText()方法读取两个文本字段的内容并将其解析为整数,从而可以进行加法运算。然后,通过setText()方法将结果放入第三个文本字段中。
完整的代码如下 –
当上述代码从命令提示符执行时,将出现以下窗口。输入“物理”和“数学”的分数,并单击“添加”按钮。结果将相应显示。
Jython JRadioButton事件
JRadioButton类定义在 javax.swing包 中。它创建一个可选的开关按钮,有开和关两种状态。如果多个单选按钮被添加到一个ButtonGroup中,它们的选择是互斥的。
在下面的示例中,两个JRadioButton对象和两个JLabel被添加到一个Jpanel容器中,使用垂直BoxLayout布局。在JRadioButton对象的构造函数中,将 OnCheck() 函数设置为actionPerformed属性的值。当点击单选按钮改变状态时,该函数将被执行。
请注意,默认情况下单选按钮的状态为false(未选中)。按钮rb1在创建时其初始状态为True(选中)。
这两个单选按钮被添加到一个单选按钮组中,使它们互斥,这样如果其中一个被选中,另一个会自动被取消选中。
这两个单选按钮和两个标签添加到面板对象中,使用垂直布局,rb2和lbl2之间的分隔区域高度为25像素。
此面板添加到一个顶级的JFrame对象中,其visible属性在最后设置为“True”。
运行上述Jython脚本并更改单选按钮的选择。选择将显示在底部的标签中。
Jython JCheckBox事件
像JRadioButton一样,JCheckBox对象也是一个具有矩形可选框的可选按钮,并带有其标题。通常用于提供用户从项目列表中选择多个选项的机会。
在以下示例中,两个复选框和一个来自swing包的标签被添加到具有垂直BoxLayout的JPanel中。底部的标签显示两个复选框的即时选择状态。
两个复选框均使用构造函数声明,其中actionPerformed属性设置为OnCheck()函数。
OnCheck()函数会验证每个复选框的选择状态,并在底部的标签上显示相应的消息。
这些框和一个JLabel对象被添加到一个JPanel中,它们之间有一个高度为50像素的空间占位符。
面板本身被添加到一个顶级JFrame窗口中,其visible属性在最后被设置为true。
运行以上代码并尝试选择复选框。两个复选框的即时状态将显示在底部。
Jython JList事件
Swing包中的JList控件提供了一个可滚动的条目列表供用户选择。JComboBox提供了一个下拉列表供用户选择。在Java中,选择事件通过在ListSelectionListener中实现valueChanged()方法来处理。在Jython中,一个事件处理器被分配给JList对象的valueChanged属性。
在下面的示例中,一个JList对象和一个标签被添加到一个BorderLayout的JFrame中。JList被填充了一个元组中的一系列条目。它的valueChanged属性被设置为listSelect()函数。
事件处理程序函数获取所选项目的索引,并从JList对象中获取相应的项目以在底部的标签上显示。
使用BorderLayout将JList和JLabel对象添加到JFrame中。
整个代码如下所示−
以下代码的输出如下: