本帖最後由 tonyh 於 2017-2-11 17:09 編輯
使用 JRadioButtonMenuItem 類別產生帶有 radio button 的 menu item,再將同一區塊的選項加入由 ButtonGroup 類別所產生的群組物件中,使於同一區塊只有一個選項可被選取。
- import java.awt.Font;
- import javax.swing.ButtonGroup;
- import javax.swing.JFileChooser;
- import javax.swing.JFrame;
- import javax.swing.JMenu;
- import javax.swing.JMenuBar;
- import javax.swing.JMenuItem;
- import javax.swing.JRadioButtonMenuItem;
- import javax.swing.JOptionPane;
- //import javax.swing.JDialog;
- import javax.swing.JScrollPane;
- import javax.swing.JTextArea;
- import javax.swing.ImageIcon;
- import javax.swing.UIManager;
- import javax.swing.border.BevelBorder;
- import javax.swing.filechooser.FileNameExtensionFilter;
- import java.awt.event.ActionListener;
- import java.awt.event.ActionEvent;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileReader;
- import java.io.FileWriter;
- public class Ch09 implements ActionListener{
-
- String title="My Editor";
- JFrame fm,fm2;
- JScrollPane sp;
- JTextArea ta;
- ImageIcon ic,ic_cut,ic_exit,ic_new,ic_open,ic_paste,ic_save,ic_copy,ic_selectall,ic_about,ic_developer,ic_size,ic_style,ic_type;
- JMenuBar mb;
- JMenu mn_file,mn_edit,mn_option,mn_help,mn_size,mn_type,mn_style;
- JMenuItem mi_new,mi_open,mi_save,mi_exit,mi_copy,mi_paste,mi_cut,mi_selectall,mi_about;
- JRadioButtonMenuItem rbmi_1[]=new JRadioButtonMenuItem[3];
- JRadioButtonMenuItem rbmi_2[]=new JRadioButtonMenuItem[4];
- JRadioButtonMenuItem rbmi_3[]=new JRadioButtonMenuItem[2];
- ButtonGroup bg_1,bg_2,bg_3;
- JFileChooser fc;
- FileNameExtensionFilter filter1;
-
- void initialize()
- {
- try {
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
- } catch (Exception e){}
- filter1 = new FileNameExtensionFilter("文字文件(*.txt)", "txt");
-
- fc=new JFileChooser();
- fc.setFileFilter(filter1);
-
- ic=new ImageIcon(Ch09.class.getResource("pic/editor.png"));
- ic_cut=new ImageIcon(Ch09.class.getResource("pic/cut.png"));
- ic_exit=new ImageIcon(Ch09.class.getResource("pic/exit.png"));
- ic_new=new ImageIcon(Ch09.class.getResource("pic/new.png"));
- ic_open=new ImageIcon(Ch09.class.getResource("pic/open.png"));
- ic_paste=new ImageIcon(Ch09.class.getResource("pic/paste.png"));
- ic_save=new ImageIcon(Ch09.class.getResource("pic/save.png"));
- ic_copy=new ImageIcon(Ch09.class.getResource("pic/copy.png"));
- ic_selectall=new ImageIcon(Ch09.class.getResource("pic/selectall.png"));
- ic_about=new ImageIcon(Ch09.class.getResource("pic/about.png"));
- ic_developer=new ImageIcon(Ch09.class.getResource("pic/developer.png"));
- ic_size=new ImageIcon(Ch09.class.getResource("pic/size.png"));
- ic_type=new ImageIcon(Ch09.class.getResource("pic/type.png"));
- ic_style=new ImageIcon(Ch09.class.getResource("pic/style.png"));
-
- mi_new=new JMenuItem("開新檔案",ic_new);
- mi_new.addActionListener(this);
- mi_open=new JMenuItem("開啟舊檔",ic_open);
- mi_open.addActionListener(this);
- mi_save=new JMenuItem("儲存檔案",ic_save);
- mi_save.addActionListener(this);
- mi_exit=new JMenuItem("結束",ic_exit);
- mi_exit.addActionListener(this);
- mi_copy=new JMenuItem("複製",ic_copy);
- mi_copy.addActionListener(this);
- mi_paste=new JMenuItem("貼上",ic_paste);
- mi_paste.addActionListener(this);
- mi_cut=new JMenuItem("剪下",ic_cut);
- mi_cut.addActionListener(this);
- mi_selectall=new JMenuItem("全選",ic_selectall);
- mi_selectall.addActionListener(this);
- mi_about=new JMenuItem("關於 My Editor",ic_about);
- mi_about.addActionListener(this);
-
- rbmi_1[0]=new JRadioButtonMenuItem("大 (22)");
- rbmi_1[1]=new JRadioButtonMenuItem("中 (18)",true);
- rbmi_1[2]=new JRadioButtonMenuItem("小 (14)");
- bg_1=new ButtonGroup();
- for(int i=0; i<rbmi_1.length; i++)
- bg_1.add(rbmi_1[i]);
-
- rbmi_2[0]=new JRadioButtonMenuItem("一般",true);
- rbmi_2[1]=new JRadioButtonMenuItem("粗體");
- rbmi_2[2]=new JRadioButtonMenuItem("斜體");
- rbmi_2[3]=new JRadioButtonMenuItem("粗體+斜體");
- bg_2=new ButtonGroup();
- for(int i=0; i<rbmi_2.length; i++)
- bg_2.add(rbmi_2[i]);
-
- rbmi_3[0]=new JRadioButtonMenuItem("白底黑字",true);
- rbmi_3[1]=new JRadioButtonMenuItem("黑底白字");
- bg_3=new ButtonGroup();
- for(int i=0; i<rbmi_3.length; i++)
- bg_3.add(rbmi_3[i]);
- mn_file=new JMenu(" 檔案(F) ");
- mn_file.setMnemonic('F'); //設定快速鍵
- mn_file.add(mi_new);
- mn_file.add(mi_open);
- mn_file.add(mi_save);
- mn_file.addSeparator(); //分隔線
- mn_file.add(mi_exit);
-
- mn_edit=new JMenu(" 編輯(E) ");
- mn_edit.setMnemonic('E'); //設定快速鍵
- mn_edit.add(mi_copy);
- mn_edit.add(mi_paste);
- mn_edit.add(mi_cut);
- mn_edit.addSeparator();
- mn_edit.add(mi_selectall);
-
- mn_size=new JMenu("文字大小");
- mn_size.setIcon(ic_size);
- for(int i=0; i<rbmi_1.length; i++)
- mn_size.add(rbmi_1[i]);
- mn_type=new JMenu("文字樣式");
- mn_type.setIcon(ic_type);
- for(int i=0; i<rbmi_2.length; i++)
- mn_type.add(rbmi_2[i]);
- mn_style=new JMenu("風格");
- mn_style.setIcon(ic_style);
- for(int i=0; i<rbmi_3.length; i++)
- mn_style.add(rbmi_3[i]);
-
- mn_option=new JMenu(" 設定(O) ");
- mn_option.setMnemonic('O');
- mn_option.add(mn_size);
- mn_option.add(mn_type);
- mn_option.addSeparator();
- mn_option.add(mn_style);
-
- mn_help=new JMenu(" 說明(H) ");
- mn_help.setMnemonic('H'); //設定快速鍵
- mn_help.add(mi_about);
-
- mb=new JMenuBar();
- mb.setBorder(new BevelBorder(BevelBorder.RAISED)); //設定具陰影效果的邊框
- mb.add(mn_file);
- mb.add(mn_edit);
- mb.add(mn_option);
- mb.add(mn_help);
-
- ta=new JTextArea();
- ta.setFont(new Font("新細明體", Font.PLAIN, 18));
- ta.setLineWrap(true); //自動換行
-
- sp=new JScrollPane(ta);
-
- fm=new JFrame(title+" - 未命名");
- fm.setBounds(100, 100, 500, 350);
- fm.setIconImage(ic.getImage());
- fm.setVisible(true);
- fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- fm.add(sp);
- fm.setJMenuBar(mb);
- }
-
- Ch09()
- {
- initialize();
- }
-
- public void actionPerformed(ActionEvent e)
- {
- if(e.getSource()==mi_new)
- {
- ta.setText("");
- fm.setTitle(title+" - 未命名");
- }
- else if(e.getSource()==mi_open)
- {
- int ret=fc.showOpenDialog(null);
- if(ret==JFileChooser.APPROVE_OPTION)
- {
- try
- {
- String str;
- File fi=fc.getSelectedFile();
- BufferedReader br=new BufferedReader(new FileReader(fi.getAbsolutePath()));
- ta.setText(br.readLine());
- do
- {
- str=br.readLine();
- if(str==null)
- break;
- ta.append("\n"+str);
- }while(true);
- br.close();
- fm.setTitle(title+" - "+fc.getName(fi));
- }catch(Exception ex){}
-
- }
- }
- else if(e.getSource()==mi_save)
- {
- int ret=fc.showSaveDialog(null);
- if(ret==JFileChooser.APPROVE_OPTION)
- {
- try
- {
- File fi=fc.getSelectedFile();
- BufferedWriter bw;
- String ext=fi.getAbsolutePath().substring(fi.getAbsolutePath().length()-4);
- System.out.println(ext);
- String fiPath="";
- if(fc.getFileFilter()==filter1)
- {
- if(ext.equals(".txt"))
- fiPath=fi.getAbsolutePath();
- else
- fiPath=fi.getAbsolutePath()+".txt";
- }
- else
- fiPath=fi.getAbsolutePath();
- bw=new BufferedWriter(new FileWriter(fiPath));
-
- bw.write(ta.getText().replaceAll("\n", "\r\n"));
- //windows下的文字檔分行符號:\r\n linux/unix下的文字檔分行符號:\r Mac下的文字檔分行符號:\n
- bw.flush();
- bw.close();
- fm.setTitle(title+" - "+fc.getName(fi));
- }catch(Exception ex){}
- }
- }
- else if(e.getSource()==mi_exit)
- System.exit(0);
- else if(e.getSource()==mi_copy)
- ta.copy();
- else if(e.getSource()==mi_paste)
- ta.paste();
- else if(e.getSource()==mi_cut)
- ta.cut();
- else if(e.getSource()==mi_selectall)
- ta.selectAll();
- else if(e.getSource()==mi_about)
- {
- String msg="本軟體由社團法人高雄市資訊培育協會青少年程式設計班學員\n林宇翔所開發,感謝您的使用!";
- JOptionPane.showMessageDialog(fm,msg,"關於 My Editor",JOptionPane.INFORMATION_MESSAGE,ic_developer);
- }
- }
-
- public static void main(String[] args) {
- new Ch09();
- }
- }
複製代碼 |