`
cq520
  • 浏览: 165437 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

记事本的制作

阅读更多

     技术点不多,主要涉及一些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{
				
			}
		}
	}
	
}

 

0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics