cb.py
#!/usr/bin/jython
# cb.py -- the old 'ColorButtons.java' demo, in Jython
import java.lang
import javax.swing
import java.awt
import java.awt.event
def exit(event):
"""Exit the JVM."""
print "Aaarrrggghhh!"
java.lang.System.exit(0)
class BgSetter:
"""A callback object to set a panel's background color."""
def __init__(self,panel,color):
self.panel = panel
self.color = color
def doit(self,event):
self.panel.setBackground(self.color)
class ButtonPanel(javax.swing.JPanel):
"""A panel with buttons to set its background color."""
def __init__(self):
bgcolors = [
["Red",java.awt.Color.RED],
["Yellow",java.awt.Color.YELLOW],
["Green",java.awt.Color.GREEN],
["Cyan",java.awt.Color.CYAN],
["Magenta",java.awt.Color.MAGENTA],
["Orange",java.awt.Color.ORANGE],
["Gray",java.awt.Color.GRAY],
["Light gray",java.awt.Color.LIGHT_GRAY],
["Dark gray",java.awt.Color.DARK_GRAY],
["Black",java.awt.Color.BLACK],
["White",java.awt.Color.WHITE],
]
for name,color in bgcolors:
self.mkButton(name,color)
def mkButton(self,name,bg):
"""Add one button, with callback, to this panel."""
setter = BgSetter(self,bg) # Action object.
jb = javax.swing.JButton(name,actionPerformed=setter.doit)
self.add(jb)
ss = java.awt.Toolkit.getDefaultToolkit().getScreenSize()
win = javax.swing.JFrame("Color buttons in Jython",windowClosing=exit)
win.setSize(ss.width/3,ss.height/6)
win.setLocation(ss.width/3,2*ss.height/6)
win.contentPane.add(ButtonPanel(),java.awt.BorderLayout.CENTER)
win.show()