1 package jp.sourceforge.stigmata.ui.swing;
3 import java.awt.BorderLayout;
4 import java.awt.Component;
5 import java.awt.Dimension;
7 import java.awt.event.ActionEvent;
8 import java.awt.event.ActionListener;
9 import java.io.PrintWriter;
10 import java.io.StringWriter;
11 import java.lang.reflect.InvocationTargetException;
12 import java.lang.reflect.Method;
14 import java.text.MessageFormat;
16 import javax.swing.Action;
17 import javax.swing.Icon;
18 import javax.swing.ImageIcon;
19 import javax.swing.JButton;
20 import javax.swing.JCheckBoxMenuItem;
21 import javax.swing.JComponent;
22 import javax.swing.JLabel;
23 import javax.swing.JMenu;
24 import javax.swing.JMenuItem;
25 import javax.swing.JOptionPane;
26 import javax.swing.JPanel;
27 import javax.swing.JScrollPane;
28 import javax.swing.JTabbedPane;
29 import javax.swing.JTextArea;
30 import javax.swing.border.EmptyBorder;
31 import javax.swing.border.TitledBorder;
33 import jp.sourceforge.talisman.i18n.Messages;
36 * Utility routines for building GUI.
38 * @author Haruaki TAMADA
40 public class GUIUtility{
44 public static void decorateJComponent(Messages messages, JComponent component, String label){
45 if(messages.hasValue(label + ".tooltip")){
46 component.setToolTipText(messages.get(label + ".tooltip"));
48 if(messages.hasValue(label + ".border")){
49 component.setBorder(new TitledBorder(messages.get(label + ".border")));
52 Icon icon = getIcon(messages, label + ".icon");
54 Method[] methods = component.getClass().getMethods();
55 for(Method m: methods){
56 if(m.getName().equals("setIcon")){
57 m.invoke(component, icon);
61 } catch(IllegalAccessException e){
62 throw new InternalError(e.getMessage());
63 } catch(InvocationTargetException e){
64 throw new InternalError(e.getMessage());
68 public static JButton createButton(Messages messages, String label, Action action){
69 JButton button = new JButton(action);
70 button.setText(messages.get(label + ".button.label"));
71 button.setActionCommand(label);
72 if(messages.hasValue(label + ".button.tooltip")){
73 button.setToolTipText(messages.get(label + ".button.tooltip"));
75 Icon icon = getIcon(messages, label + ".button.icon");
83 public static JButton createButton(Messages messages, String label){
84 JButton button = new JButton(messages.get(label + ".button.label"));
85 button.setActionCommand(label);
86 if(messages.hasValue(label + ".button.tooltip")){
87 button.setToolTipText(messages.get(label + ".button.tooltip"));
89 Icon icon = getIcon(messages, label + ".button.icon");
97 public static JCheckBoxMenuItem createJCheckBoxMenuItem(Messages messages, String label){
98 return createJCheckBoxMenuItem(messages, label, false);
101 public static JCheckBoxMenuItem createJCheckBoxMenuItem(Messages messages, String label, boolean status){
102 JCheckBoxMenuItem item = new JCheckBoxMenuItem(messages.get(label + ".menuitem.label"), status);
103 item.setActionCommand(label);
104 if(messages.hasValue(label + ".menuitem.tooltip")){
105 item.setToolTipText(messages.get(label + ".menuitem.tooltip"));
107 Icon icon = getIcon(messages, label + ".menuitem.icon");
114 public static JMenuItem createJMenuItem(Messages messages, String label, Action action){
115 JMenuItem item = new JMenuItem(action);
116 item.setText(messages.get(label + ".menuitem.label"));
117 item.setActionCommand(label);
118 if(messages.hasValue(label + ".menuitem.tooltip")){
119 item.setToolTipText(messages.get(label + ".menuitem.tooltip"));
121 Icon icon = getIcon(messages, label + ".menuitem.icon");
128 public static JMenuItem createJMenuItem(Messages messages, String label){
129 JMenuItem item = new JMenuItem(messages.get(label + ".menuitem.label"));
130 item.setActionCommand(label);
131 if(messages.hasValue(label + ".menuitem.tooltip")){
132 item.setToolTipText(messages.get(label + ".menuitem.tooltip"));
134 Icon icon = getIcon(messages, label + ".menuitem.icon");
141 public static JMenu createJMenu(Messages messages, String label){
142 JMenu menu = new JMenu(messages.get(label + ".menu.label"));
143 menu.setActionCommand(label);
144 if(messages.hasValue(label + ".menu.tooltip")){
145 menu.setToolTipText(messages.get(label + ".menu.tooltip"));
147 Icon icon = getIcon(messages, label + ".menu.icon");
154 public static URL getResource(Messages messages, String resourcePathLabel, String resourcePathPrefix){
155 if(messages.hasValue(resourcePathLabel)){
156 String resourcePath = messages.get(resourcePathLabel);
157 if(resourcePathPrefix != null){
158 resourcePath = resourcePathPrefix + resourcePath;
160 return GUIUtility.class.getResource(resourcePath);
165 public static URL getResource(Messages messages, String resourcePathLabel){
166 return getResource(messages, resourcePathLabel, null);
169 public static Icon getIcon(Messages messages, String label){
170 URL url = getResource(messages, label, messages.get("icon.path"));
172 ImageIcon icon = new ImageIcon(url);
179 public static Image getImage(Messages messages, String imageFilePathLabel){
180 Icon icon = getIcon(messages, imageFilePathLabel);
181 if(icon != null && icon instanceof ImageIcon){
182 return ((ImageIcon)icon).getImage();
187 public static void addNewTab(Messages messages, String key, JTabbedPane tabPane, Component comp){
188 addNewTab(messages, key, tabPane, comp, null, null);
191 public static void addNewTab(Messages messages, String key, JTabbedPane tabPane, Component comp, Object[] tabnameValues, Object[] values){
192 addNewTab(messages, key, tabPane, comp, tabnameValues, values, false);
195 public static void addNewTab(Messages messages, String key, final JTabbedPane tabPane,
196 final Component comp, Object[] tabnameValues, Object[] values,
198 String tabName = messages.get(key + ".tab.label");
199 String tooltip = messages.get(key + ".tab.tooltip");
200 Icon icon = getIcon(messages, key + ".tab.icon");
202 if(tabnameValues != null){
203 tabName = MessageFormat.format(tabName, tabnameValues);
207 tooltip = MessageFormat.format(tooltip, values);
209 tabPane.addTab(tabName, icon, comp, tooltip);
210 tabPane.setSelectedIndex(tabPane.getTabCount() - 1);
212 JLabel label = new JLabel(tabName);
216 Icon closeIcon = getIcon(messages, "closetab.tabicon");
217 JButton button = new JButton(closeIcon);
218 button.setPreferredSize(new Dimension(closeIcon.getIconWidth(), closeIcon.getIconHeight()));
219 JPanel panel = new JPanel(new BorderLayout());
220 panel.setOpaque(false);
221 label.setBorder(new EmptyBorder(0, 0, 0, 4));
222 panel.add(label, BorderLayout.WEST);
223 panel.add(button, BorderLayout.EAST);
224 button.addActionListener(new ActionListener(){
226 public void actionPerformed(ActionEvent e){
227 tabPane.remove(comp);
230 button.setBorder(new EmptyBorder(1, 1, 1, 1));
231 panel.setBorder(new EmptyBorder(2, 1, 1, 1));
232 tabPane.setTabComponentAt(tabPane.getTabCount() - 1, panel);
236 public static void showErrorDialog(Component parent, Messages messages, Exception e){
237 JPanel panel = new JPanel(new BorderLayout());
238 JTextArea area = new JTextArea();
239 StringWriter out = new StringWriter();
240 e.printStackTrace(new PrintWriter(out));
241 String stackTrace = out.toString();
243 panel.add(new JLabel(e.getLocalizedMessage()), BorderLayout.NORTH);
244 panel.add(new JScrollPane(area), BorderLayout.CENTER);
245 area.setText(stackTrace);
246 area.setEditable(false);
247 panel.setPreferredSize(new Dimension(500, 400));
248 panel.setSize(panel.getPreferredSize());
250 JOptionPane.showMessageDialog(parent, panel, messages.get("error.dialog.title"), JOptionPane.WARNING_MESSAGE);