69 lines
1.9 KiB
Python
Executable file
69 lines
1.9 KiB
Python
Executable file
|
|
from jep import *
|
|
|
|
from javax.swing import *
|
|
from java.awt import *
|
|
from java.awt.event import *
|
|
|
|
printStack(True)
|
|
|
|
# port of:
|
|
# http://java.sun.com/docs/books/tutorial/uiswing/learn/examples/SwingApplication.java
|
|
|
|
class SwingApplication:
|
|
labelPrefix = "Number of button clicks: "
|
|
numClicks = 0
|
|
label = JLabel(labelPrefix + "0 ")
|
|
|
|
def createComponents(self):
|
|
button = JButton("I'm a Swing button!")
|
|
button.setMnemonic(KeyEvent.VK_I)
|
|
button.addActionListener(jproxy(self,
|
|
['java.awt.event.ActionListener']))
|
|
self.label.setLabelFor(button)
|
|
|
|
# An easy way to put space between a top-level container
|
|
# and its contents is to put the contents in a JPanel
|
|
# that has an "empty" border.
|
|
|
|
pane = JPanel(GridLayout(0, 1))
|
|
pane.add(button)
|
|
pane.add(self.label)
|
|
pane.setBorder(BorderFactory.createEmptyBorder(
|
|
30, #top
|
|
30, #left
|
|
10, #bottom
|
|
30)) #right
|
|
|
|
return pane
|
|
|
|
|
|
def actionPerformed(self, e):
|
|
self.numClicks += 1
|
|
self.label.setText(self.labelPrefix + str(self.numClicks))
|
|
|
|
|
|
# Create the GUI and show it. For thread safety,
|
|
# this method should be invoked from the
|
|
# event-dispatching thread.
|
|
def createAndShowGUI():
|
|
#Make sure we have nice window decorations.
|
|
JFrame.setDefaultLookAndFeelDecorated(True)
|
|
|
|
#Create and set up the window.
|
|
frame = JFrame("SwingApplication")
|
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
|
|
|
|
app = SwingApplication()
|
|
contents = app.createComponents()
|
|
frame.getContentPane().add(contents, BorderLayout.CENTER)
|
|
|
|
#Display the window.
|
|
frame.pack()
|
|
frame.setVisible(True)
|
|
|
|
|
|
if(__name__ == '__main__'):
|
|
#Schedule a job for the event-dispatching thread:
|
|
#creating and showing this application's GUI.
|
|
createAndShowGUI()
|