歡迎您光臨本站 註冊首頁

Java圖形用戶界面:高級組件綜合例子

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
        運行結果截圖如下:

      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. import java.awt.*;
      22. import javax.swing.*;
      23. import java.awt.event.*;
      24. import java.io.*;
      25. public class Nodepad extends JFrame
      26. {
      27. private JTextArea editor;
      28. private Container c;
      29. private Font f=new Font("sanserif",Font.PLAIN,12);
      30. //菜單欄成員屬性聲明
      31. private JMenuBar mb; //菜單棒
      32. private JMenu fileMenu; //文件菜單
      33. private JMenu editMenu; //編輯菜單
      34. private JMenu formatMenu; //格式菜單
      35. private JMenuItem fileMenuOpen,fileMenuSave,fileMenuExit; //文件菜單的菜單項
      36. private JMenuItem editMenuCopy,editMenuCut,editMenuPaste; //編輯菜單的菜單項
      37. private JMenu formatSet;//格式菜單第一級菜單
      38. private JMenuItem lineWrap,cancleLineWrap,wrapStyleWord,cancleWrapStyleWord;//格式菜單的第二級菜單
      39. //工具欄成員屬性聲明
      40. private JToolBar toolBar; //工具棒
      41. private

        JButton b1,b2,b3,b4,b5; //聲明5個按鈕,分別為:「打開」、「保存」、「複製」、「剪切」、「粘貼」
      42. //彈出式菜單屬性聲明
      43. private JPopupMenu pm;
      44. private JMenuItem item1,item2,item3,item4,item5;
      45. public Nodepad()
      46. {
      47. super("簡單記事本");
      48. setSize(400,300);
      49. try{
      50. UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      51. } catch (Exception e){ System.err.println("不能被設置外觀的原因:" e);}
      52. c=getContentPane(); //創建一個內容面板
      53. editor = new JTextArea(); //創建一個文本區
      54. c.add(new JScrollPane(editor)); //設置滾動條,並添加到內容面板
      55. //菜單欄的實現
      56. //文件菜單的實現
      57. mb = new JMenuBar(); //創建菜單棒
      58. fileMenu = new JMenu("文件(F)");//創建菜單
      59. fileMenuOpen = new JMenuItem("打開(O)...Ctrl O");
      60. fileMenuSave = new JMenuItem("保存(S)...Ctrl S");
      61. fileMenuExit = new JMenuItem(

        "退出");
      62. JMHandler JM=new JMHandler(); //創建JianTingQi
      63. fileMenuOpen.addActionListener(JM); //註冊JianTingQi
      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 = new JMenu("編輯(E)");
      73. editMenuCopy = new JMenuItem("複製(C) Ctrl C");
      74. editMenuCut = new JMenuItem("剪切(T) Ctrl X");
      75. editMenuPaste = new JMenuItem("粘貼(P) Ctrl v");
      76. EMHandler EM=new EMHandler(); //創建JianTingQi
      77. editMenuCopy.addActionListener(EM);//註冊JianTingQi
      78. editMenuCut.addActionListener(EM);
      79. editMenuPaste.addActionListener(EM);
      80. editMenu.add(editMenuCopy);
      81. editMenu.add(editMenuCut);
      82. editMenu.add(editMenuPaste);
      83. editMenu.setFont(f);
                        
      1. //格式菜單的實現
      2. formatMenu = new JMenu("格式(O)"); //創建菜單
      3. formatSet = new JMenu("格式設置"); //二級菜單

      4. lineWrap = new JMenuItem("自動換行"); //二級菜單項
      5. cancleLineWrap = new JMenuItem("取消自動換行");
      6. wrapStyleWord = new JMenuItem("斷行不斷字");
      7. cancleWrapStyleWord = new JMenuItem("取消斷行不斷字");
      8. FMHandler FM=new FMHandler(); //創建事件JianTingQi
      9. lineWrap.addActionListener(FM); //註冊二級菜單項的JianTingQi
      10. cancleLineWrap.addActionListener(FM);
      11. wrapStyleWord.addActionListener(FM);
      12. cancleWrapStyleWord.addActionListener(FM);
      13. formatSet.add(lineWrap);
      14. formatSet.add(cancleLineWrap);
      15. formatSet.addSeparator(); //添加分隔線
      16. formatSet.add(wrapStyleWord);
      17. formatSet.add(cancleWrapStyleWord);
      18. formatMenu.add(formatSet);
      19. formatMenu.setFont(f);
      20. //將菜單全部添加菜單棒里
      21. mb.add(fileMenu);
      22. mb.add(editMenu);
      23. mb.add(formatMenu);
      24. //工具欄的實現
      25. //按鈕分別為:「打開」、「保存」、「複製」、「剪切」、「粘貼」
      26. toolBar =new JToolBar(); //創建工具棒
      27. b1= new JButton(new ImageIcon("img/open.gif"));
      28. b2= new JButton(new ImageIcon("img/save.gif"));
      29. b3=

        new JButton(new ImageIcon("img/copy.gif"));
      30. b4= new JButton(new ImageIcon("img/cut.gif"));
      31. b5= new JButton(new ImageIcon("img/paste.gif"));
      32. TBHandler TB=new TBHandler(); //創建按鈕JianTingQi
      33. b1.addActionListener(TB); b2.addActionListener(TB);
      34. b3.addActionListener(TB); b4.addActionListener(TB);
      35. b5.addActionListener(TB);
      36. //把按鈕全部添加到工具棒中
      37. toolBar.add(b1); toolBar.add(b2);
      38. toolBar.add(b3); toolBar.add(b4);
      39. toolBar.add(b5);
      40. //彈出菜單的實現
      41. pm =new JPopupMenu(); //創建彈出菜單
      42. item1 = new JMenuItem("打開");
      43. item2 = new JMenuItem("保存");
      44. item3 = new JMenuItem("複製");
      45. item4 = new JMenuItem("剪切");
      46. item5 = new JMenuItem("粘貼");
      47. JPHandler JP=new JPHandler();
      48. item1.addActionListener(JP); //註冊菜單項的滑鼠事件JianTingQi
      49. item2.addActionListener(JP);
      50. item3.addActionListener(JP);
      51. item4.addActionListener(JP);
      52. item5.addActionListener(JP);
      53. editor.addMouseListener(JP); //註冊文本區的滑鼠事件JianTingQi
      54. pm.add(item1); pm.add(item2);

      55. pm.add(item3); pm.add(item4);
      56. pm.add(item5);
      57. //把菜單欄、工具欄、彈出菜單添加到內容面板
      58. setJMenuBar(mb); //顯示菜單欄
      59. c.add(toolBar,BorderLayout.NORTH);
      60. setVisible(true);
      61. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      62. }
      63. //自定義類實現文件菜單項的事件處理
      64. private class JMHandler implements ActionListener
      65. {
      66. public void actionPerformed(ActionEvent e)
      67. {
      68. if(e.getSource()==fileMenuOpen){ loadFile(); }
      69. else if(e.getSource()==fileMenuSave){ saveFile(); }
      70. else{System.exit(0);}
      71. }
      72. }
      73. public void loadFile() //打開文件方法
      74. {
      75. JFileChooser fc=new JFileChooser();
      76. int r=fc.showOpenDialog(this);
      77. if(r==JFileChooser.APPROVE_OPTION)
      78. {
      79. File file=fc.getSelectedFile();
      80. try{ editor.read(new FileReader(file),null);}
      81. catch

        (IOException e){}
      82. }
      83. }
      84. public void saveFile() //保存文件的方法
      85. {
      86. JFileChooser fc=new JFileChooser();
      87. int r=fc.showSaveDialog(this);
      88. if(r==JFileChooser.APPROVE_OPTION)
      89. {
      90. File file=fc.getSelectedFile();
      91. try{ editor.write(new FileWriter(file));}
      92. catch(IOException e){}
      93. }
      94. }
      95. //編輯菜單菜單項的事件處理
      96. private class EMHandler implements ActionListener
      97. {
      98. public void actionPerformed(ActionEvent e)
      99. {
      100. if(e.getSource()==editMenuCopy) //實現複製功能
      101. {
      102. editor.copy();
      103. editor.requestFocus();
      104. }
      105. else if(e.getSource()==editMenuCut)//實現剪切功能
      106. {
      107. editor.cut();
      108. editor.requestFocus();
      109. }
      110. else //實現粘貼功能
      111. {
      112. editor.paste();
      113. editor.requestFocus();
      114. }
      115. }
      116. }

      117. //格式菜單二級菜單的菜單項的事件處理
      118. private class FMHandler implements ActionListener
      119. {
      120. public void actionPerformed(ActionEvent e)
      121. {
      122. if(e.getSource()==lineWrap){ editor.setLineWrap(true); }
      123. else if(e.getSource()==cancleLineWrap) { editor.setLineWrap(false);}
      124. else if(e.getSource()==wrapStyleWord) { editor.setWrapStyleWord(true);}
      125. else{ editor.setWrapStyleWord(false); }
      126. }
      127. }
      128. //自定義類實現工具欄的按鈕事件處理
      129. private class TBHandler implements ActionListener
      130. {
      131. public void actionPerformed(ActionEvent e)
      132. {
      133. if(e.getSource()==b1){ loadFile(); } //實現打開文件功能
      134. else if(e.getSource()==b2) {saveFile();} //實現保存文件功能
      135. else if(e.getSource()==b3) //文件複製
      136. {
      137. editor.copy();
      138. editor.requestFocus();
      139. }
      140. else if(e.getSource()==b4) //文件剪切

      141. {
      142. editor.cut();
      143. editor.requestFocus();
      144. }
      145. else //文件粘貼
      146. {
      147. editor.paste();
      148. editor.requestFocus();
      149. }
      150. }
      151. }
      152. //自定義類實現彈出式菜單的事件處理
      153. private class JPHandler implements ActionListener,MouseListener
      154. {
      155. public void actionPerformed(ActionEvent e)
      156. {
      157. if(e.getSource()==item1){ loadFile(); } //實現打開文件功能
      158. else if(e.getSource()==item2) {saveFile();} //實現保存文件功能
      159. else if(e.getSource()==item3) //文件複製
      160. {
      161. editor.copy();
      162. editor.requestFocus();
      163. }
      164. else if(e.getSource()==item4) //文件剪切
      165. {
      166. editor.cut();
      167. editor.requestFocus();
      168. }
      169. else //文件粘貼
      170. {
      171. editor.paste();
      172. editor.requestFocus();
      173. }
      174. }
      175. public void

        mouseReleased(MouseEvent e)
      176. {
      177. if(e.isPopupTrigger()) //判斷是否按下滑鼠右鍵
      178. pm.show(editor,e.getX(),e.getY()); //顯示彈出式菜單
      179. }
      180. public void mouseClicked(MouseEvent e){}
      181. public void mouseEntered(MouseEvent e){}
      182. public void mouseExited(MouseEvent e){}
      183. public void mousePressed(MouseEvent e){}
      184. }
      185. public static void main(String []args)
      186. {
      187. Nodepad N=new Nodepad();
      188. }
      189. }


      [火星人 ] Java圖形用戶界面:高級組件綜合例子已經有405次圍觀

      http://coctec.com/docs/java/show-post-59887.html