8

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

JButton("Push me", actionPerformed = nameOfFunctionToCall)

然而,在课堂上尝试同样的事情变得很困难。天真地尝试

JButton("Push me", actionPerformed = nameOfMethodToCall)

或者

JButton("Push me", actionPerformed = nameOfMethodToCall(self))

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

JButton("Push me", actionPerformed = lambda evt : ClassName.nameOfMethodToCall(self))

它有效,但优雅消失了。这一切只是因为被调用的方法需要从某个地方进行自我引用。有没有其他方法可以解决这个问题?

4

1 回答 1

11
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()
于 2009-02-07T08:35:51.017 回答