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);
    	}
    
    }
    
    
  • 相关阅读:
    Could A New Linux Base For Tablets/Smartphones Succeed In 2017?
    使用libhybris,glibc和bionic共存时的TLS冲突的问题
    6 Open Source Mobile OS Alternatives To Android in 2018
    Using MultiROM
    GPU drivers are written by the GPU IP vendors and they only provide Android drivers
    Jolla Brings Wayland Atop Android GPU Drivers
    How to Use Libhybris and Android GPU Libraries with Mer (Linux) on the Cubieboard
    闲聊Libhybris
    【ARM-Linux开发】wayland和weston的介绍
    Wayland and X.org problem : Why not following the Android Solution ?
  • 原文地址:https://www.cnblogs.com/fisherss/p/11725383.html
Copyright © 2011-2022 走看看