OSDN Git Service

fixed import
[stigmata/stigmata.git] / src / main / java / jp / naist / se / stigmata / ui / swing / PopupButton.java
1 package jp.naist.se.stigmata.ui.swing;\r
2 \r
3 /*\r
4  * $Id$\r
5  */\r
6 \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
16 \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
23 \r
24 /**\r
25  * Popup button.\r
26  * \r
27  * @author tamada\r
28  * @version $Revision$ $Date$\r
29  */\r
30 public class PopupButton extends JPanel{\r
31     private static final long serialVersionUID = -4428839967597028837L;\r
32 \r
33     private JButton button;\r
34     private JPopupMenu popup;\r
35     private JButton arrowButton;\r
36     private Icon icon;\r
37 \r
38     public PopupButton(JButton initButton){\r
39         setLayout(new BorderLayout());\r
40 \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
47 \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
52             }\r
53         });\r
54         updateUI();\r
55     }\r
56 \r
57     @Override\r
58     public void setEnabled(boolean enabled){\r
59         super.setEnabled(enabled);\r
60         button.setEnabled(enabled);\r
61         arrowButton.setEnabled(enabled);\r
62     }\r
63 \r
64     public JButton getButton(){\r
65         return button;\r
66     }\r
67 \r
68     public JMenuItem addMenuItem(JMenuItem menuItem){\r
69         return popup.add(menuItem);\r
70     }\r
71 \r
72     public void updateUI(){\r
73         super.updateUI();\r
74         if(button != null){\r
75             Dimension prefferedSize = button.getPreferredSize();\r
76 \r
77             arrowButton.setPreferredSize(new Dimension(icon.getIconWidth() + 4, prefferedSize.height));\r
78             setPreferredSize(new Dimension(prefferedSize.width + icon.getIconWidth() + 4, prefferedSize.height));\r
79 \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
83 \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
87 \r
88             arrowButton.setSize(arrowButton.getPreferredSize());\r
89             setSize(getPreferredSize());\r
90         }\r
91     }\r
92 \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
100         g.fill(polygon);\r
101 \r
102         return new ImageIcon(image);\r
103     }\r
104 }\r