一、设计思路:
本项目是基于java和maven项目对象模型的记事本程序,本程序共分为文件操作类GuiMenu.class和记事本启动类App.class两个类。文件操作类主要负责软件的图形化界面显示和文件的操作,记事本启动类作为入口函数,主要负责程序的运行。 文件操作类通过java.awt类和javax.swing类来建立软件的图形窗口,JMenuItem的setActionCommand方法给每一个按钮设置一个字符串,并在最后的equals方法来比较字符串,判定用户所选择的功能,通过InputStream和OutputStream来建立输入输出流,并使用try-catch来捕捉异常。
二、使用的接口及方法:
JFileChooser类:
JButton类 JMenuItem类 Container类 JToolBar类 ActionListener接口:
体现面向对象的地方:
继承: 封装: 使用了private修饰符对数据成员进行访问控制。
代码:
1.文件操作类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
| package tech.codinglink.more;
import javax.swing.*; import javax.swing.text.DefaultStyledDocument; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream;
/** * 记事本图形菜单类 */ public class GuiMenu extends JFrame implements ActionListener{ //顶部菜单栏 private JMenuBar menuBar; //菜单的文件、编辑、关于按键 private JMenu menuFile,menuEdit,menuAbout; // 菜单项新建、打开、保存、退出、剪切、复制、粘贴、关于 private JMenuItem itemNewFile,itemOpen,itemSave,itemExit,itemCut,itemCopy,itemPaste,itemAbout; //工具栏 private JToolBar toolBar; //新建、打开、保存、退出、剪切、复制、粘贴、关于按钮 private JButton butNewFile,butOpen,butSave,butExit,butCut,butCopy,butPaste,butAbout; //编辑窗口 private JTextPane textPane; //底部标签栏 private JLabel label; //文件选择器 private JFileChooser fileChooser; //滚动条 private JScrollPane scrollPane; /** * 建立构造方法 */ public GuiMenu(){ //实例化菜单栏 menuBar =new JMenuBar(); //实例化菜单 menuFile =new JMenu("文件"); menuEdit =new JMenu("编辑"); menuAbout=new JMenu("关于"); //实例化菜单并添加事件监听 itemNewFile =new JMenuItem("新建"); itemNewFile.addActionListener(this); itemNewFile.setActionCommand("newFile"); itemOpen=new JMenuItem("打开"); itemOpen.addActionListener(this); itemOpen.setActionCommand("open"); itemSave=new JMenuItem("保存"); itemSave.addActionListener(this); itemSave.setActionCommand("save"); itemExit=new JMenuItem("退出"); itemExit.addActionListener(this); itemExit.setActionCommand("exit"); itemCut=new JMenuItem("剪切"); itemCut.addActionListener(this); itemCut.setActionCommand("cut"); itemCopy=new JMenuItem("复制"); itemCopy.addActionListener(this); itemCopy.setActionCommand("copy"); itemPaste=new JMenuItem("粘贴"); itemPaste.addActionListener(this); itemPaste.setActionCommand("paste"); itemAbout=new JMenuItem("关于"); itemAbout.addActionListener(this); itemAbout.setActionCommand("about"); //文件设置菜单项 menuFile.add(itemNewFile); menuFile.add(itemOpen); menuFile.add(itemExit); menuFile.add(itemSave); //编辑设置菜单项 menuEdit.add(itemCut); menuEdit.add(itemCopy); menuEdit.add(itemPaste); //关于设置菜单 menuAbout.add(itemAbout); //菜单栏设置菜单 menuBar.add(menuFile); menuBar.add(menuEdit); menuBar.add(menuAbout); this.setJMenuBar(menuBar); //实例化工具栏 toolBar =new JToolBar(); //实例化按钮 butNewFile=new JButton("新建"); butNewFile.addActionListener((ActionListener) this); butNewFile.setActionCommand("newFile"); butOpen=new JButton("打开"); butOpen.addActionListener((ActionListener) this); butOpen.setActionCommand("open"); butSave=new JButton("保存"); butSave.addActionListener((ActionListener) this); butSave.setActionCommand("save"); butExit=new JButton("退出"); butExit.addActionListener((ActionListener) this); butExit.setActionCommand("exit"); butCut=new JButton("剪切"); butCut.addActionListener((ActionListener) this); butCut.setActionCommand("cut"); butCopy=new JButton("复制"); butCopy.addActionListener((ActionListener) this); butCopy.setActionCommand("copy"); butPaste=new JButton("粘贴"); butPaste.addActionListener((ActionListener) this); butPaste.setActionCommand("paste"); butAbout=new JButton("关于"); butAbout.addActionListener((ActionListener) this); butAbout.setActionCommand("about"); //工具条设置按钮 toolBar.add(butNewFile); toolBar.add(butOpen); toolBar.add(butSave); toolBar.add(butExit); toolBar.add(butCut); toolBar.add(butCopy); toolBar.add(butPaste); toolBar.add(butAbout); //实例化编辑窗口 textPane =new JTextPane(); label=new JLabel("www.codinglink.tech ---by palm"); //实例化文件选择器 fileChooser=new JFileChooser(); //实例化滚动条 scrollPane = new JScrollPane(); //窗口容器中添加组件 Container container=getContentPane();//得到容器 container.add(toolBar,BorderLayout.NORTH);//增加工具栏 container.add(textPane,BorderLayout.CENTER);//文本输入框 container.add(label,BorderLayout.SOUTH);//增加状态栏
/** * 初始化窗口 */ //窗口标题 this.setTitle("CLNote"); //窗体大小 this.setSize(600,400); //设置图标 this.setIconImage(new ImageIcon("logo.jpeg").getImage()); //设置可关闭进程 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //获得屏幕宽度 int width=Toolkit.getDefaultToolkit().getScreenSize().width; //获得屏幕高度 int height=Toolkit.getDefaultToolkit().getScreenSize().height; //居中显示 this.setLocation((width-500)/2,(height-400)/2); //设置窗体可见 this.setVisible(true); //设置可改变窗体大小 this.setResizable(true); }
@Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("newFile")){ textPane.setDocument(new DefaultStyledDocument());//清空文档 } else if(e.getActionCommand().equals("open")){ int i=fileChooser.showOpenDialog(GuiMenu.this);//显示打开文件的对话框 if(i==JFileChooser.APPROVE_OPTION){//点击对话框打开选项 File file=fileChooser.getSelectedFile();//得到选择的文件 try{ InputStream input=new FileInputStream(file);//创建文件输入流 textPane.read(input,"d"); input.close(); }catch (Exception ex){ ex.printStackTrace();//抛出异常 } } } else if(e.getActionCommand().equals("save")){ int i=fileChooser.showSaveDialog(GuiMenu.this);//保存文件显示对话框 if(i==JFileChooser.APPROVE_OPTION){//点击选中对话框中保存按钮 File file=fileChooser.getSelectedFile();//得到选择的文件 try{ FileOutputStream output=new FileOutputStream(file);//创建文件输出流 output.write(textPane.getText().getBytes());//写入文件 }catch(Exception ex){ ex.printStackTrace();//抛出异常 } } } else if(e.getActionCommand().equals("exit")){ System.exit(0); } else if(e.getActionCommand().equals("cut")){ textPane.cut();//调用文本剪切方法 } else if(e.getActionCommand().equals("copy")){ textPane.copy(); } else if(e.getActionCommand().equals("paste")){ textPane.paste(); } else if(e.getActionCommand().equals("about")){ JOptionPane.showMessageDialog(GuiMenu.this,"www.codinglink.tech"); } } }
|
2.记事本启动类:
1 2 3 4 5 6 7 8 9 10 11
| package tech.codinglink;
import tech.codinglink.more.GuiMenu;
public class App { public static void main( String[] args ) { GuiMenu editor=new GuiMenu(); } }
|