技术点不多,主要涉及一些IO类的使用与GUI的用法,为大家提供一个简单的模板,更多的功能当然是留给大家自己来思考,代码可以自己拷过去运行一下,打开文件与另存为方法请填入绝对路径下的文件名,点击保存会直接保存到D盘,还可以设置字体,代码如下:
面板类:
import java.awt.FlowLayout; import java.awt.Font; 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.OutputStream; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.ScrollPaneConstants; @SuppressWarnings("serial") public class NotePad extends JFrame{ JTextArea textArea=new JTextArea(); public static void main(String args[]){ NotePad tf=new NotePad(); tf.showframe(); } public void showframe(){ //创建一个菜单选项 JMenuBar menubar=initMenu(); //给输入框添加滚动条 JScrollPane scroll=new JScrollPane(textArea); //设置滚动条的大小为窗口的大小 scroll.setPreferredSize(this.getSize()); //设置滚动条的出现方式为自动出现 scroll.setAutoscrolls(true); //设置垂直的滚动条总是显示 scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); //设置横向的滚动条总是显示 scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); //字体说明:0常规,1粗体,2斜体,3倾斜加粗 this.setJMenuBar(menubar); this.add(scroll); this.setTitle("我的记事本"); this.setSize(600,400); this.setDefaultCloseOperation(3); this.setLocationRelativeTo(null); this.setVisible(true); } //实例化一个菜单 public JMenuBar initMenu(){ JMenuBar menubar=new JMenuBar(); //主选项 String menu1[]=new String[]{"文件","编辑","格式","查看","帮助"}; //扩展选项 String me1[][]=new String[][]{{"打开(O) Ctrl+O","保存(S) Ctrl+S","另存为(A) Ctrl+A", "页面设置(U)","打印(P)","退出(E)"},{"撤销(Z) Ctrl+Z","剪切(X) Ctrl+X", "复制(C) Ctrl+C","粘贴(V) Ctrl+V","删除(D) Ctrl+D","查找(F) Ctrl+F", "替换(R) Ctrl+R"},{"自动换行","字体"},{"状态栏"}, {"查看帮助","关于记事本"}}; Font font=new Font("楷体",1,16); for(int i=0;i<menu1.length;i++){ //实例化菜单选项并添加到菜单上 JMenu menu=new JMenu(menu1[i]); menu.setFont(font); //实例化子菜单选项 for(int j=0;j<me1[i].length;j++){ //添加子菜单选项 JMenuItem me=new JMenuItem(me1[i][j]); me.setFont(font); //将子菜单添加到主菜单上面 menu.add(me); //给子菜单项添加监听器 MenuListener mlis=new MenuListener(new openFrame(),new fontFrame(),new saveFrame(),this); //设置按钮响应 me.setActionCommand(me1[i][j]); me.addActionListener(mlis); } //将菜单添加到菜单条上面 menubar.add(menu); } return menubar; } /** * 打开文件的界面 */ class openFrame { public void showFrame(){ final JFrame frame=new JFrame(); JLabel file_la=new JLabel("文件名"); final JTextField file_jf=new JTextField(15); JButton sure=new JButton("确定"); frame.setLayout(new FlowLayout()); frame.add(file_la); frame.add(file_jf); frame.add(sure); frame.setSize(240,120); frame.setLocationRelativeTo(null); frame.setTitle("请输入文件名"); frame.setVisible(true); sure.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //打开文件的方法 openFile(file_jf.getText().toString()); frame.setVisible(false); } }); } } /** * 保存文件的界面 */ class saveFrame { public void showFrame(){ final JFrame frame=new JFrame(); JLabel file_la=new JLabel("文件名"); final JTextField file_jf=new JTextField(15); JButton sure=new JButton("确定"); frame.setLayout(new FlowLayout()); frame.add(file_la); frame.add(file_jf); frame.add(sure); frame.setSize(240,120); frame.setLocationRelativeTo(null); frame.setTitle("请输入文件名"); frame.setVisible(true); sure.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ saveFile(file_jf.getText().toString()); frame.setVisible(false); } }); } } /** * 设置字体的界面 */ class fontFrame{ public void showFrame(){ final JFrame fontframe=new JFrame(); JButton sure=new JButton("确定"); Font f=new Font("宋体",0,16); //字体选择项 String fontSelection[]=new String[]{"华文彩云","华文行楷","华文楷体","华文琥珀","华文中宋", "华文细黑","华文新魏","方正姚体","仿宋","宋体","黑体","隶书","楷体","幼圆"}; final JComboBox<String> fontBox=new JComboBox<String>(fontSelection); //设置滚动条 JScrollPane scroll=new JScrollPane(fontBox); fontBox.setFont(f); //字形选择项 String boldSelection[]=new String[]{"常规","加粗","斜体","倾斜加粗"}; final JComboBox<String> boldBox=new JComboBox<String>(boldSelection); boldBox.setFont(f); //字体大小 String size[]=new String[]{"8","9","10","11","12","14","16","18","20","22", "24","26","28","36","48","72"}; final JComboBox<String> fontsize=new JComboBox<String>(size); JScrollPane fontSize=new JScrollPane(fontsize); fontframe.setLayout(new FlowLayout()); fontframe.add(scroll); fontframe.add(boldBox); fontframe.add(fontSize); fontframe.add(sure); fontframe.setSize(350,260); fontframe.setTitle("请选择字体"); fontframe.setResizable(false); //设置窗体显示的位置 fontframe.setLocationRelativeTo(null); fontframe.setVisible(true); sure.addActionListener(new ActionListener(){ //字体设置的方法 public void actionPerformed(ActionEvent e){ //得到字体框的选择项 String font=fontBox.getSelectedItem().toString(); //得到样式框的选择项 String bold=boldBox.getSelectedItem().toString(); //得到字体大小框的字体大小 String s=fontsize.getSelectedItem().toString(); Integer size=Integer.parseInt(s); //设置字体 if(bold.equals("常规")){ textArea.setFont(new Font(font,0,size)); }else if(bold.equals("加粗")){ textArea.setFont(new Font(font,1,size)); }else if(bold.equals("斜体")){ textArea.setFont(new Font(font,2,size)); }else if(bold.equals("倾斜加粗")){ textArea.setFont(new Font(font,3,size)); } fontframe.setVisible(false); } }); } } /** * 打开文件的方法 * @param fileName 文件的绝对路径名 */ public void openFile(String fileName){ File file=new File(fileName); if(file.exists()){ try{ //读取文件 FileInputStream in=new FileInputStream(file); //创建与文件大小相同的字节数组 byte content[]=new byte[in.available()]; //读取文件 in.read(content); //将读到的文件放在输入框中显示出来 textArea.setText(new String(content)); in.close(); }catch(Exception e){ e.printStackTrace(); } } else{ System.out.println("文件不存在"); } } /** * 保存文件的方法 * @param fileName 文件的绝对路径名 */ public void saveFile(String fileName){ String text=textArea.getText(); try{ OutputStream out=new FileOutputStream(fileName); //text.getBytes();获取文件的字节数 out.write(text.getBytes()); out.close(); }catch(Exception e){ e.printStackTrace(); } } }
监听类:
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JOptionPane; import 记事本.NotePad.fontFrame; import 记事本.NotePad.openFrame; import 记事本.NotePad.saveFrame; public class MenuListener implements ActionListener{ private openFrame open;//弹出打开文件的窗体 private fontFrame font;//弹出字体文件的窗体 private saveFrame save;//弹出保存文件的窗体 private NotePad tf; public MenuListener(openFrame open,fontFrame font,saveFrame save,NotePad tf){ this.open=open; this.font=font; this.save=save; this.tf=tf; } public void actionPerformed(ActionEvent e){ String com=e.getActionCommand(); if(com.equals("打开(O) Ctrl+O")){//打开一个记事本文件 open.showFrame(); } else if(com.equals("字体")){//设置字体的窗口 font.showFrame(); } else if(com.equals("保存(S) Ctrl+S")){//快捷保存文件 tf.saveFile("d://新建记事本.txt"); } else if(com.equals("另存为(A) Ctrl+A")){//另存为新文件 save.showFrame(); } else if(com.equals("退出(E)")){ int selection=JOptionPane.showConfirmDialog(null, "确定要退出?","",JOptionPane.YES_NO_OPTION); if(selection==0){ tf.dispose();//退出程序 }else{ } } } }