关于利用多线程来构建一个记事本

JAVA中怎么运用多线程来构造记事本,完成记事本的基本功能。

多线程构造记事本是什么意思?单线程就可以了。

package java3.T10;

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.nio.charset.Charset;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;

public class NotePad extends JFrame implements ActionListener{

	/*
	 * 实现记事本的功能
	 * */
	JMenuBar menuBar; //菜单条
	JMenu mFile,mEdit; //子菜单
	JMenuItem miNew,miOpen,miSave,miExit; //菜单项
	JMenuItem miCut,miCopy,miPaste; //菜单项
	
	//文本区域框
	JTextArea txtContent;
	
	public NotePad() {
		super("记事本2020");
		//创建菜单项
		miNew = new JMenuItem("新建");
		/*
		 * setAccelerator:设置快捷键
		 * 第一个参数对应键盘的键
		 * 第二个参数就是控制键
		 * SHIFT      == 1
		 * CTRL       == 2
		 * CTRL+SHIFT == 3
		 * ALT        == 8
		 * 
		 * 
		 * */
		miNew.setAccelerator(KeyStroke.getKeyStroke('N', 2));
		miOpen = new JMenuItem("打开");
		miSave = new JMenuItem("保存");
		miExit = new JMenuItem("退出");
		//注册Action事件
		miNew.addActionListener(this);
		miOpen.addActionListener(this);
		miSave.addActionListener(this);
		miExit.addActionListener(this);
		//创建子菜单
		mFile = new JMenu("文件");
		//把菜单项添加到子菜单
		mFile.add(miNew);
		mFile.add(miOpen);
		mFile.add(miSave);
		//添加分隔条
		mFile.addSeparator();
		mFile.add(miExit);
		
		miCut = new JMenuItem("剪切");
		miCopy = new JMenuItem("拷贝");
		miPaste = new JMenuItem("粘贴");
		mEdit = new JMenu("编辑");
		mEdit.add(miCut);
		mEdit.add(miCopy);
		mEdit.add(miPaste);
		miCut.addActionListener(this);
		miCopy.addActionListener(this);
		miPaste.addActionListener(this);
		
		//创建菜单条
		menuBar = new JMenuBar();
		//把子菜单添加到菜单条
		menuBar.add(mFile);
		menuBar.add(mEdit);
		//菜单条添加到窗口
		setJMenuBar(menuBar);
		
		txtContent = new JTextArea();
		//添加到窗口,添加滚动条
		/*
		 * 垂直滚动条一直出现:JScrollPane.VERTICAL_SCROLLBAR_ALWAYS
		 * 垂直滚动条从来不出现:JScrollPane.VERTICAL_SCROLLBAR_NEVER
		 * 垂直滚动条需要的时候自动出现(默认值):JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED
		 * 
		 * 水平滚动条
		 * 垂直滚动条一直出现:JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS
		 * 垂直滚动条从来不出现:JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
		 * 垂直滚动条需要的时候自动出现(默认值):JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
		 * */
		add(new JScrollPane(txtContent));
		
		setSize(500,400);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);		
	}
	public static void main(String[] args) {
		
		new NotePad();

	}
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == miNew) {
			JOptionPane.showMessageDialog(null, "新建文件");
			//清空文本框内容
			txtContent.setText("");
		}else if (e.getSource() == miOpen) {
			//打开文件
			JFileChooser dlg = new JFileChooser();
			//设置对话框类型,为打开文件
			dlg.setDialogType(JFileChooser.OPEN_DIALOG);
			//打开对话框
			dlg.showOpenDialog(null);
			//获取选中的文件
			File file =dlg.getSelectedFile();
			//打开文件
			try {
				BufferedReader br = new BufferedReader(new FileReader(file));
				//读文件内容
				String txt = "";
				//循环读取文件内容,循环一次读一行
				while ((txt = br.readLine()) !=null) {
					
//					txt = new String(txt.getBytes("GB2312"),"utf-8");
					
					txtContent.append(txt + "\n");
				}
				//关闭
				br.close();
				
				
			}catch(Exception ex) {
				ex.printStackTrace();
			}
			
			
		}else if(e.getSource() == miSave) {
			//保存文件
			//打开文件
			JFileChooser dlg = new JFileChooser();
			//设置对话框类型,为打开文件
			dlg.setDialogType(JFileChooser.SAVE_DIALOG);
			//打开对话框
			dlg.showSaveDialog(null);
			
			File file = dlg.getSelectedFile();
			//获取文件名称
			String fileName = file.getAbsolutePath();
			//判断文件是否包含扩展名,indexOf返回指定字符在字符串中的索引,如果没有则返回-1
			if(fileName.indexOf('.') == -1) {
				fileName += ".txt";
			}
			
			//读取文本框内容
			String txt = txtContent.getText();
			//打开输出流保存文件
			try {
				BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
				bw.write(txt);
				bw.flush();
				bw.close();
			}catch(Exception ex) {
				ex.printStackTrace();
			}
			
		} else if (e.getSource() == miExit) {
			/*
			 * 错误图标:JOptionPane.ERROR_MESSAGE
			 * 信息图标:JOptionPane.INFORMATION_MESSAGE
			 * 警告图标:JOptionPane.Warning_MESSAGE
			 * 提问图标:JOptionPane.QUESTION_MESSAGE
			 * */
			Icon icon = new ImageIcon("upload/touxiang.png");
//			JOptionPane.showConfirmDialog(null, "退出确认?");
			//如果点击了确认就退出
			if(JOptionPane.showConfirmDialog(null, "退出确认?","退出",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,icon) == JOptionPane.OK_OPTION) {
				System.exit(0);
			}
		}else if(e.getSource() == miCopy) {
			//获取被选中的文本内容
			String txt = txtContent.getSelectedText();
			//获取系统的剪切板
			Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
			//把选中的内容转换为Transferable对象
			Transferable trans = new StringSelection(txt);
			//设置到剪切板
			clip.setContents(trans, null);
		} else if(e.getSource() == miCut) {
			//获取被选中的文本内容
			String txt = txtContent.getSelectedText();
			//获取系统的剪切板
			Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
			//把选中的内容转换为Transferable对象
			Transferable trans = new StringSelection(txt);
			//设置到剪切板
			clip.setContents(trans, null);
			
			//获取光标在文本框中的位置
			int pos = txtContent.getCaretPosition();
			
			//被选中文字前面的内容
			String prefix = txtContent.getText().substring(0,pos-txt.length());
			int len = txtContent.getText().length();
			if(pos < len) {
				//取被选中文字后面的内容
				prefix += txtContent.getText().substring(pos); 
			}
			//更新文本框的内容
			txtContent.setText(prefix);
			
		}else if(e.getSource() == miPaste) {
			//获取剪切板内容
			String txt = getCopyText();
			//获取文本框的内容
			String temp = txtContent.getText();
			//获取光标位置
			int pos = txtContent.getCaretPosition();
			//读取光标前面的内容 +      剪切板的内容
			txt = temp.substring(0, pos) + txt;
			if(pos <temp.length()) //光标不在内容的最后位置
				txt += temp.substring(pos);
			
			//更新文本框内容
			txtContent.setText(txt);
		}
		
	}
	//获取剪切板的内容
	public static String getCopyText() {
		Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();//获取剪切板
		Transferable trans = clip.getContents(null);//获取内容
		if (trans != null)
			//判断是否支持文本
			if (trans.isDataFlavorSupported(DataFlavor.stringFlavor))
				//获取并返回
				try {
					return (String) trans.getTransferData(DataFlavor.stringFlavor);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

		return null;
	}
}

 

package java3.T10;

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.nio.charset.Charset;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;

public class NotePad extends JFrame implements ActionListener{

	/*
	 * 实现记事本的功能
	 * */
	JMenuBar menuBar; //菜单条
	JMenu mFile,mEdit; //子菜单
	JMenuItem miNew,miOpen,miSave,miExit; //菜单项
	JMenuItem miCut,miCopy,miPaste; //菜单项
	
	//文本区域框
	JTextArea txtContent;
	
	public NotePad() {
		super("记事本2020");
		//创建菜单项
		miNew = new JMenuItem("新建");
		/*
		 * setAccelerator:设置快捷键
		 * 第一个参数对应键盘的键
		 * 第二个参数就是控制键
		 * SHIFT      == 1
		 * CTRL       == 2
		 * CTRL+SHIFT == 3
		 * ALT        == 8
		 * 
		 * 
		 * */
		miNew.setAccelerator(KeyStroke.getKeyStroke('N', 2));
		miOpen = new JMenuItem("打开");
		miSave = new JMenuItem("保存");
		miExit = new JMenuItem("退出");
		//注册Action事件
		miNew.addActionListener(this);
		miOpen.addActionListener(this);
		miSave.addActionListener(this);
		miExit.addActionListener(this);
		//创建子菜单
		mFile = new JMenu("文件");
		//把菜单项添加到子菜单
		mFile.add(miNew);
		mFile.add(miOpen);
		mFile.add(miSave);
		//添加分隔条
		mFile.addSeparator();
		mFile.add(miExit);
		
		miCut = new JMenuItem("剪切");
		miCopy = new JMenuItem("拷贝");
		miPaste = new JMenuItem("粘贴");
		mEdit = new JMenu("编辑");
		mEdit.add(miCut);
		mEdit.add(miCopy);
		mEdit.add(miPaste);
		miCut.addActionListener(this);
		miCopy.addActionListener(this);
		miPaste.addActionListener(this);
		
		//创建菜单条
		menuBar = new JMenuBar();
		//把子菜单添加到菜单条
		menuBar.add(mFile);
		menuBar.add(mEdit);
		//菜单条添加到窗口
		setJMenuBar(menuBar);
		
		txtContent = new JTextArea();
		//添加到窗口,添加滚动条
		/*
		 * 垂直滚动条一直出现:JScrollPane.VERTICAL_SCROLLBAR_ALWAYS
		 * 垂直滚动条从来不出现:JScrollPane.VERTICAL_SCROLLBAR_NEVER
		 * 垂直滚动条需要的时候自动出现(默认值):JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED
		 * 
		 * 水平滚动条
		 * 垂直滚动条一直出现:JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS
		 * 垂直滚动条从来不出现:JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
		 * 垂直滚动条需要的时候自动出现(默认值):JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
		 * */
		add(new JScrollPane(txtContent));
		
		setSize(500,400);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);		
	}
	public static void main(String[] args) {
		
		new NotePad();

	}
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == miNew) {
			JOptionPane.showMessageDialog(null, "新建文件");
			//清空文本框内容
			txtContent.setText("");
		}else if (e.getSource() == miOpen) {
			//打开文件
			JFileChooser dlg = new JFileChooser();
			//设置对话框类型,为打开文件
			dlg.setDialogType(JFileChooser.OPEN_DIALOG);
			//打开对话框
			dlg.showOpenDialog(null);
			//获取选中的文件
			File file =dlg.getSelectedFile();
			//打开文件
			try {
				BufferedReader br = new BufferedReader(new FileReader(file));
				//读文件内容
				String txt = "";
				//循环读取文件内容,循环一次读一行
				while ((txt = br.readLine()) !=null) {
					
//					txt = new String(txt.getBytes("GB2312"),"utf-8");
					
					txtContent.append(txt + "\n");
				}
				//关闭
				br.close();
				
				
			}catch(Exception ex) {
				ex.printStackTrace();
			}
			
			
		}else if(e.getSource() == miSave) {
			//保存文件
			//打开文件
			JFileChooser dlg = new JFileChooser();
			//设置对话框类型,为打开文件
			dlg.setDialogType(JFileChooser.SAVE_DIALOG);
			//打开对话框
			dlg.showSaveDialog(null);
			
			File file = dlg.getSelectedFile();
			//获取文件名称
			String fileName = file.getAbsolutePath();
			//判断文件是否包含扩展名,indexOf返回指定字符在字符串中的索引,如果没有则返回-1
			if(fileName.indexOf('.') == -1) {
				fileName += ".txt";
			}
			
			//读取文本框内容
			String txt = txtContent.getText();
			//打开输出流保存文件
			try {
				BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
				bw.write(txt);
				bw.flush();
				bw.close();
			}catch(Exception ex) {
				ex.printStackTrace();
			}
			
		} else if (e.getSource() == miExit) {
			/*
			 * 错误图标:JOptionPane.ERROR_MESSAGE
			 * 信息图标:JOptionPane.INFORMATION_MESSAGE
			 * 警告图标:JOptionPane.Warning_MESSAGE
			 * 提问图标:JOptionPane.QUESTION_MESSAGE
			 * */
			Icon icon = new ImageIcon("upload/touxiang.png");
//			JOptionPane.showConfirmDialog(null, "退出确认?");
			//如果点击了确认就退出
			if(JOptionPane.showConfirmDialog(null, "退出确认?","退出",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,icon) == JOptionPane.OK_OPTION) {
				System.exit(0);
			}
		}else if(e.getSource() == miCopy) {
			//获取被选中的文本内容
			String txt = txtContent.getSelectedText();
			//获取系统的剪切板
			Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
			//把选中的内容转换为Transferable对象
			Transferable trans = new StringSelection(txt);
			//设置到剪切板
			clip.setContents(trans, null);
		} else if(e.getSource() == miCut) {
			//获取被选中的文本内容
			String txt = txtContent.getSelectedText();
			//获取系统的剪切板
			Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
			//把选中的内容转换为Transferable对象
			Transferable trans = new StringSelection(txt);
			//设置到剪切板
			clip.setContents(trans, null);
			
			//获取光标在文本框中的位置
			int pos = txtContent.getCaretPosition();
			
			//被选中文字前面的内容
			String prefix = txtContent.getText().substring(0,pos-txt.length());
			int len = txtContent.getText().length();
			if(pos < len) {
				//取被选中文字后面的内容
				prefix += txtContent.getText().substring(pos); 
			}
			//更新文本框的内容
			txtContent.setText(prefix);
			
		}else if(e.getSource() == miPaste) {
			//获取剪切板内容
			String txt = getCopyText();
			//获取文本框的内容
			String temp = txtContent.getText();
			//获取光标位置
			int pos = txtContent.getCaretPosition();
			//读取光标前面的内容 +      剪切板的内容
			txt = temp.substring(0, pos) + txt;
			if(pos <temp.length()) //光标不在内容的最后位置
				txt += temp.substring(pos);
			
			//更新文本框内容
			txtContent.setText(txt);
		}
		
	}
	//获取剪切板的内容
	public static String getCopyText() {
		Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();//获取剪切板
		Transferable trans = clip.getContents(null);//获取内容
		if (trans != null)
			//判断是否支持文本
			if (trans.isDataFlavorSupported(DataFlavor.stringFlavor))
				//获取并返回
				try {
					return (String) trans.getTransferData(DataFlavor.stringFlavor);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

		return null;
	}
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632