1. package org.jr.swing.util;
  2. /**
  3. * Copyright: Copyright (c) 2002-2004
  4. * Company: JavaResearch(http://www.javaresearch.org)
  5. * 最后更新日期:2003年3月28日
  6. * @author Cherami,Barney
  7. */
  8. import java.awt.*;
  9. import javax.swing.*;
  10. import java.net.*;
  11. import org.jr.swing.*;
  12. /**
  13. * Swing的工具类,封装一些Swing中常用的工具方法。
  14. * @since 0.3
  15. */
  16. public class SwingUtil {
  17. /**
  18. * 私有构造方法,防止类的实例化,因为工具类不需要实例化。
  19. */
  20. private SwingUtil() {
  21. }
  22. /**
  23. * 将组件定位在计算机屏幕的中间。
  24. * 要进行定位的组件一般应该是顶层容器,例如Dialog或者Frame。
  25. * @param component 需要定位到屏幕中间的组件
  26. * @since 0.3
  27. */
  28. public static void centerWindow(Component component) {
  29. Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  30. Dimension frameSize = component.getSize();
  31. if (frameSize.height > screenSize.height) {
  32. frameSize.height = screenSize.height;
  33. }
  34. if (frameSize.width > screenSize.width) {
  35. frameSize.width = screenSize.width;
  36. }
  37. component.setLocation( (screenSize.width - frameSize.width) / 2,
  38. (screenSize.height - frameSize.height) / 2);
  39. }
  40. /**
  41. * 创建子菜单项并添加到父菜单。
  42. * 如果父菜单为null则不添加。
  43. * @param property 菜单项属性
  44. * @param menu 子菜单项的父菜单
  45. * @return 根据菜单项属性创建的子菜单项
  46. * @since 0.4
  47. */
  48. public static JMenuItem createMenuItem(MenuItemProperty property, JMenu menu) {
  49. JMenuItem menuItem;
  50. menuItem = new JMenuItem(property.text);
  51. if (!property.tooltip.equals("")) {
  52. menuItem.setToolTipText(property.tooltip);
  53. }
  54. if (!property.image.equals("")) {
  55. try {
  56. menuItem.setIcon(new ImageIcon(new URL(property.image)));
  57. }
  58. catch (MalformedURLException e) {
  59. System.err.println("Error URL string:"+property.image);
  60. }
  61. }
  62. if (!property.mnemonic.equals("")) {
  63. try {
  64. int mnemonic = Integer.parseInt(property.mnemonic);
  65. menuItem.setMnemonic(mnemonic);
  66. }
  67. catch (NumberFormatException e) {
  68. menuItem.setMnemonic(property.mnemonic.charAt(0));
  69. }
  70. }
  71. if (!property.accelerator.equals("")) {
  72. KeyStroke keyStroke = KeyStroke.getKeyStroke(property.accelerator);
  73. menuItem.setAccelerator(keyStroke);
  74. }
  75. if (menu != null) {
  76. menu.add(menuItem);
  77. }
  78. return menuItem;
  79. }
  80. /**
  81. * 创建单选子菜单项并添加到父菜单。
  82. * 如果父菜单为null则不添加。
  83. * @param property 菜单项属性
  84. * @param menu 子菜单项的父菜单
  85. * @return 根据菜单项属性创建的单选子菜单项
  86. * @since 0.4
  87. */
  88. public static JMenuItem createRadioButtonMenuItem(MenuItemProperty property,
  89. JMenu menu) {
  90. JRadioButtonMenuItem menuItem;
  91. menuItem = new JRadioButtonMenuItem(property.text);
  92. if (!property.tooltip.equals("")) {
  93. menuItem.setToolTipText(property.tooltip);
  94. }
  95. if (!property.image.equals("")) {
  96. menuItem.setIcon(new ImageIcon(property.image));
  97. }
  98. if (!property.mnemonic.equals("")) {
  99. try {
  100. int mnemonic = Integer.parseInt(property.mnemonic);
  101. menuItem.setMnemonic(mnemonic);
  102. }
  103. catch (NumberFormatException e) {
  104. menuItem.setMnemonic(property.mnemonic.charAt(0));
  105. }
  106. }
  107. if (!property.accelerator.equals("")) {
  108. KeyStroke keyStroke = KeyStroke.getKeyStroke(property.accelerator);
  109. menuItem.setAccelerator(keyStroke);
  110. }
  111. if (menu != null) {
  112. menu.add(menuItem);
  113. }
  114. return menuItem;
  115. }
  116. /**
  117. * 创建复选子菜单项并添加到父菜单。
  118. * 如果父菜单为null则不添加。
  119. * @param property 菜单项属性
  120. * @param menu 子菜单项的父菜单
  121. * @return 根据菜单项属性创建的复选子菜单项
  122. * @since 0.4
  123. */
  124. public static JMenuItem createCheckBoxMenuItem(MenuItemProperty property,
  125. JMenu menu) {
  126. JCheckBoxMenuItem menuItem;
  127. menuItem = new JCheckBoxMenuItem(property.text);
  128. if (!property.tooltip.equals("")) {
  129. menuItem.setToolTipText(property.tooltip);
  130. }
  131. if (!property.image.equals("")) {
  132. menuItem.setIcon(new ImageIcon(property.image));
  133. }
  134. if (!property.mnemonic.equals("")) {
  135. try {
  136. int mnemonic = Integer.parseInt(property.mnemonic);
  137. menuItem.setMnemonic(mnemonic);
  138. }
  139. catch (NumberFormatException e) {
  140. menuItem.setMnemonic(property.mnemonic.charAt(0));
  141. }
  142. }
  143. if (!property.accelerator.equals("")) {
  144. KeyStroke keyStroke = KeyStroke.getKeyStroke(property.accelerator);
  145. menuItem.setAccelerator(keyStroke);
  146. }
  147. if (menu != null) {
  148. menu.add(menuItem);
  149. }
  150. return menuItem;
  151. }
  152. /**
  153. * 创建子菜单并添加到父菜单。
  154. * 如果父菜单为null则不添加。
  155. * @param property 菜单属性
  156. * @param parentMenu 子菜单的父菜单
  157. * @return 根据菜单属性创建的子菜单
  158. * @since 0.4
  159. */
  160. public static JMenu createMenu(MenuProperty property, JMenu parentMenu) {
  161. JMenu menu;
  162. menu = new JMenu(property.text);
  163. if (!property.mnemonic.equals("")) {
  164. try {
  165. int mnemonic = Integer.parseInt(property.mnemonic);
  166. menu.setMnemonic(mnemonic);
  167. }
  168. catch (NumberFormatException e) {
  169. menu.setMnemonic(property.mnemonic.charAt(0));
  170. }
  171. }
  172. if (parentMenu != null) {
  173. parentMenu.add(menu);
  174. }
  175. return menu;
  176. }
  177. /**
  178. * 创建动态按钮。
  179. * @param property 按钮属性
  180. * @return 根据按钮属性创建的动态按钮
  181. * @since 0.4
  182. */
  183. public static JDynamicButton createDynamicButton(ButtonProperty property) {
  184. JDynamicButton button;
  185. button = new JDynamicButton(property.text);
  186. if (!property.tooltip.equals("")) {
  187. button.setToolTipText(property.tooltip);
  188. }
  189. if (!property.image.equals("")) {
  190. button.setIcon(new ImageIcon(property.image));
  191. }
  192. return button;
  193. }
  194. /**
  195. * 判断主框架是否是最大化状态
  196. * @param frame 要判断的主框架
  197. * @return 全部最大化时返回true,否则返回false
  198. * @since 0.5
  199. */
  200. public static boolean isMaximized(Frame frame) {
  201. if (frame.getExtendedState() == Frame.MAXIMIZED_BOTH) {
  202. return true;
  203. }
  204. else {
  205. return false;
  206. }
  207. }
  208. }