【JAVA程序设计】上机实验—— 完成一个记事本程序的编写

JAVA上机实验一 图形界面和流操作

一、问题提出
完成一个记事本程序的编写,以下是要求:
1、完成图像界面的设计。
2、完成读取、保存文件功能的设计。
3、完成菜单的设计。
4、能够实现文件对话框的使用。
根据完成的情况,酌情打分。
答案提交内容为:项目代码压缩包(.zip、.rar等)

二、效果截图

关于该记事本的一些操作截图如下:
【JAVA程序设计】上机实验—— 完成一个记事本程序的编写_第1张图片格式编辑,可修改字体,字号,颜色,复制,粘贴等

【JAVA程序设计】上机实验—— 完成一个记事本程序的编写_第2张图片文件下有打开,保存,新建等操作命令

【JAVA程序设计】上机实验—— 完成一个记事本程序的编写_第3张图片帮助这里可以显示该程序编写的一些Version信息。

三、程序代码
Ecplise 编写的完整源程序如下:

//MyListener 类
package Li.main;

import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.Font.*;

public class MyListener extends MyNotePad implements ActionListener, MouseListener {
	int flag = 0;
	public MyListener()
	{
	/*-----设置监听器接口-----*/
		n.addActionListener(this);
		open.addActionListener(this);
		save.addActionListener(this);
		save_as.addActionListener(this);
		exit.addActionListener(this);
		copy.addActionListener(this);
		cut.addActionListener(this);
		paste.addActionListener(this);
		i11.addActionListener(this);
		i12.addActionListener(this);
		i13.addActionListener(this);
		i21.addActionListener(this);
		i22.addActionListener(this);
		i23.addActionListener(this);
		about.addActionListener(this);
		item1.addActionListener(this);
		item2.addActionListener(this);
		item3.addActionListener(this);
		editor.addMouseListener(this);
		addWindowListener(new windowListener());
		/*----编辑区键盘事件----*/
		editor.addKeyListener(new KeyAdapter() {
			public void keyTyped(KeyEvent e){flag = 1;
			}});
	}
		/*-----窗口监听器----*/
	class windowListener extends WindowAdapter{
		public void windowClosing(WindowEvent e) {
			if(flag == 0)System.exit(0);
			else close();
		}
	}
		/*-----窗口监听器-----*/
	public void actionPerformed(ActionEvent e)
	{
		Font f2 = editor.getFont();
		JMenuItem mi = (JMenuItem)e.getSource();
	
	if(mi == n)//新建
	{
		if(flag==0)editor.setText("");
		else close2();
	}
	
	if(mi == open)//打开
	{
		loadFile();
	}
	
	if(mi == save||mi == save_as)//保存和另存为
	{
		saveFile();
	}
	
	if(mi == exit)//退出
	{
		if(flag == 0)System.exit(0);close();
	}
	
	if(mi == copy)//复制
	{
		editor.copy();
	}
	
	if(mi == cut)//剪切
	{
		editor.cut();
	}

	if(mi == paste)//粘贴
	{
		editor.paste();
	}
	
	if(mi == i11)//字体设置
	{
		editor.setFont(new java.awt.Font("宋体",java.awt.Font.PLAIN,f2.getSize()));
	}
	
	if(mi == i12)//字体设置
	{
		editor.setFont(new java.awt.Font("楷体",java.awt.Font.PLAIN,f2.getSize()));
	}
	
	if(mi == i13)//字体设置
	{
		editor.setFont(new java.awt.Font("黑体",java.awt.Font.PLAIN,f2.getSize()));
	}
	
	if(mi == i21)//字体颜色
	{
		editor.setForeground(Color.red);
	}
	
	if(mi == i22)//字体颜色
	{
		editor.setForeground(Color.blue);
	}
	
	if(mi == i23)//字体颜色
	{
		editor.setForeground(Color.green);
	}
	
	if(mi == about)//帮助菜单的关于
	{
		String message = "*---记事本---*"+"\n版本:2021/11/06"+"\n作者:Kirin Lee"+"\n版权:计算机科学与技术"+"\n感谢您的使用!";
		JOptionPane.showMessageDialog(MyListener.this, message, "关于...",JOptionPane.PLAIN_MESSAGE);
	}
	/*-----弹出菜单-----*/
	if(mi == item1)//复制
	{
		editor.copy();
	}

	if(mi == item2)//剪切
	{
		editor.cut();
	}

	if(mi == item3)//粘贴
	{
		editor.paste();
	}
}

	/*-----将文件读入到编辑区------*/
	void loadFile()
	{
		JFileChooser fc = new JFileChooser();
		int r = fc.showOpenDialog(this);
		if (r == JFileChooser.APPROVE_OPTION)
		{
			File file = fc.getSelectedFile();
			try {
				editor.read(new FileReader(file), null);
			} catch (IOException e) {
			}
		}
	}
	/*-----创建文件写入器-----*/
	void saveFile()
	{
		JFileChooser fc = new JFileChooser();
		int r = fc.showSaveDialog(this);
		if(r == JFileChooser.APPROVE_OPTION)
		{
			File file = fc.getSelectedFile();
			try {
				editor.write(new FileWriter(file));
			} catch (IOException e) {
			}
		}
	}
	/*-----文件的关闭或退出-----*/
	void close()
	{
		try {
			int option = JOptionPane.showConfirmDialog(null, "是否保存文件?", "保存文件?",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null);
			switch (option) {
			case JOptionPane.YES_OPTION:saveFile();break;
			case JOptionPane.NO_OPTION:System.exit(0);break;
			case JOptionPane .CANCEL_OPTION:return;}
		} catch (Exception e) {e.printStackTrace();
			// TODO: handle exception
		}
	}
	void close2()
	{
		try {
			int option = JOptionPane.showConfirmDialog(null, "是否保存文件?", "保存文件?",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null);
			switch(option){
			case JOptionPane.YES_OPTION:saveFile();editor.setText("");break;
			case JOptionPane.NO_OPTION:editor.setText("");return;}
		} catch (Exception e) {e.printStackTrace();
			// TODO: handle exception
		}
	}
	/*-------编辑区的鼠标事件------*/
	public void mouseReleased(MouseEvent e)
	{
		if(e.isPopupTrigger())
			pm.show(editor,e.getX(),e.getY());
	}
	public void mouseClicked(MouseEvent e){}
	public void mouseEntered(MouseEvent e){}
	public void mouseExited(MouseEvent e){}
	public void mousePressed(MouseEvent e){}
	
	public static void main(String[] args){
		MyListener dListener = new MyListener();
	}
}	
//MyNotePad 类
package Li.main;
/*参考了书籍《Java开发与应用教程(王吴迪)》、《java案例开发集锦(第二版)》*/
/*请于MyListener程序下运行!*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class MyNotePad extends JFrame {
	
	//定义菜单项
	JMenuBar mb = new JMenuBar();
	
	/*定义文件菜单及其菜单项*/
	JMenu m1 = new JMenu("文件(F)");
	JMenuItem n = new JMenuItem("新建");
	JMenuItem open = new JMenuItem("打开(O)...Ctrl+O");
	JMenuItem save = new JMenuItem("保存(S)...Ctrl+S");
	JMenuItem save_as = new JMenuItem("另存为(A)...Ctrl+A");
	JMenuItem exit = new JMenuItem("退出");

	/*定义编辑菜单及其菜单项*/
	JMenu m2 = new JMenu("编辑(E)");
	JMenuItem copy = new JMenuItem("复制(C)...Ctrl+C");
	JMenuItem cut = new JMenuItem("剪切(X)...Ctrl+X");
	JMenuItem paste = new JMenuItem("粘贴(P)...Ctrl+P");
	
	/*定义格式菜单及其菜单项*/
	JMenu m3 = new JMenu("格式(O)");
	//设置字体
	JMenu f1 = new JMenu("字体(F)");
	JMenuItem i11 = new JMenuItem("宋体");
	JMenuItem i12 = new JMenuItem("楷体");
	JMenuItem i13 = new JMenuItem("黑体");
	//设置颜色
	JMenu color = new JMenu("颜色(C)");
	JMenuItem i21 = new JMenuItem("红");
	JMenuItem i22 = new JMenuItem("蓝");
	JMenuItem i23 = new JMenuItem("绿");
	
	/*定义帮助菜单及其菜单项*/
	JMenu m4 = new JMenu("帮助(H)");
	JMenuItem about = new JMenuItem("关于");
	
	/*定义弹出菜单及其菜单项*/
	JPopupMenu pm = new JPopupMenu();
	JMenuItem item1 = new JMenuItem("复制");
	JMenuItem item2 = new JMenuItem("剪切");
	JMenuItem item3 = new JMenuItem("粘贴");
	
	/*-----编辑区----*/
	String string;
	Container container;
	JTextArea editor = new JTextArea(string);
	Font font = new Font("sanserif",Font.PLAIN,14);
	
	MyNotePad(){
		super("记事本");
		setBounds(300, 300, 700, 500);//设置窗体长宽和屏幕上的位置

		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {System.err.println("不能设置外观的原因;"+e);
		}
		container = getContentPane();
		container.add(new JScrollPane(editor));
		addFileMenu();
		addEditMenu();
		addFormMenu();
		addHelpMenu();
		addJMenuBar();
		addJPopupMenu();
		//设置可视化,点击“X”,自动关闭
		setJMenuBar(mb);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	private void addFileMenu() {
		m1.add(n);
		m1.add(open);
		m1.add(save);
		m1.add(save_as);
		m1.addSeparator();
		m1.add(exit);
		m1.setFont(font);
	}

	private void addEditMenu() {
		m2.add(copy);
		m2.add(cut);
		m2.addSeparator();
		m2.add(paste);
		m2.setFont(font);
	}
	
	private void addFormMenu() {
		m3.add(f1);
		m3.add(color);
		m3.setFont(font);
		f1.add(i11);
		f1.add(i12);
		f1.add(i13);
		color.add(i21);
		color.add(i22);
		color.add(i23);
	}
	private void addHelpMenu() {
		m4.add(about);
		m4.setFont(font);
	}
	private void addJMenuBar() {
		mb.add(m1);
		mb.add(m2);
		mb.add(m3);
		mb.add(m4);
		mb.setBackground(Color.cyan);
	}
	private void addJPopupMenu() {
		editor.add(pm);
		pm.add(item1);
		pm.add(item2);
		pm.add(item3);
	}
	
	public static void main(String[] args) {
		new MyNotePad();
	}
}

如有需要源程序文件,可以去这里下载:JAVA上机实验一:图形界面和流操作 | 完成一个记事本程序的编写

你可能感兴趣的:(Java程序设计,java,开发语言,后端)