Java 图形用户界面 高级组件综合例子

运行结果截图如下:

[java] view plain copy
  1. /**
  2. 作者:wwj
  3. 日期:2012/4/18
  4. 功能:利用图像用户界面高级组件实现简单记事本
  5. 说明:
  6. (1)创建一个名为“简单记事本”窗口,在窗口中添加一个带有滚动条的文本区。
  7. (2)在窗口中添加一个具有以下菜单的菜单栏:
  8. 1.“文件”菜单,包含“打开”、“保存”、“退出”的菜单项,菜单间加分隔线,
  9. 添加事件处理方法,使菜单具有打开、保存文件及退出的功能。
  10. 2.“编辑”菜单,包含“复制”、“剪切”、“粘贴”的菜单项,添加事件处理方法,
  11. 使菜单具有“复制”、“剪切”、“粘贴”的功能。
  12. 3.“格式”菜单,包含“格式设置”的二级子菜单;而二级“格式设置”子菜单,
  13. 包含“自动换行”、“取消自动换行”、“断行不断字”、“取消断行不断字”的菜单项,添加事件处理方法,
  14. 设置文本框自动换行和断行不断字的格式。
  15. (提示:JTextArea类中,使用setLineWrap(true)方法设置自动换行,使用setWrapStyleword(true)方法设置断行不断字,参考书本例8.7)
  16. (3)在窗口中添加工具栏,包含“打开”、“保存”、“复制”、“剪切”、“粘贴”图片按钮的工具栏,
  17. 添加事件处理方法,单击相应的按钮能实现相应的功能。
  18. (4)在窗口中添加弹出式菜单,包含“打开”、“保存”、“复制”、“剪切”、“粘贴”的菜单项,
  19. 直接添加分隔线,添并加事件处理方法,选择相应的菜单项能实现相应的功能。
  20. **/
  21. importjava.awt.*;
  22. importjavax.swing.*;
  23. importjava.awt.event.*;
  24. importjava.io.*;
  25. publicclassNodepadextendsJFrame
  26. {
  27. privateJTextAreaeditor;
  28. privateContainerc;
  29. privateFontf=newFont("sanserif",Font.PLAIN,12);
  30. //菜单栏成员属性声明
  31. privateJMenuBarmb;//菜单棒
  32. privateJMenufileMenu;//文件菜单
  33. privateJMenueditMenu;//编辑菜单
  34. privateJMenuformatMenu;//格式菜单
  35. privateJMenuItemfileMenuOpen,fileMenuSave,fileMenuExit;//文件菜单的菜单项
  36. privateJMenuItemeditMenuCopy,editMenuCut,editMenuPaste;//编辑菜单的菜单项
  37. privateJMenuformatSet;//格式菜单第一级菜单
  38. privateJMenuItemlineWrap,cancleLineWrap,wrapStyleWord,cancleWrapStyleWord;//格式菜单的第二级菜单
  39. //工具栏成员属性声明
  40. privateJToolBartoolBar;//工具棒
  41. privateJButtonb1,b2,b3,b4,b5;//声明5个按钮,分别为:“打开”、“保存”、“复制”、“剪切”、“粘贴”
  42. //弹出式菜单属性声明
  43. privateJPopupMenupm;
  44. privateJMenuItemitem1,item2,item3,item4,item5;
  45. publicNodepad()
  46. {
  47. super("简单记事本");
  48. setSize(400,300);
  49. try{
  50. UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  51. }catch(Exceptione){System.err.println("不能被设置外观的原因:"+e);}
  52. c=getContentPane();//创建一个内容面板
  53. editor=newJTextArea();//创建一个文本区
  54. c.add(newJScrollPane(editor));//设置滚动条,并添加到内容面板
  55. //菜单栏的实现
  56. //文件菜单的实现
  57. mb=newJMenuBar();//创建菜单棒
  58. fileMenu=newJMenu("文件(F)");//创建菜单
  59. fileMenuOpen=newJMenuItem("打开(O)...Ctrl+O");
  60. fileMenuSave=newJMenuItem("保存(S)...Ctrl+S");
  61. fileMenuExit=newJMenuItem("退出");
  62. JMHandlerJM=newJMHandler();//创建监听器
  63. fileMenuOpen.addActionListener(JM);//注册监听器
  64. fileMenuSave.addActionListener(JM);
  65. fileMenuExit.addActionListener(JM);
  66. fileMenu.add(fileMenuOpen);
  67. fileMenu.add(fileMenuSave);
  68. fileMenu.addSeparator();//添加分隔线
  69. fileMenu.add(fileMenuExit);
  70. fileMenu.setFont(f);//设置菜单中文体的字体
  71. //编辑菜单的实现
  72. editMenu=newJMenu("编辑(E)");
  73. editMenuCopy=newJMenuItem("复制(C)Ctrl+C");
  74. editMenuCut=newJMenuItem("剪切(T)Ctrl+X");
  75. editMenuPaste=newJMenuItem("粘贴(P)Ctrl+v");
  76. EMHandlerEM=newEMHandler();//创建监听器
  77. editMenuCopy.addActionListener(EM);//注册监听器
  78. editMenuCut.addActionListener(EM);
  79. editMenuPaste.addActionListener(EM);
  80. editMenu.add(editMenuCopy);
  81. editMenu.add(editMenuCut);
  82. editMenu.add(editMenuPaste);
  83. editMenu.setFont(f);
  84. //格式菜单的实现
  85. formatMenu=newJMenu("格式(O)");//创建菜单
  86. formatSet=newJMenu("格式设置");//二级菜单
  87. lineWrap=newJMenuItem("自动换行");//二级菜单项
  88. cancleLineWrap=newJMenuItem("取消自动换行");
  89. wrapStyleWord=newJMenuItem("断行不断字");
  90. cancleWrapStyleWord=newJMenuItem("取消断行不断字");
  91. FMHandlerFM=newFMHandler();//创建事件监听器
  92. lineWrap.addActionListener(FM);//注册二级菜单项的监听器
  93. cancleLineWrap.addActionListener(FM);
  94. wrapStyleWord.addActionListener(FM);
  95. cancleWrapStyleWord.addActionListener(FM);
  96. formatSet.add(lineWrap);
  97. formatSet.add(cancleLineWrap);
  98. formatSet.addSeparator();//添加分隔线
  99. formatSet.add(wrapStyleWord);
  100. formatSet.add(cancleWrapStyleWord);
  101. formatMenu.add(formatSet);
  102. formatMenu.setFont(f);
  103. //将菜单全部添加菜单棒里
  104. mb.add(fileMenu);
  105. mb.add(editMenu);
  106. mb.add(formatMenu);
  107. //工具栏的实现
  108. //按钮分别为:“打开”、“保存”、“复制”、“剪切”、“粘贴”
  109. toolBar=newJToolBar();//创建工具棒
  110. b1=newJButton(newImageIcon("img/open.gif"));
  111. b2=newJButton(newImageIcon("img/save.gif"));
  112. b3=newJButton(newImageIcon("img/copy.gif"));
  113. b4=newJButton(newImageIcon("img/cut.gif"));
  114. b5=newJButton(newImageIcon("img/paste.gif"));
  115. TBHandlerTB=newTBHandler();//创建按钮监听器
  116. b1.addActionListener(TB);b2.addActionListener(TB);
  117. b3.addActionListener(TB);b4.addActionListener(TB);
  118. b5.addActionListener(TB);
  119. //把按钮全部添加到工具棒中
  120. toolBar.add(b1);toolBar.add(b2);
  121. toolBar.add(b3);toolBar.add(b4);
  122. toolBar.add(b5);
  123. //弹出菜单的实现
  124. pm=newJPopupMenu();//创建弹出菜单
  125. item1=newJMenuItem("打开");
  126. item2=newJMenuItem("保存");
  127. item3=newJMenuItem("复制");
  128. item4=newJMenuItem("剪切");
  129. item5=newJMenuItem("粘贴");
  130. JPHandlerJP=newJPHandler();
  131. item1.addActionListener(JP);//注册菜单项的鼠标事件监听器
  132. item2.addActionListener(JP);
  133. item3.addActionListener(JP);
  134. item4.addActionListener(JP);
  135. item5.addActionListener(JP);
  136. editor.addMouseListener(JP);//注册文本区的鼠标事件监听器
  137. pm.add(item1);pm.add(item2);
  138. pm.add(item3);pm.add(item4);
  139. pm.add(item5);
  140. //把菜单栏、工具栏、弹出菜单添加到内容面板
  141. setJMenuBar(mb);//显示菜单栏
  142. c.add(toolBar,BorderLayout.NORTH);
  143. setVisible(true);
  144. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  145. }
  146. //自定义类实现文件菜单项的事件处理
  147. privateclassJMHandlerimplementsActionListener
  148. {
  149. publicvoidactionPerformed(ActionEvente)
  150. {
  151. if(e.getSource()==fileMenuOpen){loadFile();}
  152. elseif(e.getSource()==fileMenuSave){saveFile();}
  153. else{System.exit(0);}
  154. }
  155. }
  156. publicvoidloadFile()//打开文件方法
  157. {
  158. JFileChooserfc=newJFileChooser();
  159. intr=fc.showOpenDialog(this);
  160. if(r==JFileChooser.APPROVE_OPTION)
  161. {
  162. Filefile=fc.getSelectedFile();
  163. try{editor.read(newFileReader(file),null);}
  164. catch(IOExceptione){}
  165. }
  166. }
  167. publicvoidsaveFile()//保存文件的方法
  168. {
  169. JFileChooserfc=newJFileChooser();
  170. intr=fc.showSaveDialog(this);
  171. if(r==JFileChooser.APPROVE_OPTION)
  172. {
  173. Filefile=fc.getSelectedFile();
  174. try{editor.write(newFileWriter(file));}
  175. catch(IOExceptione){}
  176. }
  177. }
  178. //编辑菜单菜单项的事件处理
  179. privateclassEMHandlerimplementsActionListener
  180. {
  181. publicvoidactionPerformed(ActionEvente)
  182. {
  183. if(e.getSource()==editMenuCopy)//实现复制功能
  184. {
  185. editor.copy();
  186. editor.requestFocus();
  187. }
  188. elseif(e.getSource()==editMenuCut)//实现剪切功能
  189. {
  190. editor.cut();
  191. editor.requestFocus();
  192. }
  193. else//实现粘贴功能
  194. {
  195. editor.paste();
  196. editor.requestFocus();
  197. }
  198. }
  199. }
  200. //格式菜单二级菜单的菜单项的事件处理
  201. privateclassFMHandlerimplementsActionListener
  202. {
  203. publicvoidactionPerformed(ActionEvente)
  204. {
  205. if(e.getSource()==lineWrap){editor.setLineWrap(true);}
  206. elseif(e.getSource()==cancleLineWrap){editor.setLineWrap(false);}
  207. elseif(e.getSource()==wrapStyleWord){editor.setWrapStyleWord(true);}
  208. else{editor.setWrapStyleWord(false);}
  209. }
  210. }
  211. //自定义类实现工具栏的按钮事件处理
  212. privateclassTBHandlerimplementsActionListener
  213. {
  214. publicvoidactionPerformed(ActionEvente)
  215. {
  216. if(e.getSource()==b1){loadFile();}//实现打开文件功能
  217. elseif(e.getSource()==b2){saveFile();}//实现保存文件功能
  218. elseif(e.getSource()==b3)//文件复制
  219. {
  220. editor.copy();
  221. editor.requestFocus();
  222. }
  223. elseif(e.getSource()==b4)//文件剪切
  224. {
  225. editor.cut();
  226. editor.requestFocus();
  227. }
  228. else//文件粘贴
  229. {
  230. editor.paste();
  231. editor.requestFocus();
  232. }
  233. }
  234. }
  235. //自定义类实现弹出式菜单的事件处理
  236. privateclassJPHandlerimplementsActionListener,MouseListener
  237. {
  238. publicvoidactionPerformed(ActionEvente)
  239. {
  240. if(e.getSource()==item1){loadFile();}//实现打开文件功能
  241. elseif(e.getSource()==item2){saveFile();}//实现保存文件功能
  242. elseif(e.getSource()==item3)//文件复制
  243. {
  244. editor.copy();
  245. editor.requestFocus();
  246. }
  247. elseif(e.getSource()==item4)//文件剪切
  248. {
  249. editor.cut();
  250. editor.requestFocus();
  251. }
  252. else//文件粘贴
  253. {
  254. editor.paste();
  255. editor.requestFocus();
  256. }
  257. }
  258. publicvoidmouseReleased(MouseEvente)
  259. {
  260. if(e.isPopupTrigger())//判断是否按下鼠标右键
  261. pm.show(editor,e.getX(),e.getY());//显示弹出式菜单
  262. }
  263. publicvoidmouseClicked(MouseEvente){}
  264. publicvoidmouseEntered(MouseEvente){}
  265. publicvoidmouseExited(MouseEvente){}
  266. publicvoidmousePressed(MouseEvente){}
  267. }
  268. publicstaticvoidmain(String[]args)
  269. {
  270. NodepadN=newNodepad();
  271. }
  272. }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值