Java 与Jython&;摆动

Java 与Jython&;摆动,java,python,user-interface,swing,jython,Java,Python,User Interface,Swing,Jython,我正在使用Jython的Swing制作GUI。Jython的事件处理似乎特别优雅,刚刚设置 JButton("Push me", actionPerformed = nameOfFunctionToCall) 然而,在一个类中尝试同样的事情会变得困难。天真的尝试 JButton("Push me", actionPerformed = nameOfMethodToCall) 或 从GUI构造类的方法不起作用,因为要调用的方法的第一个参数应该是self,以便访问类的数据成员,另一方面,不可能通

我正在使用Jython的Swing制作GUI。Jython的事件处理似乎特别优雅,刚刚设置

JButton("Push me", actionPerformed = nameOfFunctionToCall)
然而,在一个类中尝试同样的事情会变得困难。天真的尝试

JButton("Push me", actionPerformed = nameOfMethodToCall)

从GUI构造类的方法不起作用,因为要调用的方法的第一个参数应该是self,以便访问类的数据成员,另一方面,不可能通过AWT事件队列将任何参数传递给事件处理程序。唯一的选择似乎是使用lambda(如建议的那样),其结果如下:

JButton("Push me", actionPerformed = lambda evt : ClassName.nameOfMethodToCall(self))
它起作用了,但优雅已经消失了。所有这些仅仅是因为被调用的方法需要来自某个地方的自引用。还有别的办法吗

JButton("Push me", actionPerformed=self.nameOfMethodToCall)
下面是您引用的文章中的一个修改示例:

from javax.swing import JButton, JFrame

class MyFrame(JFrame):
    def __init__(self):
        JFrame.__init__(self, "Hello Jython")
        button = JButton("Hello", actionPerformed=self.hello)
        self.add(button)

        self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        self.setSize(300, 300)
        self.show()

    def hello(self, event):
        print "Hello, world!"

if __name__=="__main__":
    MyFrame()

哇,太简单了!谢谢这种方法似乎同时向方法发送自引用和事件,因此需要将其定义为:def nameOfMethodToCall(self,evt),这很好@JoonasPulakka:如果你想调用一个类方法,只需使用
classname.method
而不是
self.method
from javax.swing import JButton, JFrame

class MyFrame(JFrame):
    def __init__(self):
        JFrame.__init__(self, "Hello Jython")
        button = JButton("Hello", actionPerformed=self.hello)
        self.add(button)

        self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        self.setSize(300, 300)
        self.show()

    def hello(self, event):
        print "Hello, world!"

if __name__=="__main__":
    MyFrame()