1. package org.jr.swing;
  2. /**
  3. * Copyright: Copyright (c) 2002-2004
  4. * Company: JavaResearch(http://www.javaresearch.org)
  5. * 最后更新日期:2003年3月28日
  6. * @author Cherami
  7. */
  8. import org.jr.*;
  9. /**
  10. * 菜单项属性的抽象。
  11. * <p>包括菜单的显示文字、提示信息、图像文件的文件名、快捷键以及加速建。
  12. * 快捷键可以使用整型值也可以使用字符,而加速建的设置需要使用KeyStroke中的说明。
  13. * @see "Java API中的public static KeyStroke getKeyStroke(String s)的说明"
  14. * @since 0.4
  15. */
  16. public class MenuItemProperty
  17. extends CharSplitProperty {
  18. /**
  19. * 菜单项的显示文字。
  20. * @since 0.4
  21. */
  22. public final String text;
  23. /**
  24. * 菜单项的提示信息。
  25. * @since 0.4
  26. */
  27. public final String tooltip;
  28. /**
  29. * 菜单项图像的路径。
  30. * <b>请注意从0.5beta版开始这个属性要求是一个合法的URL路径,这样便于从jar包中提取图像。</b>
  31. * @since 0.4
  32. */
  33. public final String image;
  34. /**
  35. * 菜单项的快捷键。
  36. * @since 0.4
  37. */
  38. public final String mnemonic;
  39. /**
  40. * 菜单项的加速键。
  41. * @since 0.4
  42. */
  43. public final String accelerator;
  44. /**
  45. * 菜单项的选中状态。
  46. * @since 0.4
  47. */
  48. public final String selected;
  49. /**
  50. * 显示文字的属性索引。
  51. * @since 0.4
  52. */
  53. public static final int TEXT = 0;
  54. /**
  55. * 提示信息的属性索引。
  56. * @since 0.4
  57. */
  58. public static final int TOOLTIP = 1;
  59. /**
  60. * 图像路径的属性索引。
  61. * @since 0.4
  62. */
  63. public static final int IMAGE = 2;
  64. /**
  65. * 快捷键的属性索引。
  66. * @since 0.4
  67. */
  68. public static final int MNEMONIC = 3;
  69. /**
  70. * 加速键的属性索引。
  71. * @since 0.4
  72. */
  73. public static final int ACCELERATOR = 4;
  74. /**
  75. * 选中状态的属性索引。
  76. * @since 0.4
  77. */
  78. public static final int SELECTED = 5;
  79. private static final int LEAST_PROPERTY = 1;
  80. private static final int PROPERTY_COUNT = 5;
  81. /**
  82. * 构造方法,根据原始信息解析得到需要的各个子信息,解析的分隔符为'*'。
  83. * 假设使用'V'作为快捷键而使用CTRL+B作为加速建,那么source的内容应该为:
  84. * "菜单项*菜单项说明*images/menuitem.jpg*V*control b"
  85. * @param source 未经解析的原始信息
  86. * @since 0.4
  87. */
  88. public MenuItemProperty(String source) {
  89. this(source, '*');
  90. }
  91. /**
  92. * 构造方法,根据原始信息解析得到需要的各个子信息。
  93. * 参考另一个构造方法中的说明构造source。
  94. * @param source 未经解析的原始信息
  95. * @param splitChar 解析的分隔符
  96. * @since 0.4
  97. */
  98. public MenuItemProperty(String source, char splitChar) {
  99. super(source, splitChar);
  100. text = getProperty(TEXT);
  101. tooltip = getProperty(TOOLTIP);
  102. image = getProperty(IMAGE);
  103. mnemonic = getProperty(MNEMONIC);
  104. accelerator = getProperty(ACCELERATOR);
  105. selected = getProperty(SELECTED);
  106. }
  107. /**
  108. * 得到属性应有的最少个数。
  109. * @return 属性应有的最少个数,现在值为1。
  110. * @since 0.4
  111. */
  112. public int getLeastPropertyCount() {
  113. return LEAST_PROPERTY;
  114. }
  115. /**
  116. * 得到属性应有的个数。
  117. * 由于对于具体的的项目而言,其需要的属性个数是不同的,因此此方法被定义为抽象的。
  118. * @return 应有的属性个数
  119. * @since 0.4
  120. */
  121. public int getPropertyCount() {
  122. return PROPERTY_COUNT;
  123. }
  124. /**
  125. * 得到属性数组中的指定索引的属性不存在时的返回值。
  126. * @param index 属性数组中的索引
  127. * @return 属性数组中的指定索引的属性不存在时的返回值
  128. * @since 0.4
  129. */
  130. public String getDefaultProperty(int index) {
  131. switch (index) {
  132. case TEXT:
  133. return "Menu item " + getNumber();
  134. case TOOLTIP:
  135. return "press this menu item";
  136. case IMAGE:
  137. return "";
  138. case MNEMONIC:
  139. return "";
  140. case ACCELERATOR:
  141. return "";
  142. case SELECTED:
  143. return "false";
  144. default:
  145. return "";
  146. }
  147. }
  148. }