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()