1 package jp.naist.se.stigmata.ui.swing;
\r
7 import java.awt.BorderLayout;
\r
8 import java.awt.Color;
\r
9 import java.awt.Dimension;
\r
10 import java.awt.Graphics2D;
\r
11 import java.awt.Point;
\r
12 import java.awt.Polygon;
\r
13 import java.awt.event.ActionEvent;
\r
14 import java.awt.event.ActionListener;
\r
15 import java.awt.image.BufferedImage;
\r
17 import javax.swing.Icon;
\r
18 import javax.swing.ImageIcon;
\r
19 import javax.swing.JButton;
\r
20 import javax.swing.JMenuItem;
\r
21 import javax.swing.JPanel;
\r
22 import javax.swing.JPopupMenu;
\r
28 * @version $Revision$ $Date$
\r
30 public class PopupButton extends JPanel{
\r
31 private static final long serialVersionUID = -4428839967597028837L;
\r
33 private JButton button;
\r
34 private JPopupMenu popup;
\r
35 private JButton arrowButton;
\r
38 public PopupButton(JButton initButton){
\r
39 setLayout(new BorderLayout());
\r
41 button = initButton;
\r
42 icon = createIcon();
\r
43 arrowButton = new JButton(icon);
\r
44 popup = new JPopupMenu();
\r
45 add(button, BorderLayout.CENTER);
\r
46 add(arrowButton, BorderLayout.EAST);
\r
48 arrowButton.addActionListener(new ActionListener(){
\r
49 public void actionPerformed(ActionEvent e){
\r
50 Point p = button.getLocation();
\r
51 popup.show(PopupButton.this, p.x, button.getHeight());
\r
58 public void setEnabled(boolean enabled){
\r
59 super.setEnabled(enabled);
\r
60 button.setEnabled(enabled);
\r
61 arrowButton.setEnabled(enabled);
\r
64 public JButton getButton(){
\r
68 public JMenuItem addMenuItem(JMenuItem menuItem){
\r
69 return popup.add(menuItem);
\r
72 public void updateUI(){
\r
75 Dimension prefferedSize = button.getPreferredSize();
\r
77 arrowButton.setPreferredSize(new Dimension(icon.getIconWidth() + 4, prefferedSize.height));
\r
78 setPreferredSize(new Dimension(prefferedSize.width + icon.getIconWidth() + 4, prefferedSize.height));
\r
80 Dimension maxSize = button.getMaximumSize();
\r
81 arrowButton.setMaximumSize(new Dimension(icon.getIconWidth() + 4, maxSize.height));
\r
82 setMaximumSize(new Dimension(maxSize.width + icon.getIconWidth() + 4, maxSize.height));
\r
84 Dimension minSize = button.getMinimumSize();
\r
85 arrowButton.setMaximumSize(new Dimension(icon.getIconWidth() + 4, minSize.height));
\r
86 setMinimumSize(new Dimension(minSize.width + icon.getIconWidth() + 4, minSize.height));
\r
88 arrowButton.setSize(arrowButton.getPreferredSize());
\r
89 setSize(getPreferredSize());
\r
93 private Icon createIcon(){
\r
94 BufferedImage image = new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB);
\r
95 Graphics2D g = image.createGraphics();
\r
96 int[] x = new int[] { 0, 5, 10, };
\r
97 int[] y = new int[] { 3, 8, 3, };
\r
98 Polygon polygon = new Polygon(x, y, x.length);
\r
99 g.setColor(Color.black);
\r
102 return new ImageIcon(image);
\r