zoukankan      html  css  js  c++  java
  • Java实现记事本|IO流/GUI

    Java实现记事本

    题目

    利用GUI实现一个简单的记事本(notepad),即打开文件,文字内容显示在界面上;
    允许对文字内容进行编辑,并可以保存到文件。

    代码

    package notePadExp;
    
    import java.awt.BorderLayout;
    import java.awt.FileDialog;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedReader;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    
    class notPadcontainer{
    	
    	public Boolean visible = false;
    	//组件定义成属性
    	public JFrame notPadFrame;
    	public JMenuBar notPadMenuBar;
    	public JMenu firMenu;
    	public JMenu secMenu;
    	public JMenu thirMenu;
    	public JMenu fourMenu;
    	
    	public JMenuItem buildItem;
    	public JMenuItem openItem;
    	public JMenuItem reserveItem;
    	public JMenuItem paperSetItem;
    	public JMenuItem clearItem;
    	public JMenuItem aboutItem;
    	public JMenuItem fontItem20;
    	public JMenuItem fontItem40;
    	public JTextArea textArea;
    	public JScrollPane textScrollPane;
    	
    	 /*
    	  * 无参构造函数 
    	  * 创建组件 初始化组件
    	 */
    	notPadcontainer(){
    		//窗体Frame
    		this.notPadFrame = new JFrame("notePad by fishers"); //设置窗体 名字为notePad
    		this.notPadFrame.setLayout(new BorderLayout()); //边界布局方式
    		this.notPadFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭框
    		this.notPadFrame.setSize(500,500); //设置窗口大小
    
    		//菜单组件
    		this.notPadMenuBar = new JMenuBar();
    		this.firMenu = new JMenu("文件");
    		this.thirMenu = new JMenu("字体");
    		this.secMenu = new JMenu("编辑");
    		this.fourMenu = new JMenu("帮助");
    		
    		
    		//create JMenuItem for the First menu
    		this.buildItem = new JMenuItem("新建");
    		this.openItem = new JMenuItem("打开");
    		this.reserveItem = new JMenuItem("保存");
    		this.paperSetItem = new JMenuItem("页面设置");
    		
    		//create JMenuItem for the sec thir four menu
    		this.clearItem = new JMenuItem("清空");
    		this.aboutItem = new JMenuItem("关于");
    		this.fontItem20 = new JMenuItem("字体20号");
    		this.fontItem40 = new JMenuItem("字体40号");
    		//文本组件
    		this.textArea = new JTextArea();
    		this.textScrollPane = new JScrollPane(textArea);
    		textArea.setFont(new Font("宋体",Font.PLAIN,20)); //默认20号字体
    		ItemAdd();
    		runListener();
    	}
    	
    	//添加组件
    	public void ItemAdd(){
    		
    		//添加JMenu到JMenuBar
    		notPadMenuBar.add(firMenu);
    		notPadMenuBar.add(secMenu);
    		notPadMenuBar.add(thirMenu);
    		notPadMenuBar.add(fourMenu);
    		
    		//添加JMenuItem到第一个菜单
    		firMenu.add(buildItem);
    		firMenu.add(openItem);
    		firMenu.add(reserveItem);
    		firMenu.add(paperSetItem);
    		secMenu.add(clearItem);
    		thirMenu.add(fontItem20);
    		thirMenu.add(fontItem40);
    		fourMenu.add(aboutItem);
    		
    		//notPadFrame中添加各个组件
    		this.notPadFrame.setJMenuBar(notPadMenuBar);
    		this.notPadFrame.add(textScrollPane,BorderLayout.CENTER);
    	}
    
    	
    	
    	/*
    	 * 事件监听代码部分
    	*/
    	public void runListener() {
    		//新建文件 = 清空。。
    		buildItem.addActionListener( e -> {
    			textArea.setText("");
    		});		
    		
    		//打开文件
    		openItem.addActionListener(new ActionListener() {
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				//设置弹出框 FileDialog
    				FileDialog saveFiledialog = new FileDialog(notPadFrame,"打开文件",FileDialog.LOAD);
    				saveFiledialog.setVisible(true);
    				String fileDir = saveFiledialog.getDirectory(); //拿到目录
    				String fileName = saveFiledialog.getFile(); //拿到文件名
    //				System.out.println(fileDir);
    //				System.out.println(fileName);
    				File openFile = new File(fileDir,fileName); //使用File类创建新文件对象
    				try {
    					FileReader freader = new FileReader(openFile); //字符流
    					StringBuffer tempBuffer  = new StringBuffer();//StringBuffer可变
    					int len = 0; //下面使用read方法读取
    					while((len = freader.read()) != -1) {
    						tempBuffer.append((char)len); //append方法加入StringBuffer
    					}
    					String openString = new String(tempBuffer.toString());
    					textArea.setText(openString);
    					freader.close();//关闭流
    				} catch (FileNotFoundException e1) {
    					// TODO Auto-generated catch block
    					e1.printStackTrace();
    				} catch (IOException e1) {
    					// TODO Auto-generated catch block
    					e1.printStackTrace();
    				}
    			}
    		});
    		
    		//保存文件
    		reserveItem.addActionListener(new ActionListener() {
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub 
    				FileDialog saveFiledialog = new FileDialog(notPadFrame,"保存文件",FileDialog.SAVE);//父级frame 标题 mode
    				saveFiledialog.setVisible(true);
    				String fileDir = saveFiledialog.getDirectory();
    				String fileName = saveFiledialog.getFile();
    				System.out.println(fileDir);
    				System.out.println(fileName);
    				String ContentString = textArea.getText();
    				File saveFile = new File(fileDir,fileName);
    				try {
    					FileWriter fWriter = new FileWriter(saveFile); //使用字符流写文件
    					fWriter.write(ContentString); //写文件
    					fWriter.close(); //关闭流
    				}catch (IOException e1) {
    					// TODO Auto-generated catch block
    					e1.printStackTrace();
    				}
    			}
    		});
    		
    		//清空文件
    		clearItem.addActionListener( e -> {
    			textArea.setText("");
    		});
    
    		//监听关于
    		aboutItem.addActionListener(new ActionListener() {
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				JFrame aboutFrame = new JFrame("关于"); //新建窗口
    				aboutFrame.setLayout(new BorderLayout());
    				aboutFrame.setSize(300,115);
    				aboutFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);//设置隐藏窗口
    				
    				
    				JPanel panel  = new JPanel();
    				JLabel label = new JLabel("不会换行、中文乱码的记事本");
    				JPanel panel2  = new JPanel();
    				JLabel label2 = new JLabel("Copyright © 2019 fishers");
    				panel.add(label);
    				panel2.add(label2);
    				aboutFrame.add(panel,BorderLayout.CENTER);
    				aboutFrame.add(panel2,BorderLayout.PAGE_START);
    				aboutFrame.setVisible(true);
    			}
    		});
    		
    		fontItem20.addActionListener(e->{
    			textArea.setFont(new Font("宋体",Font.PLAIN,20));
    		});
    		
    		fontItem40.addActionListener(e->{
    			textArea.setFont(new Font("宋体",Font.PLAIN,40));
    		});
    	}
    	
    	
    	
    	//setVisible:设置窗口显示
    	public void setVisible(Boolean visible) {
    		this.visible = visible;
    		this.notPadFrame.setVisible(this.visible);
    	}
    }
    
    public class notePad {
    
    	public static void main(String[] args) {
    		notPadcontainer oneNote = new notPadcontainer();
    		oneNote.setVisible(true);
    	}
    
    }
    
    
  • 相关阅读:
    0.0pomelo的优缺点
    python操作MySQL
    MySQL-基本查询语句及方法,连表和子查询
    MySQL-外键对应关系
    MySQL--存储引擎、数据类型、约束条件
    数据库MySQL安装、基本指令
    并发编程-协程、池,io模型
    python并发编程-GIL全局解释锁,Event事件,信号量
    并发编程-线程
    并发编程-进程
  • 原文地址:https://www.cnblogs.com/fisherss/p/11725383.html
Copyright © 2011-2022 走看看