第十三周课程总结&实验报告 记事本 课程总结

实验代码

package 记事本;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
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.KeyStroke;

public class TextPad implements ActionListener {
	JFrame frame;
	JMenuBar bar;
	JMenu fileMenu,editMenu;
	JMenuItem newItem,openItem,saveItem,closeItem,memoryItem;
	ImageIcon newIcon,openIcon,saveIcon,closeIcon,memoryIcon;
    JScrollPane scroll;
    JTextArea area;
    JFileChooser chooser;
    File file;
    JLabel label=new JLabel();
    
    public TextPad() {
    	frame = new JFrame("记事本");
    	bar=new JMenuBar();
    	fileMenu=new JMenu("文件");
    	editMenu= new JMenu("编辑");
    	newIcon=new ImageIcon("d:"+File.separator+"java测试"+File.separator+"新建.png");
    	openIcon=new ImageIcon("d:"+File.separator+"java测试"+File.separator+"打开.png");
    	saveIcon=new ImageIcon("d:"+File.separator+"java测试"+File.separator+"另存为.png");
    	closeIcon=new ImageIcon("d:"+File.separator+"java测试"+File.separator+"关闭.png");
    	memoryIcon=new ImageIcon("d:"+File.separator+"java测试"+File.separator+"存储.png");
    	newItem=new JMenuItem("新建(N)",newIcon);
    	openItem=new JMenuItem("打开(O)",openIcon);
    	saveItem=new JMenuItem("另存为(A)",saveIcon);
    	closeItem=new JMenuItem("关闭(X)",closeIcon);
    	memoryItem=new JMenuItem("存储(S)",memoryIcon);
    	area=new JTextArea();
    	scroll=new JScrollPane(area);
    	
    	newItem.setMnemonic(KeyEvent.VK_N);
    	openItem.setMnemonic(KeyEvent.VK_O);
    	saveItem.setMnemonic(KeyEvent.VK_A);
    	closeItem.setMnemonic(KeyEvent.VK_X);
    	memoryItem.setMnemonic(KeyEvent.VK_S);
    	
    	newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_DOWN_MASK));
    	openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_DOWN_MASK));
    	saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_DOWN_MASK));
    	closeItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_DOWN_MASK));
    	memoryItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_DOWN_MASK));
    	
    	fileMenu.add(newItem);
    	fileMenu.add(openItem);
    	fileMenu.add(memoryItem);
    	fileMenu.add(saveItem);
    	fileMenu.addSeparator();
    	fileMenu.add(closeItem);
    	
    	newItem.addActionListener(this);
    	openItem.addActionListener(this);
    	saveItem.addActionListener(this);
    	closeItem.addActionListener(this);
    	memoryItem.addActionListener(this);
    	
    	bar.add(fileMenu);
    	bar.add(editMenu);
    	
    	frame.setJMenuBar(bar);
    	frame.add(scroll);
    	frame.setSize(1080,720);
    	frame.setVisible(true);
    	
    }
    public void actionPerformed(ActionEvent event) {
    	
    	Object obj=event.getSource();
    	if(obj instanceof JMenuItem) {
    		JMenuItem item=(JMenuItem) obj;
    		if(item==newItem) {
    			new TextPad();
    		}else if(item==openItem) {
    			chooser=new JFileChooser();
    			chooser.showOpenDialog(null);
    			file=chooser.getSelectedFile();
    			try {
    				FileInputStream fis =new FileInputStream(file);
    				byte[]b = new byte[fis.available()];
    				fis.read(b);
    				area.append(new String(b));
    				fis.close();
    				
    			}catch(FileNotFoundException e) {
    				e.printStackTrace();
    			}catch(IOException e) {
    				e.printStackTrace();
    			}
    		}else if(item==saveItem) {
    			chooser.showSaveDialog(null);
    			file = chooser.getSelectedFile();
    			
    			try {
    				if(!file.exists()) {
    					file.createNewFile();
    				}
    				
    				FileOutputStream fos=new FileOutputStream(file);
    				byte b[]=area.getText().getBytes();
    				fos.write(b);
    				fos.close();
    			}catch(IOException e) {
    				e.printStackTrace();
    			}
    		}else if(item==closeItem) {
    			System.exit(1);
    		}else if(item==memoryItem) {
    			if(file!=null) {
    				try {
    					PrintStream out=new PrintStream(new FileOutputStream(file));
    					out.print(this.area.getText());
    					out.close();
    				}catch(Exception e) {
    					this.label.setText("文件保存异常");
    				}
    			}
    		}
    	}
    }
}

package 记事本;

public class Test {

	public static void main(String[] args) {
		new TextPad();
	}

}

运行截图

第十三周课程总结&实验报告
记事本
课程总结
第十三周课程总结&实验报告
记事本
课程总结
第十三周课程总结&实验报告
记事本
课程总结
第十三周课程总结&实验报告
记事本
课程总结

设计思路

基本上和老师上课讲的是一样的,
要添加的是“保存”
这个在菜单项、快捷方式、图标,和其他四项是差不多的,
不同的一点是监听器,最后一个else if对保存进行操作。

课程总结

鼠标拖拽事件及监听处理

在一般图形界面中经常可以看到鼠标拖拽操作的情况,在Swing的事件处理中可以使用MouseMotionListener接口完成鼠标的拖拽操作。
此接口定义了如下所示的方法。
第十三周课程总结&实验报告
记事本
课程总结

单选钮JRadioButton和复选框JCheckBox

单选钮是一种常见的输入组件,它可以实现n选一的功能,最基础的就是性别的选择。在单选钮的操作中,可以使用ItemListener接口进行事件的监听。
把单选钮和复选框放到一起来讲,就是因为。复选框和单旋钮的区别是可以实现n选多的操作样式。
第十三周课程总结&实验报告
记事本
课程总结
第十三周课程总结&实验报告
记事本
课程总结

菜单组件

当一个界面中出现许多按钮时,可以利用菜单进行统一的管理与布局,这样可以让界面的功能更加丰富,布局也更加简洁。

JMenu与JMenubar

JMenubar组件的功能是用来摆放JMenu组件,当建立起多个JMenu组件之后,需要通过JMenubar组件来将JMenu组件放入窗口中。
菜单栏和菜单的关系
第十三周课程总结&实验报告
记事本
课程总结
第十三周课程总结&实验报告
记事本
课程总结

JMenuItem菜单项

JMenuItem就是加到JMenu里,JMenuItem可以理解为一种特殊的JButton组件,当选择某个菜单项时,也会触发ActionEvent事件。
第十三周课程总结&实验报告
记事本
课程总结
加快捷键老师讲了一个方法。
xxItem.setMnemonic(KeyEvent.VK_X);

总结

记事本老师上课已经做过一遍了,实现了文件的功能。课后的编程则需要在此之上实现保存的功能,并不是特别难。这次编程的代码行数有点多,还是要多多练习才行。