SpecialistOff.NET / Вопросы / Статьи / Фрагменты кода / Резюме / Метки / Помощь / Файлы
НазадМетки: python
You can easily inherit from standard Java library classes in Jython. Here’s the Dialogs.java example from Thinking in Java, converted into Jython:
# Jython/PythonDialogs.py # Dialogs.java from "Thinking in Java" converted into Jython. from java.awt import FlowLayout from javax.swing import JFrame, JDialog, JLabel from javax.swing import JButton class MyDialog(JDialog): def __init__(self, parent=None): JDialog.__init__(self, title="My dialog", modal=1) self.contentPane.layout = FlowLayout() self.contentPane.add(JLabel("A dialog!")) self.contentPane.add(JButton("OK", actionPerformed = lambda e, t=self: t.dispose())) self.pack() frame = JFrame("Dialogs", visible=1, defaultCloseOperation=JFrame.EXIT_ON_CLOSE) dlg = MyDialog() frame.contentPane.add( JButton("Press here to get a Dialog Box", actionPerformed = lambda e: dlg.show())) frame.pack()
MyDialog is inherited from JDialog, and you can see named arguments being used in the call to the base-class constructor.
In the creation of the “OK” JButton, note that the actionPerformed method is set right inside the constructor, and that the function is created using the Python lambda keyword. This creates a nameless function with the arguments appearing before the colon and the expression that generates the returned value after the colon. As you should know, the Java prototype for the actionPerformed() method only contains a single argument, but the lambda expression indicates two. However, the second argument is provided with a default value, so the function can be called with only one argument. The reason for the second argument is seen in the default value, because this is a way to pass self into the lambda expression, so that it can be used to dispose of the dialog.
Compare this code with the version that’s published in Thinking in Java. You’ll find that Python language features allow a much more succinct and direct implementation.