def add_template(self,name,constructor,image): icon = ImageIcon(image) if icon.iconWidth>self.max_icon_width: icon = ImageIcon(icon.image.getScaledInstance(self.max_icon_width,icon.iconHeight*self.max_icon_width/icon.iconWidth,Image.SCALE_SMOOTH)) panel = JPanel(layout = BorderLayout(),opaque = False) button = JButton(icon = icon,toolTipText = name.replace('\n',' '), borderPainted = False,focusPainted = False,contentAreaFilled = False,margin = java.awt.Insets(0,0,0,0), verticalTextPosition = AbstractButton.BOTTOM,horizontalTextPosition = AbstractButton.CENTER, mousePressed = lambda e: e.source.transferHandler.exportAsDrag(e.source,e,TransferHandler.COPY)) button.transferHandler = self panel.add(button) text = '<html><center>%s</center></html>'%name.replace('\n','<br/>') label = JLabel(text,horizontalAlignment = SwingConstants.CENTER,foreground = Color.WHITE) self.labels.append(label) panel.add(label,BorderLayout.SOUTH) self.panels.append(panel) panel.alignmentY = Component.CENTER_ALIGNMENT panel.border = BorderFactory.createEmptyBorder(2,1,2,1) panel.maximumSize = panel.preferredSize self.panel.add(panel) self.templates[button] = constructor