Board logo

標題: 文字編輯器 (九) [打印本頁]

作者: tonyh    時間: 2020-3-21 14:02     標題: 文字編輯器 (九)

使用 JRadioButtonMenuItem 類別產生帶有 radio button 的 menu item,再將同一區塊的選項加入由 ButtonGroup 類別所產生的群組物件中,使於同一區塊只有一個選項可被選取。





本帖隱藏的內容需要回復才可以瀏覽


素材:

       
作者: 蔡幸融    時間: 2020-3-21 15:26

  1. import java.awt.Font;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import java.io.BufferedReader;
  5. import java.io.BufferedWriter;
  6. import java.io.File;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileReader;
  9. import java.io.FileWriter;
  10. import java.io.IOException;

  11. import javax.swing.ButtonGroup;
  12. import javax.swing.ImageIcon;
  13. import javax.swing.JFileChooser;
  14. import javax.swing.JFrame;
  15. import javax.swing.JMenu;
  16. import javax.swing.JMenuBar;
  17. import javax.swing.JMenuItem;
  18. import javax.swing.JOptionPane;
  19. import javax.swing.JRadioButtonMenuItem;
  20. import javax.swing.JScrollPane;
  21. import javax.swing.JTextArea;
  22. import javax.swing.UIManager;
  23. import javax.swing.border.BevelBorder;
  24. import javax.swing.filechooser.FileNameExtensionFilter;


  25. public class Ch04 implements ActionListener{

  26.         JFrame fm;
  27.         JScrollPane sp;
  28.         JTextArea ta;
  29.         JMenuBar mb;
  30.         JMenu mn_file, mn_edit, mn_option, mn_help, mn_size, mn_type, mn_style;
  31.         JMenuItem mi_new, mi_open, mi_save, mi_exit, mi_copy, mi_paste, mi_cut, mi_selectall, mi_about;
  32.         JRadioButtonMenuItem rbmi_size[]=new JRadioButtonMenuItem[3];
  33.         JRadioButtonMenuItem rbmi_type[]=new JRadioButtonMenuItem[4];
  34.         JRadioButtonMenuItem rbmi_style[]=new JRadioButtonMenuItem[2];
  35.         ButtonGroup btg_1, btg_2, btg_3;
  36.         ImageIcon ic, ii_new, ii_open, ii_save, ii_exit, ii_copy, ii_paste, ii_cut, ii_selectall, ii_about, ii_developer, ii_size, ii_type, ii_style;
  37.         JFileChooser fc;
  38.         FileNameExtensionFilter filter;

  39.         Ch04()
  40.         {
  41.                 initialize();
  42.         }

  43.         void initialize()
  44.         {
  45.                 try {
  46.                         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  47.                 } catch (Exception e) {}

  48.                 ic=new ImageIcon(Ch04.class.getResource("pic/editor.png"));
  49.                 ii_new=new ImageIcon(Ch04.class.getResource("pic/new.png"));
  50.                 ii_open=new ImageIcon(Ch04.class.getResource("pic/open.png"));
  51.                 ii_save=new ImageIcon(Ch04.class.getResource("pic/save.png"));
  52.                 ii_exit=new ImageIcon(Ch04.class.getResource("pic/exit.png"));
  53.                 ii_copy=new ImageIcon(Ch04.class.getResource("pic/copy.png"));
  54.                 ii_paste=new ImageIcon(Ch04.class.getResource("pic/paste.png"));
  55.                 ii_cut=new ImageIcon(Ch04.class.getResource("pic/cut.png"));
  56.                 ii_selectall=new ImageIcon(Ch04.class.getResource("pic/selectall.png"));
  57.                 ii_about=new ImageIcon(Ch04.class.getResource("pic/about.png"));
  58.                 ii_developer=new ImageIcon(Ch04.class.getResource("pic/developer.png"));
  59.                 ii_size=new ImageIcon(Ch04.class.getResource("pic/size.png"));
  60.                 ii_type=new ImageIcon(Ch04.class.getResource("pic/type.png"));
  61.                 ii_style=new ImageIcon(Ch04.class.getResource("pic/style.png"));

  62.                 filter=new FileNameExtensionFilter("純文字檔案", "txt");

  63.                 fc=new JFileChooser();
  64.                 fc.addChoosableFileFilter(filter);
  65.                 fc.setFileFilter(filter);

  66.                 mi_new=new JMenuItem("開新檔案",ii_new);
  67.                 mi_new.addActionListener(this);
  68.                 mi_open=new JMenuItem("開啟舊檔",ii_open);
  69.                 mi_open.addActionListener(this);
  70.                 mi_save=new JMenuItem("儲存檔案",ii_save);
  71.                 mi_save.addActionListener(this);
  72.                 mi_exit=new JMenuItem("結束",ii_exit);
  73.                 mi_exit.addActionListener(this);
  74.                 mi_copy=new JMenuItem("複製",ii_copy);
  75.                 mi_copy.addActionListener(this);
  76.                 mi_paste=new JMenuItem("貼上",ii_paste);
  77.                 mi_paste.addActionListener(this);
  78.                 mi_cut=new JMenuItem("剪下",ii_cut);
  79.                 mi_cut.addActionListener(this);
  80.                 mi_selectall=new JMenuItem("全選",ii_selectall);
  81.                 mi_selectall.addActionListener(this);
  82.                 mi_about=new JMenuItem("關於 My Editor",ii_about);
  83.                 mi_about.addActionListener(this);
  84.                
  85.                 rbmi_size[0]=new JRadioButtonMenuItem("大(22)");
  86.                 rbmi_size[1]=new JRadioButtonMenuItem("中(18)", true);
  87.                 rbmi_size[2]=new JRadioButtonMenuItem("小(14)");
  88.                 btg_1=new ButtonGroup();
  89.                 for(int i=0; i<rbmi_size.length; i++)
  90.                         btg_1.add(rbmi_size[i]);

  91.                 rbmi_type[0]=new JRadioButtonMenuItem("一般", true);
  92.                 rbmi_type[1]=new JRadioButtonMenuItem("粗體");
  93.                 rbmi_type[2]=new JRadioButtonMenuItem("斜體");
  94.                 rbmi_type[3]=new JRadioButtonMenuItem("粗體+斜體");
  95.                 btg_2=new ButtonGroup();
  96.                 for(int i=0; i<rbmi_type.length; i++)
  97.                         btg_2.add(rbmi_type[i]);
  98.                
  99.                 rbmi_style[0]=new JRadioButtonMenuItem("白底黑字", true);
  100.                 rbmi_style[1]=new JRadioButtonMenuItem("黑底白字");
  101.                 btg_3=new ButtonGroup();
  102.                 for(int i=0; i<rbmi_style.length; i++)
  103.                         btg_3.add(rbmi_style[i]);
  104.                
  105.                 mn_size=new JMenu("文字大小");
  106.                 mn_size.setIcon(ii_size);
  107.                 for(int i=0; i<rbmi_size.length; i++)
  108.                         mn_size.add(rbmi_size[i]);
  109.                
  110.                 mn_style=new JMenu("文字樣式");
  111.                 mn_style.setIcon(ii_style);
  112.                 for(int i=0; i<rbmi_style.length; i++)
  113.                         mn_style.add(rbmi_style[i]);
  114.                
  115.                 mn_type=new JMenu("風格");
  116.                 mn_type.setIcon(ii_type);
  117.                 for(int i=0; i<rbmi_type.length; i++)
  118.                         mn_type.add(rbmi_type[i]);
  119.                
  120.                 mn_file=new JMenu(" 檔案(F) ");
  121.                 mn_file.setMnemonic('F');
  122.                 mn_file.add(mi_new);
  123.                 mn_file.add(mi_open);
  124.                 mn_file.add(mi_save);
  125.                 mn_file.addSeparator();
  126.                 mn_file.add(mi_exit);

  127.                 mn_edit=new JMenu(" 編輯(E) ");
  128.                 mn_edit.setMnemonic('E');
  129.                 mn_edit.add(mi_copy);
  130.                 mn_edit.add(mi_paste);
  131.                 mn_edit.add(mi_cut);
  132.                 mn_edit.addSeparator();
  133.                 mn_edit.add(mi_selectall);
  134.                
  135.                 mn_option=new JMenu(" 設定(O) ");
  136.                 mn_option.setMnemonic('O');
  137.                 mn_option.add(mn_size);
  138.                 mn_option.add(mn_type);
  139.                 mn_option.addSeparator();
  140.                 mn_option.add(mn_style);

  141.                 mn_help=new JMenu(" 說明(H) ");
  142.                 mn_help.setMnemonic('H');     
  143.                 mn_help.add(mi_about);

  144.                 mb=new JMenuBar();
  145.                 mb.setBorder(new BevelBorder(BevelBorder.RAISED));
  146.                 mb.add(mn_file);
  147.                 mb.add(mn_edit);
  148.                 mb.add(mn_option);
  149.                 mb.add(mn_help);

  150.                 ta=new JTextArea();
  151.                 ta.setFont(new Font("新細明體", Font.PLAIN, 20));
  152.                 ta.setLineWrap(true);

  153.                 sp=new JScrollPane(ta);

  154.                 fm=new JFrame("My Editor");
  155.                 fm.setIconImage(ic.getImage());
  156.                 fm.setBounds(100, 100, 500, 350);
  157.                 fm.setVisible(true);
  158.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  159.                 fm.add(sp);
  160.                 fm.setJMenuBar(mb);
  161.         }
  162.         public static void main(String[] args) {
  163.                 new Ch04();

  164.         }

  165.         public void actionPerformed(ActionEvent e) {
  166.                 if(e.getSource()==mi_open)
  167.                 {
  168.                         int ret=fc.showOpenDialog(null);
  169.                         if(ret==JFileChooser.APPROVE_OPTION)
  170.                         {
  171.                                 try {
  172.                                         File fl=fc.getSelectedFile();
  173.                                         BufferedReader br=new BufferedReader(new FileReader(fl.getAbsolutePath()));
  174.                                         String str=br.readLine();
  175.                                         String tmp=br.readLine();
  176.                                         while(tmp!=null)
  177.                                         {
  178.                                                 str+="\r\n";
  179.                                                 str+=tmp;
  180.                                                 tmp=br.readLine();
  181.                                         }
  182.                                         ta.setText(str);
  183.                                         br.close();
  184.                                         fm.setTitle("My Editor - "+fl.getName());
  185.                                 } catch (Exception ex) {}
  186.                         }
  187.                 }
  188.                 if(e.getSource()==mi_save)
  189.                 {
  190.                         int ret=fc.showSaveDialog(null);
  191.                         if(ret==JFileChooser.APPROVE_OPTION)
  192.                         {
  193.                                 try {
  194.                                         File fl=fc.getSelectedFile();
  195.                                         String path="";
  196.                                         if(fl.getAbsolutePath().substring(fl.getAbsolutePath().length()-4).equals(".txt"))
  197.                                         {
  198.                                                 path=fl.getAbsolutePath();
  199.                                                 fm.setTitle("My Editor - "+fl.getName());
  200.                                         }else
  201.                                         {
  202.                                                 path=fl.getAbsolutePath()+".txt";
  203.                                                 fm.setTitle("My Editor - "+fl.getName()+".txt");
  204.                                         }
  205.                                         BufferedWriter bw=new BufferedWriter(new FileWriter(path));
  206.                                         bw.write(ta.getText().replaceAll("\n", "\r\n"));   
  207.                                         bw.flush();
  208.                                         bw.close();
  209.                                 } catch (Exception ex) {}

  210.                         }
  211.                 }
  212.                 if(e.getSource()==mi_new)
  213.                 {
  214.                         ta.setText("");
  215.                         fm.setTitle("My Editor - 未命名");
  216.                 }
  217.                 if(e.getSource()==mi_exit)
  218.                         System.exit(0);
  219.                 if(e.getSource()==mi_copy)
  220.                         ta.copy();
  221.                 if(e.getSource()==mi_paste)
  222.                         ta.paste();
  223.                 if(e.getSource()==mi_cut)
  224.                         ta.cut();
  225.                 if(e.getSource()==mi_selectall)
  226.                         ta.selectAll();
  227.                 if(e.getSource()==mi_about)
  228.                 {
  229.                         String msg="本軟體由社團法人高雄市資訊培育協會青少年程式設計班學員\n林宇翔所開發,感謝您的使用!";
  230.                         JOptionPane.showMessageDialog(fm,msg,"關於 My Editor",JOptionPane.INFORMATION_MESSAGE,ii_developer);
  231.                 }
  232.         }

  233. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://seed.istak.org.tw/) Powered by Discuz! 7.2